If you are involved in software development, then please read “Dreaming in Code”
A friend gifted me this book and I am really glad he did.
If there is only one thing I can to say about this book, then it is “This should be a must read for software developers, software product managers, and software engineering CS students.” Yes, it is that good.
The book chronicles the development of a personal information manager software named Chandler in early 2000. It does so in the light of how we view, have dealt, and are dealing with software engineering and its woes.
While it talks some about code, its narrative about people developing the software, people managing the development effort, and people leading the effort is as good as it gets in terms of portraying how real-world software development works — hard, fluid, broken, constantly being fixed, art, science. Yes, we have come a long way since 2004. Even so, many of the observations hold true even today.
Besides the chapters describing the development effort, few chapters (e.g., “methods” and “engineers and artists”) take pleasant, highly informative, and perception challenging detours into history of software engineering, pioneers’ view of software engineering, how we messed up, how we are messing up, and alternative views of how to “fix” software engineering. They consider views of diverse set of folks: Allan Kay (Smalltalk), Fred Brooks (mythical man month), Donald Knuth (TAoCP, TeX), Joel Spolsky (Joel on Software), Charles Simonyi (intentional programming), and Jaron Lanier (pheotropic software). These detours can really challenge the current perception of software engineering. If you have been in the trenches, then these detours will have your smirking and reinforcing your perception of software engineering :) All said, these chapters are alone worth reading the book.
Personally, I loved the book as it reinforced my reluctance to call software engineering an engineering discipline and my views about all the things we do right/wrong in the name of software engineering. I loved the historical and diverse perspectives on what is software engineering (or is it development?) and how should we approach it. Really got the rust of my wheels :)
At the end, if there is one book I’d recommend a CS student interested in software engineering, then this is it. As the books says, software engineering is a discipline in which “engineers” ignore the past to their own detriment. A first step to avoid this situation is to learn from past and current software development efforts by reading this and similar books, e.g., AOSA books, books in Beautiful X series from Oreilly.
If you are looking for a book to learn about software engineering with a good dose of its evolution, then pick this up.