Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software, by Salon Co-founder Scott Rosenberg, tracks the development of the personal information manager Chandler at Mitch Kapor’s non-profit Open Source Applications Foundation (OSAF). While it may have set out to be a modern-day Soul of a New Machine, events take a twist for the worse for OSAF, and better for the reader.
It is no secret that Chandler has struggled to mature and “Dreaming in Code” catalogs the project’s many missteps. Chief among them is their great difficulty translating a broad vision into a concrete plan of attack. Also, while they are working on Chandler several successful, rich webapps like Gmail transform expectations about what can be delivered in a browser. All this is unfortunate for the Chandler team, but gives Rosenberg a great case study in a struggling software project. Rosenberg interweaves vignettes from the development of Chandler with a primer on why software is hard. For those who are programmers much of the descriptions of day-to-day activities (bugs, builds, language wars) are familiar. At times the slow pace of progress might have programmers yelling back at the book (“don’t use wxWidgets!” / “don’t do peer-to-peer!”). Most compelling, and a little depressing, is the long list of bright thinkers he quotes who believe modern software development is deeply flawed. And there are no shortage of expensive projects on the scrap heap to illustrate the point, like the killed $170M FBI program “Trilogy”.
Among the critics of the current practice of software development that I found most persuasive is Richard Gabriel. Rosenberg quotes Gabriel saying,
"But what do people do when they're being trained, for example, to get a master of fine arts in poetry? They study great works of poetry. Do we do that in our software engineering disciplines? No. You don't look at the source code for great pieces of software. Or look at the architecture of great pieces of software. You don't look at their design.
The pedagogy practiced in many computer science departments teaches habits that don’t scale to larger projects that require more people, more code and have more complexity. Similar to the elementary school student who tries memorize his multiplication tables, the method breaks down when the teacher asks you to multiply 942 by 1024. But I digress.
Part of my interest in reading this was to find a non-technical book that I can suggest (read: push) on those I know who have no idea what the hell it is I do. Rosenberg is writing for a general audience and succeeds. He adroitly translates complex issues (language choices, UI concerns, software methodologies) without relying solely on metaphors that lose their meaning. The end is anti-climatic with the jury still out on Chandler, since it is only at 0.7alpha. Although that fact alone might be more damning than anything Rosenberg writes. Finally, my hat is off to the OSAF team for letting Rosenberg chronicle their experiences and produce a snapshot of the current state of software development, troubled as it may be.