I’ve had a Kindle DX for about 3 or 4 years now. In fact I’ve had two, I broke the first one by dropping it from a bench top. And I’ve been very happy with it. But it’s funny that it’s only recently that I’ve begun to use the Kindle’s scrapbooking feature to extract interesting quotes and snippets from books I’m reading.
I think the major culprit is Gerald Weinberg’s book, The Psychology of Computer Programming: Silvery Anniversary Edition. Weinberg is eminently quotable. That’s probably why I decided to start to start picking bits out for quoting.
First things first. This isn’t my first outing with a Weinberg book. Back in January I dropped a big batch review of books, including Weinberg’s The Secrets of Consulting (excellent) and More Secrets of Consulting (sadly, like most sequels, not as good).
I decided at the time that a slow saunter through this Weinberg fellows’ catalogue would be a fun expedition. Not all at once, mind you. There is something about Weinberg’s writing that somehow is just ever so slightly off for me. When I am reading it I enjoy myself and I feel like I am learning lots of useful insights. But when I’m done it is difficult to express what, if anything, I have just learned.
However it’s sufficiently entertaining, and Weinberg sufficiently influential, that I think that picking up one of his books now and then will probably be a wise move in the long run. He’s certainly a prolific writer, and some of his particular series (the Quality Systems series for example) are considered to be “cult classics”.
What’s it about?
That’s hard to answer. The book comes to us, almost unchanged, from 1971. It’s worth noting that by sheer coincidence the book was published immediately after what was to become a vital historical moment in the computer industry: the development of Unix. By convention, Unix is considered to have been “born” on the first of January 1970. When Weinberg was writing the book, Unix basically didn’t exist. Today Unix and Unix-like operating systems power billions of computers and devices.
This leads me neatly to what most programmers will note about the book: its fascinating anachronism. When he released the Silvery Anniversary edition in 1996 (itself already another world — the web had barely begun to make its mark in 1996), Weinberg didn’t rewrite any chapters or update any examples, leaving them as they were in the 1971 original. Consequently many of his discussions revolve around how quirks in the PL/I language interact with human behaviour; or the social dynamics of submitting cards to a batch processing centre. At the time Weinberg was witnessing the first stirrings of “online terminals” and timesharing systems. These are the systems which have almost totally supplanted the entire technological paradigm that Weinberg was so keenly observing.
In my father’s book collection are many fascinating curios of bygone eras. He owns, for example, a travelogue of a visit to Indonesia, written before the outbreak of World War II. Flicking through such books is like studying prehistoric insects fossilised in amber. It inserts you into the absolute unalikeness of times that and modes of thought that have almost entirely perished from the earth. The past really is, as they say, a foreign country.
But in saying all this, I’m only really addressing myself to the second half of the title (“… Computer Programming”). Weinberg also talks about the psychology, which — given that only 2 or 3 generations at most have passed through the industry since the first edition was written — is unlikely to have changed.
This is where is Weinberg’s book is at its strongest. To be sure, psychology is itself an evolving field, and Weinberg’s main references are textbooks and papers written in the 50s and 60s. But his gift for folksy insight nevertheless entertains and sometimes instructs.
Many managers still seem to want everything, and fail to understand the importance of asking for intelligent trade-offs in order to get the best product they can. It’s as if they think all you have to do to manage the New York Yankees is tell every batter to hit a home run, and every pitcher to strike the batter out.
On communicating objectives:
There is a certain danger in communicating objectives: objectives can change estimates!
On the fungibility of labour in complex design tasks:
Notice that two months would probably be the minimum time for this program to be produced with programmers of this ability, for it is doubtful whether nine programmers can do anything useful in less than about two months, considering the time it will take them to get organized. If we have to have the program faster, we shall have to hire a better man for the job.
On Parkinson’s Law:
The reason work can expand to fill the time allotted is the existence of other goals whose importance relative to scheduling is not made clear.
It’s customary in these reviews for me to end with a remark on whether I recommend a book.
In this case, it’s hard to say. I think most software types would profit in reading it, if only to get some flavour of what changes and what is eternal in our industry. But if, for example, you’re looking for an up to date treatment of the subject promised by the title … perhaps you ought to look elsewhere.