I love programming. I also encourage people to learn some programming because (a) it is a useful way of thinking and (b) much of the world will be programmable. Here is a quick example that I just encountered when I prepared yesterday’s Tech Tuesday Index. I had a document with links to every post looking like this:
But what I really wanted were the post titles as the text for each link. Now I could have manually gone and followed each link, copied the post title and then replaced the text. Tedious. Instead I wrote the following bit of code in Google Apps Script:
This lets you select a link and automatically replaces the link text with the post title (I did it one link at a time so I could manually fix small errors, but would be easy to add a loop to do all links in the document).
Despite my enthusiasm, I want to caution against the idea that programming is not itself subject to “software eating the world.” I have been around software for 35 years and in the last decade engineering productivity is sky rocketing, enabled by open source libraries and by the availability of APIs. Need communications? Twilio. Need payments? Dwolla. Need machine vision? Clarifai. And so on (example all from USV portfolio). Much of what remains to be done is to write glue code between libraries and APIs.
But isn’t writing glue code or scripting code (as in the example above) still going to be hard and hence require a lot of programmers? On Twitter I recently found myself in a discussion of the progress that can be made here. Jonathan said about programming without “programmers”
I’ve been hearing that for around 25 years. remember Hypercard?
And Naval argued that
Any program that can write interesting code on command is basically a General AI.
This captures two commonly held views on why programming will always remain a high skill activity: It hasn’t happened yet (despite past promises) and it can’t/won’t happen (for a long time / ever) because of fundamental reasons.
I believe both of these objections will turn out to be wrong. I am not expecting an imminent solution but there is nothing foundational that stands in the way of significant progress. The following hypothetical interaction seems achievable:
Human: Computer, record a new task
Computer: Recording
Human: Find the next link in this document
Computer: Here it is
Human: Open the page
Computer:
Human: Select the headline
Computer: Do you mean this one?
Human: Yes.
Human: Copy the headline
Computer: I have it
Human: Go back to the document
Computer: Do you want me to leave the new page open?
Human: Close it
Computer:
Human: Replace the link text with the headline.
Computer: Done
Human: Thanks. That’s it.
Computer: Finished recording task.
Human: Use this task on all the remaining links in the document.It is a voice example of what some systems call “recording a macro” (I like the word “task” much better). Building a generic task recorder will likely be extremely difficult for a long time to come. But for most purposes what is needed is a domain specific one. The domain of document processing is quite limited. I see no reason why a machine couldn’t learn or be taught the relevant steps at a fairly high level of abstraction, meaning including such a command as “Select the headline.”
Programming will be where the current work on voice and bot interfaces will likely have the biggest impact. We all know how to tell another person how to do something. Soon we will be able to tell machines. The classic example of “people don’t know how to program the clock on their VCR” (yes I am dating myself) is a good illustration. Leaving aside that modern devices will mostly have clocks that are internet connected and show the right time to begin with, anyone could say “vcr, set the time to 11:19 am.”So yes, I fully expect programming to become easier and easier from here on out for the vast majority of tasks. In fact, if this is something you are working on I would love to hear from you.