Greg's Best of 2004


As some of you may know, I’m rather fond of reading. With Christmas coming up, I thought I’d share my favorite books of 2004. The first few are technical; the others are, well, rather a mixed bag, actually. Enjoy…


Michael C. Feathers: Working Effectively with Legacy Code. Prentice-Hall PTR, 2005, 0131177052, 434 pages.
Feathers defines legacy code as code that doesn't have tests. As he says, most programmers spend most of their time fixing bugs, porting to new platforms, adding new features—in short, changing existing code. If that code is exercised by unit tests, then changes can be made quickly and safely. If it isn't, they can't, so your first priority should be to get the code you're changing under test. Simple, right? Except that most of us don't do it, or don't do it well, because we've never been shown how to do it systematically. Want to know three different ways to inject a test into a C++ class without changing the code, which classes or methods to focus testing on, or how to break inter-class dependencies in Java so that you can test one module without having to configure the entire application? It's all here.
Mike Gunderloy: Coder to Developer. Sybex, 2004, 078214327X, 297 pages.
The subtitle of Coder to Developer is Tools and Strategies for Delivering Your Software, and that's exactly what it's about. Project planning, source code control, unit testing, logging, and build management are all there; importantly, so are newer topics, like building plugins for your IDE, code generation, and things you can do to protect your intellectual property. Everything is clearly explained, and illustrated with well-chosen examples. While the focus is definitely on .NET, Gunderloy covers a wide range of other technologies, both proprietary and open source. I'm already using two new tools based on references from this book, and plan to make the chapter on "Working with Small Teams" required reading for my students.
Ed Skoudis: Malware: Fighting Malicious Code. Prentice-Hall, 2004, 0131014056, 647 pages.
This thick brick of a book is a survey of harmful software, from viruses and worms through Trojan horses, root kits, and even malicious microcode. Each threat is described and analyzed in detail, and the author gives plenty of examples to show exactly how the attack works, and how to block (or at least detect) it. The writing is straightforward, and the case studies in Chapter 10 are funny without being too cute. It's one of the best practical books on software security I've come across so far, and also the one that I think is most widely useful.
Joel Spolsky: Joel on Software. APress, 2004, 1590593898, 362 pages.
If you're involved in the software industry in any capacity—developer, manager, cheerleader on the sidelines—Spolsky's weblog is a must-read. His observations on hiring programmers, measuring how well a development team is doing its job, the API wars, and other topics are always entertaining and informative. This book (which is a collection of his on-line essays, updated and cross-linked) 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 the web, but having it in one place, edited, with an index, is probably the best twenty-five dollars you'll spend this year.
Joe Walnes, Ara Abrahamian, Mike Cannon-Brookes, and Pat Lightbody: Java Open Source Programming. Wiley, 2004, 0471463620, 459 pages.
The biggest change in programming in the past two or three years hasn't been .Net. Instead, it's been the emergence of a "New Standard Model" of programming to replace the venerable combination of C, Emacs, Make, Unix command-line tools like cat and grep, CVS, and character streams. Its main elements are:
  • Java;
  • Eclipse and its many plugins;
  • Ant (for building), JUnit (for testing), and Subversion (for version control);
  • Tomcat (as a universal deployment engine);
  • reflection for making systems extensible;
  • XML as a universal storage format; and
  • test-driven development and systematic refactoring.
JOSP covers these topics, and many more; it also shows how they all fit together. Want to know how an experienced developer figures out how to manage object lifecycles and dependencies? That's Chapter 14. Look and feel? See Chapter 17, and so on. Best of all, the authors put as much emphasis on testing as developers know in their hearts they ought to. If JOSP isn't to your liking, you may prefer:

Everything Else

John Baxter: A Pound of Paper: Confessions of a Book Addict. Thomas Dunne Books, 2003, 0312317255, 432 pages.
Baxter is a book collector. Sounds innocuous, doesn't it? But as he says, "acquiring [books] meant midnight assignations in seedy corners of London, white-knuckle bidding at auctions, speculative drives across England to cities you'd never seen, and nervous knocking on the doors of strangers that, in all probability, would leave you, a minute later, humiliated and empty-handed on the doorstep a hundred miles from home." This, the story of how he went from small-town Australia to Paris via Hollywood and London, is a very funny, and occasionally inspired, look at people who aren't quite normal.
Mark Costello: Big If. Harvest, 2003, 0156027798, 368 pages.
Thoreau said, "The mass of men lead lives of quiet desperation." Combine that with six degrees of separation, and you have this book. An FBI agent responsible for guarding the vice president is slowly having a nervous breakdown; her brother, a designer of massive multi-player on-line games, is finding it hard to tell fantasy from reality; his wife, a real estate agent, is dealing with the world's most neurotic trophy wife; and on, and on, and on, one chapter per character, through what passes for a normal day in the early 21st Century.
Alan Furst: Dark Voyage. Random House, 2004, 1400060184, 272 pages.
I discovered Furst last year, and in less than 12 months, have read everything he's ever written. It reminds me of Le Carré's early work, as darkness falls on Europe in the 1930s, and ordinary people must choose whether to bow their heads or do extraordinary things. This particular book is about a Dutch sea captain who finds himself running errands for what is left of his country's intelligence services in the Mediterranean and Baltic. The writing is quiet and spare, and the characters captured in a few deft sentences.
Ann Hagedorn: Beyond the River : The Untold Story of the Heroes of the Underground Railroad. Simon & Schuster, 2004, 0684870665, 352 pages.
I picked this book up on a whim, then couldn't put it down. Halfway through, I started to believe that the same thing had happened to its author: she had set out to write a conventional piece of popular history, but found herself caught up in one of the greatest stories in American history. Between the 1820s until the Civil War, the Underground Railroad helped thousands of escaped slaves make their way from the American South to Canada. In that time, abolitionism went from being seditious radicalism to the greatest—indeed, the only—issue in the politics of its day. This book tells that story through the life of John Rankin, a Presbyterian minister in Ohio whose entire family became caught up in the struggle.
A. J. Langguth: Jesus Christs. Gollancz, 1968, 057500133X, 227 pages.
Finally, after eight years, I managed to track down a copy of this book that I could afford. The spine is falling apart, and the last few pages are foxed, but it was worth the wait. Written in the 1960s, Jesus Christs is a collection of short (sometimes very short) stories about saviors who never were:
Jesus was walking down the road one day when he met an old man. "I have come to die for your sins," Jesus said. "Thank you," the old man said politely. "But then what am I to die for?" Jesus thought for a moment, then took a pencil and a piece of paper from his pocket. "If you can give me your name and address," he said, "I will see that an answer is sent to you."
Susan Palwick: Flying in Place. Tor, 1992, 0312851839, 179 pages.
Every night, when Emma goes to bed, she prays that her father won't come to her room, but night after night, he does. Then, one night, she has another visitor: the ghost of her dead sister, Ginny. Calm and chilling, this book is neither fantasy nor horror, and too proud for the pat endings of most of the "problem" novels that well-meaning teachers inflict on teens these days.
Terry Pratchett: Going Postal. HarperCollins, 2004, 0060013133, 384 pages.
What can I say? For my money, he's the funniest man writing in English today. This isn't his best book—that would be The Amazing Maurice and His Educated Rodents, in which a bunch of magically-smartened rats grope their way toward religion, or Wyrd Sisters, or Night Watch—but Pterry's deadpan humor, combined with his restless belief that both we and the universe are greater than we know, is like nothing else on the shelf.
Alexander Tsiaris: The Architecture and Design of Man and Woman : The Marvel of the Human Body, Revealed. Doubleday, 2004, 0385509294, 264 pages.
This is the most beautiful book I've held in my hands since Stewart Brand's How Buildings Learn. Picture by picture, it reveals the inner workings of the human body: heart and gut and muscle and bone, and all the squishy bits that we'd all rather not think about. Tsiaris's background in medical imaging is very much in evidence here, but so is his appreciation for the art of Da Vinci and his Renaissance peers.
Adam Zamoyski: Holy Madness: Romantics, Patriots and Revolutionaries 1776-1871. Penguin Books, 2001, 0141002239, 520 pages.
And I thought I was cynical… This book is a history of revolutions and revolutionaries in the Romantic era, from America in 1776 to the Paris Commune of 1871. Its overt thesis is that the "Century of Revolution" was an attempt to make a new god out of the twin ideas of liberty and nationality, to replace the one overthrown by the Enlightenment. Its subtext is that the idealism that led young men to fight in France, Poland, Italy, South America, and elsewhere doomed them to fail, and to thereby bring about the colder, bloodier fight that consumed Europe between 1914 and 1989. When you're done with this (or when it's done with you), pick up Walter Stewart's Tommy: The Life and Times of Tommy Douglas (who was recently voted the Greatest Canadian of all time).

The Best of the Rest

Best album: John Hammond's Wicked Grin.
Veteran blues singer/guitarist John Hammond doing a baker's dozen of Tom Waits' best songs? Including 2:19, 'Til the Money Runs Out, and I Know I've Been Changed? How can this not be a good thing?
Eternal Sunshine of the Spotless Mind.
The best film of 2004, written by the same Charles Kaufman who penned Confessions of a Dangerous Mind, Adaptation, and Being John Malkovich. Is it strange? Certainly. Funny, touching, sad? Absolutely. And hopeful? Is the ending hopeful? I still don't know…
The Future Is Wild.
"Imagine a world millions of years in the future…" No, there are no spaceships, but there are alien creatures: teratons, flish, and octopi that swing through the trees like monkey. This brilliant series from the BBC explores how evolution works by taking a look at what might happen to life on our planet next. Parts of it were created by Dougal Dixon, author of After Man: A Zoology of the Future (which I have bought, and either given away or had "borrowed", more than a dozen times).
Evo, designed by Philippe Keyaerts, from Euro Games.
"217,453,883 years, seven months and 26 days before our time, the first dinosaurs left their home in the sea and climbed onto the land. In order to survive and flourish, they had to evolve, and to do it quickly!" Each player in this family board game is responsible for a single species of dinosaur. Your job? Help them evolve as quickly as possible, because the asteroid is coming. Combining luck, skill, and lighthearted humor, this game takes about an hour and a half to play, and is suitable for children 8 and over.