Fifteen
I've recently re-read Dan Ingalls article about the Design Principles Behind Smalltalk. This text was in many subtle ways deeply influential on my thinking about software design. It starts of with describing the aspiration of the Smalltalk group at Xerox PARC as to provide computer support for the creative spirit in everyone
, leading as a corollary to the principle of personal mastery that a system, which is to support that goal, must be entirely comprehensible to a single individual
.
Now, fast forward fourty-odd years and contrast these noble aims with the mess that is basically all of modern computing (and software engineering as part of it). A column by George Fairbanks, that I also recently came across, reflects on Intellectual Control, and more specifically the loss of it and its (in my eyes lesser) replacement, statistical control through testing. Does he see ways out of the hole we've dug ourself into?
There are several techniques commonly used to simplify software designs. If you see these, they are signs that the authors have intellectual control: separation of the problem and solution concerns, explicit data structure invariants, operations with clear contracts, minimization of the state space, attention to failure conditions, and a suitable architecture.
Rich Hickey gave a well-received talk at the Strangeloop conference on Simple made easy, but in the more that a dozen years that have passed since then, not too much in that direction happened. John Ousterhouts Philosopy of Software design has many great pointers for a start, but could use a bit of companion literature. I hope Greg Wilson follows through with his idea of writing a book on Human-scale software.
So, to formulate it as a big question looking for answers: how can software systems be built so that you can keep intellectual control over them and potentially facilitate personal mastery over them for their users?
As I have about three decades of my professional life before me, so I should probably try to contribute a pieces or two to that puzzle.