I recently chanced on a series of articles by Dave Thomas on his approach to writing a book. I first came across Dave Thomas and co-author Andy Hunt when I read “The Pragmatic Programmer: From Journeyman to Master” — a book which I rate as one of the best general programming titles — so I read the articles with interest.
The Hero’s Journey
In the second article Thomas suggests that all good technical books tell the same story, that of the hero’s journey: just as Odysseus had to overcome a sequence of monsters on his way home from the battle of Troy, so the modern reader must undertake a similar voyage. In Thomas’s own words:
The reader joins the book already faced with a major challenge — they need to learn some new technique or technology. They need to make a commitment to follow the path. Along the way, they need to learn stuff, try things, conquering increasingly difficult concepts and challenges. Eventually they graduate; they’ve learned what they came to learn. But they journey doesn’t end there. Like the hero, they then have to come home, bringing back what they learned.
It might seem strange to find anything heroic in, for example, learning how to use an editor however powerful that editor might be, but I agree with Thomas’s point: compelling technical writing should tell a story. Should that story always fit the hero’s journey archetype? I’m less sure , but it’s certainly a pattern I’ve often (subconsciously) used myself.
Unlike Odysseus, modern literary heroes are flawed. They don’t have superhuman powers and their story doesn’t always end happily ever after. Modern technical authors understand this. You can’t teach anyone how to program in 21 days and a reader would be right to suspect a book which makes such a claim. The language used in the design patterns literature acknowledges this element of compromise explicitly: a solution to a problem emerges from conflicting forces, and will have consequences.
Similarly “pragmatic” is hardly a quality traditionally associated with heroism, yet it is the prominent word in the title of Thomas and Hunt’s most famous book, and indeed in their publishing business. Software development isn’t really about perfection, it’s about resolving problems and reaching working solutions; and by doing this well, perhaps we too can be heroes.
 There’s much comedy, pathos and failure to be found in the real world of software development, and even the occasional tragedy — perhaps these stories aren’t appropriate for technical books, but they’re well worth telling. Certainly much software development could be characterised as farce: the repetition of the same old jokes and pratfalls.
Hi (I am a CVu reader and Word Aligned lurker).
Odysseus didn't have any superhuman powers - he wasn't a hero in the Greek sense of being half divine (eg Achilles), in the Greek sense he was an anti-hero - just a human. His only powers were his intellect and guile. To that extent he's quite a good model of the human overcoming challenges.
The problem (for me) with using the Odyssey as a metaphor for the programmer's journey is that Odysseus doesn't actually learn anything from his adventures: putting aside the opening and closing sequences, you could read the Wanderings episodes in any order you like with no effect on the overall narrative.
A better literary metaphor would be the bildungsroman, which follows the hero's development from childhood to maturity. Unfortunately the ones I know all end rather badly (Sorrows of Young Werther, Portrait of the Artist), or are incoherent (Tristram Shandy, In Search of Lost Time). Maybe there's a lesson in that. I haven't read Great Expectations.
Hi Ivan. Thanks for de-lurking. Just to make sure there's no confusion, Dave Thomas merely talks about the hero's journey -- I'm the one who introduces the Odyssey as an example of a story which I understood to fit this archetype.
You're quite right, Odysseus is human: he's not super-strong, super-fast, or in possession of magical powers; he's just unusually cunning, and also I suppose a good leader. I do recall, though, that only he is strong enough to string his bow, and he single-handedly uses it to slaughter all his wife's suitors when he returns to his palace.
Maybe there are literary archetypes which fit better, or perhaps the Odyssey doesn't quite fit the hero/programmer's journey template. These ideas are well worth discussing, but I wouldn't want to push them too hard. I'm going to google bildungsromans now and see if I've read any!
Sorry for the false accusation. Odysseus is a good rôle-model - he's certainly pragmatic.
I just googled for "Hero's Journey": did you know that for £99 you can buy the complete 188-step plan? (http://www.clickok.co.uk/ClassicHero.html; actually for sitcom writers).
Essential to the Hero's Journey is attainment of the final goal and becoming a hero. Perhaps the bildungsroman developed partly in opposition to that focus: the goal is illusory; the journey itself is more important; "it is better to travel hopefully, ...".
It seems to me that programmers are exactly in this tension: we have to act as if perfect design and bugless code are our goal, but we know that these things are probably beyond us and maybe even impossible in principle.
Perhaps the programmers equivalent of 'living The Good Life' is not to try and eradicate imperfections, but to develop 'gratia artis' and to find a place in our lives for the inevitable misfortunes (bugs, design flaws, lost contracts, etc.). Of course, you wouldn't say that to the clients.