Software Development
Computer programming, “software development,” has been a large enough field to qualify as an “industry” for some time now. Most programmers spend their time figuring out and writing out, in excruciating detail, procedures for machines to follow. To do this effectively, they have to know, in fairly excruciating detail, what procedures other programmers have coded so that their procedures can interact correctly. Can this field continue into the future along the same lines? I don’t believe so.
The reason is actually fairly simple: piling detailed procedures on top of each other is not a scalable activity. This is so even if we use the latest and greatest techniques for organizing these procedures using objects, aspects, patterns, and the like. As the industry has found out, large piles of code become unmanageable, or at least very difficult to manage, whatever organizational techniques are used to create them. In fact, the most successful software projects have managed to contain their most important procedures within a small “kernel.”

Cube Farm awaiting a "Bank of Programmers"
Unfortunately, the current bank-of-programmers approach to software development does not encourage this kind of small-footprint development. There is a deep reason for this. We have been missing an important class of computational kernel: machine learning. As long as the systems we create have to be programmed for every procedural variation, we’re stuck with hordes of programmers and brittle software.
The usual story goes something like this: a beautiful small system is developed; users interact with it and generate wish lists of what changes they’d like, sometimes very loudly; programmers are put to work piling code on top of the original system; the system gains more fans but gradually becomes more and more difficult to maintain; at some point, someone decides that the system needs to be “re-architected” and the cycle begins all over.
Some have argued that the solution is to embrace this cycle, speed it up, and monitor it to make sure the system evolves in “the right direction.” That’s an improvement over the traditional rudderless approach, but it misses the main point: if systems could learn, then much of the piles of code would be unnecessary. In the next few decades, either we take machine learning more seriously, or the software crisis will get worse and worse. And no, “the cloud” isn’t going to help with this in and of itself.




