The books I’m thinking about might not be quite as old as the ones in the photo, but at least some of them will have I hope the patina of age. One of the slightly poignant aspects of working in computing is that the skills of many gifted individuals working in IT is lost within a few years – even if they commit their thoughts to a book. Unlike a novel or a work of art, the solutions and tools created by (say) Kernighan and Ritchie in The C Programming Language will one day be completely forgotten, as new languages and new processes replace them. That seems a shame.
Can any insights from the IT world be saved? Is all IT knowledge doomed to be forgotten within a few years? I believe that some aspects can and should be celebrated. Although specific languages come and go, some principles of IT remain constant. At least some of these principles are revealed in a small number of titles that have often outlived the immediate circumstances that gave rise to them, but which remain valid nonetheless. An example is Don Krug’s Don’t Make Me Think!, a guide to basic principles of web design. Unfortunately, it was written before the age of the smartphone, and so it should now be obsolete (almost every sentence needs to be qualified “except for mobiles”), but which has such fundamental observations in it that we live with its slight creakiness (I should add that in the latest edition, Krug has added an extra chapter on design for handheld devices. It’s better than nothing, although the same book written entirely today would be very different.).
So my criteria for this list are: a book that can be profitably read by a non-specialist, and which reveals something fundamental about the way a developer approaches a problem, or alternatively, that reveals something about the way that general, non-technical users interact with (or don’t interact with) computing professionals. In other words, my list is of books that are about IT, rather than being solely within IT. I am not a coder, and although I can admire an effective programming solution per se, I don’t think the general public is much the better for knowing that the sorting algorithm in the software they are using is particularly fine).
By reading, or at least by being aware of the approach of these books, users will I believe learn much of the IT-aware approach to solving problems. This may not always involve an IT solution, paradoxical as it may seem. I am convinced to this day that the first developer I ever hired was so keen on coding that he w9uld have written a C++ program if I asked him to post a letter. Being IT-aware means in this case having sufficient awareness, world knowledge, call it what you will, to decide if a computing solution is appropriate. If it takes two hours to code, and two minutes to do by hand, then perhaps the computing solution is not worth pursuing. If it is the other way round, then I would hope everyone recognises the benefit of a software solution, perhaps as a result of one or more of these books.
What are the great books? I’ve already written about why I think some of them are worth reading, and my list of the top ten books will probably change by the time I get round to writing about all of them. I fully acknowledge that in the compilation of a top-ten list I will stray into related areas such as business development, business processes, psychology and leadership. I don’t think this matters if in creating this list some titles of relevance outside computing have their lasting relevance signposted. The books don’t need to be old, but I acknowledge the list is probably biased towards older titles. There is at least one classic Agile (or rather lean development) title, but the list is probably lacking classic Agile titles, because there are so many Agile titles on the market at present and it is difficult to identify genuine contributions to the literature for very recent titles. What appears to be a unique insight often turns out to be received wisdom repeated without always much understanding. The list is restricted to titles I have read; I could certainly make it ten books, but I resisted the temptation to add several books that people say are great (like those “great” films that nobody ever watches).
In no particular order, they are:
- Steve Krug, Don’t Make Me Think! (2000)
- Eric Ries, The Lean Startup (2011)
- Fred Brooks, The Mythical Man-Month (1976)
- Tracy Kidder, The Soul of a New Machine (1981)
- Gerald Weinberg, The Psychology of Computer Programming (1971)
- Alan Cooper, The Inmates have taken over the Asylum (1998)
- Tom DeMarco and Tim Lister, Peopleware (1987)
I confess to a bias – I enjoy books with jokes. I prefer books to be short. These are not very respectable criteria for choosing classic books, but there you are.
Inevitably a selection of this kind will have some unclear borders. It is reasonably simple to state that books about the art of coding, whether one language or several, are out of scope. Hence I discount undoubtedly classic but challenging books such as Knuth’s The Art of Computer Programming (even if I had read it, which I have not, and though it is undoubtedly appealing to think that many problems in life can be reduced to a number of canonical coding solutions). I also omit titles such as Douglas Normans' The Design of Everyday Things, which, wonderful though it may be, is not a book primarily about IT, even if one that has lots of insights in how to design things that people will use.
Let me have your ideas on the classic computing titles. The ones in the list I have not written about in a separate post will be included in forthcoming posts. Happy reading!