This new edition of Mastering Mathematica focuses on using Mathematica as a programming language, because programming in Mathematica is the best way to use the software to its fullest capacity. The book covers functional programming, imperative programming, rewrite programming, and object-oriented programming. It also addresses the use of Mathematica as a symbolic manipulator and a general tool for knowledge representation.