Future of Programming

A few days ago, I finally got around to watching some of the session videos of DBX 2013, Dropbox’s Developer Conference that happened earlier this year. (The videos are available in the DBX Channel on Vimeo). There are some interesting talks that include the keynote address by Drew Houston and Introduction to the Dropbox API by Guido van Rossum, the author and BDFL of Python programming language. You too should spend sometime watching these videos irrespective of whether or not you would be using their API in the future as it also provides valuable insight into current state of cloud storage and file synchronization.

One non-dropbox talk that struck a chord with me was Bret Victor’s “Future of Programming“. He pretends to be giving this talk in 1973. It was aimed to be a thought provoking talk and he does a great job at that. It gave an insight into the era when bulk of the software hadn’t been invented. It is quite amazing to see the innovations that were achieved 40 years ago. He touches upon four different aspects viz., coding and manipulation of data, procedures and programming with goals and constraints, coding in text dumps vs spatial representation, sequential programming vs concurrent programming. Some of the stuff that I found interesting was the mention of Intel as a recently founded company and references to massively parallel processor array in 1973.

For my day to day work I write code in text editors that let me easily add/edit/delete lines of code. I’m not really sure if spatial representation is something that would help in this case. It is quite hard to imagine how programming in spatial environments would look like. Also concurrency is something that I have been studying quite a lot about in one of my graduate courses. It is interesting to see this particular branch making a come-back of sorts after so many decades after going into a lull period in the middle.

Bret closes his talk by saying that “We don’t know what programming is” trying to emphasize on the fact that we have to throw away our current ways of thinking if we are to solve more demanding computing problems. The most dangerous thought you can have as a creative person is to think you know what you are doing. The reason there were so many innovations 40 years ago could be because ‘they didn’t know what they were doing, so they tried everything”. Bret is in no way trying to advocate ignorance. What he suggests is a kind of informed skepticism, a kind of humility. Knowledge and past ideas are essential. What really hit the nail on the head was the following – “It’s good to learn how to do something. It’s better to learn many ways of doing something. But it’s best to learn all these ways as suggestions or hints. Not truth. Learn tools, and use tools, but don’t accept tools. Always distrust them; always be alert for alternative ways of thinking. This is what I mean by avoiding the conviction that you ‘know what you’re doing’.”

Another thing that this talk succeeds in doing is making you think about the current technologies that are prevalent and ask what makes them so popular. Current research in fields of machine learning, programming languages, distributed systems have provided us with quite a few powerful and useful languages, tools and platforms that do an amazing job at abstraction and letting you focus on the task at hand. For a lot of applications, automatic memory management is a relatively good trade off. A lot of programming languages have a bit of functional programming style incorporated into them. It’d be interesting to see how programming evolves and fun to imagine how it might look like 40 years from now. 🙂