This second edition incorporates the new features and functions available in version 2.0 of the Mathematica software. It teaches Mathematica users elegant programming techniques and serves as an excellent reference for anyone who runs Mathematica software.
I read this several years ago (the date is a guess) and it's a bit out of date now. Besides being a good introduction to various aspects of Mathematica programming, it is particularly strong on how packages, contexts and options work. I often refer to it for these topics.