Over the Christmas holidays I was reading a rather strange cookbook by Tim Ferris when some vague ideas about programming and cooking started to crystallise in my mind. Too vague really to turn into a paper or an essay. Perhaps a blog might be a better medium to explore these ideas? Let's see.
One of the vague ideas is that the way we do programming today, the
way we build systems, is wrong. Surely we can do a lot better? Think
for example of Bret Victor's
talk Inventing on
Principle or Alan Kay's
and Scaling. (If you haven't already watched these, you need to
stop reading and watch them right now. Go on. Do it!) Is it possible
that we could really develop all our programs like this? Is it
possible that our programs could be 100 or even 1000 times shorter?
Even if the answer to these questions is only "maybe", then surely we
should still put a lot of effort into trying, rather than condemn
future programmers to suffer as we have suffered?
So part of what I'd like to do here is to review these and other
related ideas; to look at "the road not taken"; to understand
the ideas better by trying to apply them in practice.
Another vague idea is that programming and cooking have more in common
than programming and constructing buildings. Developers sometimes like
to call themselves "software engineers" or even "software architects",
but the analogy is a bit
thin. As Glenn
Vanderburg points out, "software engineering" is quite unusual:
the term "engineering" is generally reserved for those techniques
which actually work in practice. Not so with software. And, despite
the popularity of "patterns" in the software world, anyone who has
actually read Christopher Alexander should understand that trying to
copy the current practice of architecture is not such a clever
Think instead of the organisation of a commercial kitchen, run by a
— literally the "chief" cook — and not by a "culinary
architect". Think of the respect for technique and the role of
apprenticeship in learning those craft skills. Think of a more
domestic scene, maybe on a Sunday morning. You break off from hacking
some code and you go to the kitchen to put together a chili for
lunch. Are these really such different activities? Can we learn
something from the comparison? Whatever their medium, hackers like to
understand how things really work, and relish the opportunity to
practice their skills. (Perhaps the main difference between food and
coding is that it takes a hacker to appreciate someone else's code,
but anyone can appreciate food.)
So another part of what I'd like to do here is to see what we can
learn from the
comparison. But Nathan
Myhrvold is not the only hacker to find food interesting in its
own right. So I'll also take the opportunity to look at tools,
techniques, ingredients and of course recipies.
Let's see how this goes.