Programming with Mathematica
Well-designed tools are not simply things of beauty to be admired. They are, above all, a joy to use. They seem to have their own consistent and readily apparent internal logic; using them seems natural – intuitive even – in that it is hard to imagine using any other tool, and, typically, a minimal amount of effort is required to solve the problem for which those tools were designed. You might even begin to think that your problems were designed for the tool rather than the other way around.
Programming with Mathematica is, first and foremost, a joy. Having used various programming languages throughout my life (starting with Algol and Fortran), it is now hard for me to imagine using a tool other than Mathematica to solve most of the computational problems that I encounter. Having at my fingertips an extremely well-thought-out language, combined with tools for analysis, modeling, simulation, visualization, interface creation, connections to other technologies, import and export, seems to give me everything I might need.
Ultimately though, no tool can solve every problem you might encounter; what really makes Mathematica the indispensable tool for many computational scientists, engineers, and even artists and musicians, is its capability for infinite extension through programming. As a language, built upon the shoulders of such giants as Lisp, Prolog, Apl and C++, Mathematica has extended some of the best ideas from these languages and created some new ones of its own.