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,
- 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
- 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
- Ed Skoudis: Malware:
Fighting Malicious Code. Prentice-Hall, 2004, 0131014056,
- 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
Open Source Programming. Wiley, 2004, 0471463620, 459
- 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:
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
isn't to your liking, you may prefer:
- 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.
The Best of the Rest
- 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
- 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
- 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,
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
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
- This is the most beautiful book I've held in my hands since Stewart
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
- 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
Canadian of all time).
- 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.