The Next Ten Years in Programming

So, I’m in the mood for some prognostication today. Assuming the whole notion of programming isn’t rendered irrelevent by Singularity (hah!), a new Global Dark Age, or the Second Coming, here’s what I think we can expect to see in the next ten years:

  1. Energy considerations will begin to dominate computing.
    • The notions of optimizing for speed and optimizing for power consumption will begin to converge.
    • Energy efficiency will become a selling point for all “consumer” computing devices (not just battery-dependent ones).
    • We will see the beginnings of hardware and software infrastructure for energy accounting similar to that available for CPU time. This includes profilers.
    • Fine-grained billing for use of computer resources will make a little bit of a comeback. People will still prefer flat rates.
    • “Ubiquitous” computing will become popular in developed regions, but energy economies of scale (and a desire to avoid contact burns from high-powered portable devices) will be a selection pressure towards a network of just-dumb-enough nodes and centralized computers.
    • Many things will turn out to be cheaper to do than to simulate.
  2. Restricted access to hardware will become an increasing problem for Open Source (and everyone else too).
    • Microsoft will enter IP cross-licensing agreements with selected hardware vendors for the computing devices it manufactures. These vendors will subsequently be unable to release documentation or Open Source drivers for any hardware which uses the cross-licensed IP.
    • Widespread implementation of “Trusted Computing” will make who gets to determine what software can run on a particular piece of hardware a major issue. There will be a battle over whether mainline gcc should include support for code signing.
    • Because of remote attestation, people may find themselves carrying separate, otherwise redundant, devices in order to communicate with different “domains of trust”.
    • The workarounds necessary to function in such an environment will open many new avenues for social engineering attacks.
  3. Having exhausted the “do everything in sequence as fast as possible” avenue, systems designers will try to attain performance by becoming increasingly parallel and asynchronous.
    • Declarative programming languages will become the more efficient option over imperative ones, not so much as a result of powerful new optimization techniques, but rather because hardware and software environments will become more suitable to declarative approaches and less suitable to imperative approaches.
    • The management of many resources programmers (and even users) are accustomed to managing manually will become abstracted and automated out of necessity. Locks will be the first victim. However, a careful understanding of the way in which they are managed behind the scenes will be necessary to avoid pathological cases.
    • Again out of necessity, optimistic resource management techniques will become an increasingly popular area of research, to be followed by frantic research on how to mitigate or avoid the worst-case scenarios introduced by the use of optimistic strategies.
    • The C/C++ family of languages (which includes Java and C#) will eventually experience a crisis as they become increasingly inefficient on the contemporary hardware. C++ will attempt to solve it by introducing more template libraries. C# will attempt to solve it by becoming a concurrent ML dialect. Java will attempt to solve the problem by pretending there isn’t one. C will attempt to solve the problem by not caring.
    • Ruby will mutate into something resembling Erlang, hopefully without losing its Ruby-ness.
    • Perl 6 will be well-suited to the new environment, but will have difficulty overcoming the fact that it really, really freaks people out. It will also never be finished, although that fact will not stop people from writing useful programs in it.
    • Some problems will not parallelize well, even on a quantum computer.

Some of these things are obvious, some are silly… and some are already happening. We’ll check back in a few years to see how I’m doing.