TITLE: Thinking in Code
AUTHOR: Eugene Wallingford
DATE: July 13, 2015 2:51 PM
A conversation this morning with a student reminded me of a
story one of our alumni, a local entrepreneur, told me about
his usual practice whenever he has an idea for a new system
or a new feature for an existing system.
The alum starts by jotting the idea down in Java, Scala, or
some other programming language. He puts this sketch into a
git repository and uses the readme.md file to document
his thought process. He also records there links to related
systems, links to papers on implementation techniques, and any
other resources he thinks might be handy. The code itself can
be at varying levels of completeness. He allows himself to
work out some of the intermediate steps in enough detail to
make code work, while leaving other parts as skeletons.
This approach helps him talk to technical customers about the
idea. The sketch shows what the idea might look like at a high
level, perhaps with some of the intermediate steps running in
some useful way. The initial draft helps him identify key
development issues and maybe even a reasonable first estimate
for how long it would take to flesh out a complete implementation.
By writing code and making some of it work, the entrepreneur in
him begins to see where the opportunities for business value lie.
If he decides that the idea is worth a deeper look, he passes the
idea onto members of his team in the form of his git repo. The
readme.md file includes links to relevant reading and
his initial thoughts about the system and its design. The code
conveys ideas more clearly and compactly than a natural language
description would. Even if his team decides to use none of the
code -- and he expects they won't -- they start from something
more expressive than a plain text document.
This isn't quite a prototype or a spike, but it has the same
spirit. The code sketch is another variation on how programming
is a medium for expressing ideas in a way that other media can't