Apple has long pushed AppleScript as an easy-to-learn, English-like way of automating repetitive tasks on a Mac. Alas, I and many, many others have discovered from painful experience that AppleScript is hugely difficult to approach -- its learning curve never seems to flatten out. Even after writing thousands of lines of code in several programs that (eventually) worked, I still feel I'm groping in the dark every time I try something new. I've read other books on AppleScript, looking for one that would open the magic door and reveal the simple, friendly AppleScript that's supposed to exist.
Matt Neuburg has given us the first AppleScript book that tells the deep truth: AppleScript is a quirky, inconsistent programming language that is not only hard to learn, but hard to learn for fundamental, structural reasons. Neuburg exposes the unavoidable difficulties that are built into AppleScript's design, and then shows us practical techniques for accomodating to them and using them.
Anyone who reads this book carefully will be able to apply AppleScript with greater understanding and less wasted time, and be able to use it with far less of the disappointment, frustration, and even rage felt by all too many people who collide unprepared with AppleScript's tricks and traps.
Since there's no "look inside the book" feature, let me summarize the main sections. Part I explores AppleScript in a system context: what it is meant to do; how it is used (with an intro to the Script Editor); and what its basic concepts are. (Contra another reviewer, this 90pp part contains nothing about history; it's all current and relevant stuff, needed later in the book.)
Central to Part I is Chapter 3, "The AppleScript Experience," which describes the actual process of building a program. This chapter so perfectly reflected the confusions, frustrations, and dead-ends that I've experienced with AppleScript that I was sold: this guy really understands the problems! He doesn't minimize them or blame them on me. Maybe he can show me ways to work around them, but whether he does or not, at least he'd validated them.
Part II, 200pp, is a detailed and insightful exposition of the AppleScript language. Early in this part is a discussion of "The 'English-Likeness' Monster," showing how the attempt to be friendly distorts the language and confuses users.
Then Neuburg examines every detail of AppleScript's syntax and semantics. He doesn't do this like a typical "tech writer," rephrasing the official documentation. He has taken the time to write code to test out every corner case and exception of the language, and he lays them all bare. He looks into AppleScript's baroque scoping rules and its inconsistent rules for implicit coercion of types.
All of Part II is meat and drink to a fan of programming languages, and I read it through like a good novel. More to the point, it's a deep and thorough job of documenting the actuality of AppleScript: what syntax works, what the tricks and traps are, and what to avoid.
Part III tries to extend the same thorough methods to the process of creating applications in AppleScript, beginning with application dictionaries. Here Neuburg, like every other AppleScript user, bangs hard into the basic structural flaw of AppleScript: that all the interesting semantics and no small part of the syntax are implemented in other applications, not in AppleScript. Everything you want to actually accomplish with AppleScript, you do by sending messages to other programs -- the Finder, TextEdit, BBEdit, Mail, and so forth. The only documentation you have is each app's dictionary, and it can never be adequate. Chapter 19, "Dictionaries," contains a long editorial on "Inadequacies of the Dictionary" that details all the reasons that an app's dictionary can never tell you enough to use the app. Some of the reasons are structural (there's just no way to express the needed information) and some are due to human failure (the people who write dictionaries do a clumsy, inconsistent, and sometimes erroneous job). Neuburg can't fix these issues, but he does his best to prepare you to work around them. Nevertheless, as he says in another context, "AppleScript programming is often indistinguishable from guessing."
To sum up: this book is a deep, thorough exploration of all the quirks, dusty corners, and skeleton-filled closets of AppleScript. Reading it will make you far better prepared to use AppleScript productively.