The Single Most Important Thing
What is the single most important feature of a programming system without which you can’t write programs effectively?
My answer is: the vast amount of accessible documentation and knowledge out there. For example, I can’t program in an airplane without Internet; I roll for 10 minutes until I get stuck on something for which I don’t know the answer, or I know that there’s a much better way of doing it, I just don’t remember the API. This is followed by a feeling of frustration that makes me quit the IDE/emacs/vi and write a blog post or start working on the PowerPoint slides for a talk. Forget about types, objects, and whatnot. On-demand documentation, examples and question answering `a-la Stackoverflow is the single most important thing for me. I bet for others too.
This is quite a dramatic change from how things were back in the 20th century. The Web and search engines have raised the bar really high, a bar that we didn’t even know existed: the acquisition of “brick knowledge.” Brick knowledge is knowledge about specificities of how to do things. For example, if I want to add a feature to my program that uses gzip compression/decompression of certain data, the non-brick knowledge is knowledge about compression in general, about gzip in particular, and what it does to the performance of my program; while the brick knowledge is knowledge about the specific APIs or example code that implements compression in the various programming systems (say, .NET or Python or Haskell). Once I know what I want to do, and why, I just pull up a search engine and type “.net gzip” or “python gzip” or “haskell gzip” and the brick knowledge magically appears in seconds. Without the Web, I’m stuck.
In the old days, people coped with this by specializing on specific programming systems. This would allow them to acquire vast amounts of brick knowledge, so they had it when they needed it. The Web has changed the game. These days, I feel I can program in just about any language/system out there… I CAN HAZ POWER… as long as there’s searchable brick knowledge about it.
The more the better. So the best programming systems, for me, are those for which all my information needs are satisfied with a search using reasonable keywords.
One of these days, I’d like to prototype a programming system that lets me write programs as a sequence of search queries 🙂