Dr. Dobb's Journal April 2001
Programmers, computer users, and marketers all like to talk about the "killer app" that rare (some would say mythical), must-have program that transforms the world around it and makes or breaks entire markets in its wake. The programming book business is no different, and whether they subscribe to the killer app theory or not, most professional programmers have their own short list of absolutely critical titles that came along at just the right time (in either industry or personal terms), and did precisely the right things to become instant winners. Sadly, these books are getting harder to find as publishers continue to chase fads and bombard readers with so many titles that no one can possibly keep track of them all. One of the more prominent and annoying subtrends is the production of "group books," which have one or more authors per chapter, often leading to uneven coverage of the material and a wildly varying authorial voice. As Joan Cusack said so emphatically and effectively in Grosse Pointe Blank, "This is not good."
Which is all a prelude to saying that Professional Linux Programming, by Neil Matthew, Richard Stones, et al., is not only a "killer book" for Linux programmers, but it does it the hard way by having a total of 15 authors, instead of a single person guiding it. This massive book, which weighs in at nearly 1200 pages, is the closest thing you can imagine to an omnibus Linux programming title.
Professional Linux Programming includes 28 chapters and four appendices, and covers topics as widespread as design and requirements collection, using CVS (the Concurrent Versioning System), databases (with separate longish chapters on PostgreSQL and MySQL), debugging techniques, LDAP directory services, GUI programming, the Python scripting language, PHP web site programming, CORBA, RPC, setting up a diskless Linux workstation, XML, writing documentation, programming Beowulf clusters, device drivers, and internationalization.
Longtime consumers of programming books are likely to raise eyebrows at this point and ask how one title could possibly cover that much technical acreage to any appreciable depth, especially considering how many of those topics already have multiple books devoted to them. It's a fair question, and one that the authors address by admitting in places that they can't provide more than a detailed introduction to some topics. For example, their treatment of socket programming is on the slim side, and anyone who needs to do extensive or nonmainstream socket work under Linux would benefit from a more thorough coverage, such as Warren W. Gay's Linux Socket Programming.
The truly impressive thing about Professional Linux Programming is how well the authors selected the material for each of their many chapters and how well they presented it. GUI programming, which is a world unto itself, is a good example, as they devote four chapters and one appendix, nearly 200 pages, to GNOME/ GTK+ and KDE/Qt. But aside from the raw page count, they do a good job of detailing the various needed libraries (even if their information about Qt licensing has been made obsolete by that package's availability under the GPL), and showing you how to create the interface of the book's main project with each package.
That project is a good one for this book a DVD rental store management system. Throughout Professional Linux Programming, the authors demonstrate how to use many of the technologies they cover in the context of that program and the initial requirements they described in the first chapter. This use of a long-running project in a book can be a mixed blessing. People reading the book cover-to-cover will appreciate the consistency and context the example affords, but there's always the concern that those using the book as a reference might find it a little difficult to drop back into the project's mindset. Luckily, only part of the book's sample code is associated with the DVD store example, and even then it's not tied so closely that most people will have a problem jumping into and out of the book.
Perhaps the hardest thing to communicate about this vast book is its tone. It wouldn't be saying much to point out that Professional Linux Programming is better written than the average programming book, thanks to the terrible writing and editing in many books today. But it is, and more to the point, the authors talk about numerous topics that many books and publishers shy away from, particularly in the Linux arena, like design and requirements assessments, debugging and testing techniques, and secure programming. I neither know nor care if the authors included that material simply because they thought it belonged in any professional-level programming book, or if they had an agenda and thought the Linux coders needed specific help in that area. Whatever the case, I was glad to see their thoughtful coverage on these appropriate topics.
Frequent readers of Wrox (the publisher) books are familiar with their style of presenting source code interspersed with explanatory text, and sometimes showing altered versions of code with the changes highlighted in gray boxes. Professional Linux Programming follows form, to good effect, and also makes good use of other block diagrams, tables, console listings, and a few screen shots.
The one curious omission in this $60.00 book is that it doesn't include a CD. Even though the book delivers a great deal of value for the money, and the source code is freely available from Wrox's web site, it would have been nice to see it included.
So where does Professional Linux Programming stand in the pantheon of programmer books? Clearly it isn't a book for rookie programmers. But experienced coders preparing to move to Linux, or those already in the camp who are interested in broadening their skills should consider this book a must have. In terms of its value as both a reference and a tutorial, Professional Linux Programming is as close to a Linux version of Charles Petzold's classic Programming Windows as anything that's come along to date. If that's not a killer book, I don't know what is.
DDJ