Dr. Dobb's Journal June, 2005
Joel on Software
Joel Spolsky
APress, 2004
362 pp., $24.99
ISBN 1590593898
How Tomcat Works
Budi Kurniawan and Paul Deck
BrainySoftware.com, 2004
450 pp., $49.99
ISBN 097521280X
Foundations of Python Network Programming
John Goerzen
APress, 2004
512 pp., $44.99
ISBN 1590593715
The older I get, the more I find myself trying to make sense of things. Crazy, I know, but I don't just want my code to work anymoreI want to understand how it works from top to bottom, and how it fits into the grand scheme of things.
Judging from this month's books, I'm not the only one who feels this way. On the top of the list is Joel Spolsky's Joel on Software, which collects some of the witty, insightful articles he has written over the past four years. If you're a developer, Spolsky's weblog is a must-read: His observations on hiring programmers, measuring how well a dev team is doing its job, the API wars, and other topics are always entertaining and informative. Over the course of 45 short chapters, he ranges from the specific to the general and back again, tossing out pithy observations on the commoditization of the operating system, why you need to hire more testers, and why NIH (the "not-invented-here" syndrome) isn't necessarily a bad thing. Most of this material is still available on-line, but having it in one place, edited, with an index, is probably the best $25.00 you'll spend this year.
Budi Kurniawan and Paul Deck's How Tomcat Works is a much narrower book, but seems to be driven by the same need to make sense of things. The book delivers exactly what its title promises: a detailed, step-by-step explanation of how the world's most popular Java servlet container works. The authors start with a naïve web server that does nothing except serve static HTML pages until it's told to stop. From that humble beginning, they build up to a full-blown servlet container one feature at a time. Each time they add code, they explain what it's doing and (more importantly) why it's needed. Their English is occasionally strained, and there were paragraphs I had to read several times to understand, but this book is nevertheless an invaluable resource for servlet programmers who want to know more about their world.
John Goerzen's Foundations of Python Network Programming is superficially different, but at a deeper level, very similar. Where Kurniawan and Deck look at one way to handle one protocol, Goerzen looks at how to handle several common protocols, including HTTP, SMTP, and FTP. Goerzen also doesn't delve as deeply into how servers work, concentrating instead on how to build clients that use these protocols.
The similarity lies in the approach. As with How Tomcat Works, Goerzen builds solutions to complex problems one step at a time, explaining each addition or modification along the way. He occasionally assumes more background knowledge than most readers of this book are likely to have, but only occasionally, and makes up for it by providing both clear code and clear explanations of why this particular function has to do things in a particular order, or why that one really ought to be multithreaded. I've already folded down the corners of quite a few pages and expect I'll refer to this book often in the coming months.
DDJ