Rich Hickey: Step Away from the Computer
Also known as Hammock Driven Development
Opening Question: When was the last time you thought hard about something for
- an hour?
- a day?
- over the course of a month?
"Key Note" talk by Rich Hickey focussing on the problem solving aspect of programming, which in his experience is influenced and successful due to a lot of thinking without the computer at hand.
He starts out with the well-established data point that bugs are most costly when they have to fixed in production and that it would be preferable to fix them during development.
Then he goes backwards one step further and suggest that bugs are least expensive to prevent in the design of the software.
Relating to this, it is his understanding that "the biggest problems in software are problems of misconceptions". When not the actual problems at hand are solved, but rather an attempt is made at solving perceived problems or problems arising solely from the suggested "solution".
Another interesting section was about tradeoffs, a word often used to justify a rushed or not fully tested implementation. According to Hickey a real tradeoff requires at least 2 possible solutions, which are then weighed and, finally, one is picked. Once you made a tradeoff, he suggests to record your reasoning and the decision in writing.
The major problem this talk focuses on, going back to the opening question, is that not enough thought is put into the problem solving aspect of software development (which after all is the whole purpose of writing programs commercially).
Speaking of the mind Hickey starts out describing it as two parts: the "Waking Brain" and the "Background Brain". According to Hickey the first one is very tactical, while the second one is strategical, abstracts, has a great ability to synthesize. Unfortunately the "Background Brain" can't be used directly, but rather will work on what is most prominent in the "Waking Brain". The way to get the "Background Brain" to work on what one desires, is to "load it up".
In order to do this, one foremost has to be aware that the "Background Brain" can only work on 7±2 problems. So how does one deal with designs that have more than 9 parts? According to Hickey a limited subset of problems should be picked and focused on those.
Once the problems to be uploaded are picked, the currently proposed solution (from the "Waking Brain") should be written down.
Then one should go over the picked problems in varying orders.
With all this preparation done, now the hammock comes into play. This "mind's eye time" — lying down with your eyes closed and thinking uninterruptedly — is an integral part of the process.
Whenever you "hear back" from your "Background Brain", depending on the situation you might want to act on it immediately, or just take note of the proposed solution. Preferably in writing.