I’ve just come across Steve Yegge’s latest rant on the fact that most software is crap!
He then names some software which are not crap and tries to identify which caracteristics they share and…… BANG! They are all living!!!
According to Steve,
“Living software has a command shell, since you need a way to talk to it like a grown-up. It has an extension language, since you need a way to help it grow. It has an advice system, since you need a way to train and tailor it. It has a niche, since it needs users in order to thrive. It has a plug-in architecture, so you can dress it up for your party. And it is self-aware to the maximum extent possible given the external performance constraints. These features must be seamlessly and elegantly integrated, each subsystem implemented with the same care and attention to detail as the system as a whole.”
The software becomes a living entity because it does not need to be rebooted. The software can be customised, enhanced, corrected, changed (whatever…) at runtime.
Philosophically, I’m 100% with him… but, technically speaking, building a living software is a big challenge.
And how am I going to teach this to my poor students?
An update: Keith Braithwaite has his own opinion on this and, for him, the essential property is that “[i]t’s about being [able] to interact with computational objects (“object” in the broadest possible sense) in the same way you interact with physical objects.” Essentially, all the “objects” in the software become as accessible and tweakable as any Smalltalk or Squeak object.
Now I know how I’m going to teach my students how to build living software: I’ll let them play with Squeak!