Book Recommendation

Well this is awkward.

I had been intermittently doing some independent research on software engineering, and now a book has come out that is "the book I wanted to write" except actually much better. It could be worse, I know this sometimes happens to PhD candidates.

It's called "Software Design for Flexibility" by Hanson and Sussman. It could be thought of as a sequel to one of my favorite tech books, "Structure and Interpretation of Computer Programs", and in fact the level of knowledge required is moderately high so you would be well advised to read that first.

"Software Design for Flexibility" homepage

Free (& legal) version of SICP

The authors advance a thesis that I agree with, that prototypes can and should be hardened into products. And something that I hadn't thought of, that "developing narrow products" with N near-copies of product-specific code is dysfunctional and instead a field of DSLs should be developed where products can "grow". But this requires using better languages (in their case the Scheme dialect of Lisp, I had been playing with ISLisp which is very similar). I work with C in $DAYJOB, and by now think it should only be used for microkernels. And C++ (probably the "Embedded C++" subset) should only be used for VMs for better languages. The authors also excel in providing concrete low-level example designs, which I would struggle with.

ISLisp spec

I'm not finished yet but I think I can recommend the book nevertheless. So my plans have probably now been changed for me to "understand this book and apply it".