When writing this book I mostly had in mind people who want to understand Mathematica programming, and particularly those Mathematica users who would like to make a transition from a user to a programmer, or perhaps those who already have some limited Mathematica programming experience but want to improve their command of the system. Expert Mathematica programmers will probably find little new information in the book - may be, the last chapter could be of some interest to them.
The first part of the audience for this book are scientists who would like to understand Mathematica programming better, to take advantage of the possibilities it offers. The second part are (software) engineers who may consider Mathematicaas a tool for a prototype design. In this context, Mathematica can serve as a tool of "experimental programming", especially useful in projects where some non-trivial computations/research have to accompany programming.