The Future of Software

Preventing the Collapse of Civilization

June 27, 2021


I recently came across a talk by a guy named Jonathan Blow given at a video game developers' conference in Russia a few years ago titled "Preventing the Collapse of Civilization". Now I do find it quite ironic that a video game developer was the one giving this talk when there is a strong argument to be made that video games do contribute to the collapse of civilization (although I do not consider myself anti-video games, they are good in moderation) but this was quite a good tech conference talk that I'd like to discuss.

Blow's talk reminded me of another tech conference talk that I came across before I'd even started this website titled "The Future of Programming" which was given by a guy named Robert C Martin. Bob Martin is fairly well respected in the world of software because he was among the fathers of the Agile movement which is something which competent software developers should at least be aware of (although whether or not they are a disciple of it is another discussion). I don't remember if I've ever talked about it here, but Martin's talk is one that I've thought about several times since first hearing it.

Both of these talks are worth a listen although Blow's talk is much more entertaining and effective for people outside the software development world (Martin takes quite a while to get to his point since before he gets there he has to give a retelling of the history of software development to an audience already familiar with much of it, you'll be bored if you've never heard the term Waterfall Method) The point that these two speakers share in common is that software development is in a state of decline and has been for quite some time.

Blow spends a lot of time debunking the idea of constant technological progression. If we are supposed to be constantly advancing why is it that a country who claims to have won the space race would find itself hiring the people they say they lost to to launch their stuff into space only a few decades later? Why did napalm have to be invented in the 1900s when the Byzantine Empire equipped their warships with a similar substance hundreds of years before? Why is it that innovations of people like Joel Salatin are ignored in favor of less practical solutions? Any student of history should know that thousands of inventions, crafts, and trades have simply been lost to time, and any intelligent person should recognize that history repeats itself, no technology is safe from becoming lost and in many ways software is in a dangerous spot.

In his talk, Bob Martin quoted Alan Turning, whom many consider to be the father of computing (or at least computer science), I don't remember the exact quote, and I can't be bothered to look it up, but it went something along the lines of, "The world is going to need a lot of disciplined mathematicians to run computers." Turning was right but disciplined mathematicians was not what the world got, instead my favorite was a group of guys in their early 20s in a smelly office and no plan. We can of course make fun of this all we want but it is also important to realize their accomplishment, they did something that today's developers couldn't, they built their own engine and tools which, as Blow points out, are skills that almost nobody in the field today posses, and they were able to make a better game because of those skills. This is proved not only by the excellence of Homeworld, the game they made, but also by the fact that the 2015 remake of it is vastly inferior to the 1999 original (unless of course you are dumb enough to judge games by their graphics).

In many ways things have become easier to program, developers don't have to build a lot of the stuff they used to anymore which is good in the sense that it cuts down on development time but it is bad because it produces developers who no longer know how to. While Blow never directly said it this it is clear that this was something that he wanted us to take away from the talk. Unfortunately not everyone is self-aware enough to come to that conclusion. After he spoke a few people in the audience were given the opportunity to ask questions, one guy asked something like, "I want to be able to do X but in order to do that I have to look into some crazy complex C and C++ code." I guess that was a statement rather than a question but if there was a question in there somewhere it didn't amount to much since Blow didn't have much to say other than a confirmation of the guy's statement, which in istelf was a confirmation of Blow's entire point. An equally experienced developer from ten years ago could have likely understood and worked with the C code that this guy couldn't because it was probably an equally experienced developer who wrote it. As developers use more and more things written by others they will lose more skill unless they take the time to understand the things they are using.

Let's take a look at the current state of computer science education, most universities have transitioned to teaching most of their curriculum using Python because it is easy to learn and relatively easy to work with. If you are going to pick up programming as a hobby or as something to assist you in your work in a different field Python is a great language to start with and in many cases even stick with, but if you want to become a serious software developer you are going to want to know more things than what Python can offer you. For example because Python is an interpreted language rather than a compiled one there is no way to do a switch statement in Python. People like me who were formally taught about switch statements feel hindered when they are forced to use long inefficient blocks of if else statements while people who were really only trained in Python won't know the things that they don't know.

But switch statements are a relatively minor thing, especially when we recognize that a good compiler will probably optimize if else statements to function like the superior switch statements. But what about things that are harder to replace? What about pointers? While pointers are not all that useful by themselves they are a fundamental part to many essential data structures like stacks, queues, trees, graphs and even blockchains, then of course the entire concept of passing values by reference and by value is entirely dependent on the functionality of pointers. And yet pointers can never be discussed in a class that isn't teaching C or C++ because they are pretty much absent from most other languages. Developers, like the ones coming in having primarily only worked in Python, who didn't learn about pointers early enough will not have the skills necessary to create unique data structures when the need arises, and people like me who did learn about pointers but then use other languages are left untrusting of libraries where the documentation doesn't tell you if function inputs are pass by value or reference.

Bob Martin estimates that the world's population of software developers doubles every five years, this is how he rationalizes the fact that the software industry has grown to be one of the largest in the world in only a small number of decades. If his assumption is true and if we were to say that nearly all new software developers entering the field from here on out aren't well educated in a particular skill then in five years half the industry won't be very good with that skill, in ten years only about a quarter of the industry will be any good at in and in twenty years the skill will virtually be gone.

Think of all the skills that have already gone extinct from the industry already. Blow spends a good portion of his talk discussing this, we already mentioned that video game developers no longer make engines and tools, but it is even crazier to realize that the Unix operating system was made by one guy over a span of three weeks, programmers don't do this anymore. Martin pointed out the fact that basically all the innovation in the software space took place in the 70s, people are only just now starting to realize the shortcomings of object oriented design. Virtually all of the innovation in the computer world happened in the hardware world, ever since programmers haven't had to constantly think about memory and time constraints they've forgotten how to make code efficient. Computers were faster when they were slow.

Is there a solution to this problem? I'm not sure. Bob Martin suggests the formation of some sort of board to let the software industry self regulate themselves much like doctors and lawyers will. I'm skeptical of this and I think Martin himself would soon become hesitant of giving such an organization power, Martin joined the industry very young with little to no formal training, thousands of people do this same thing every year it is quite likely that the board that Martin is suggesting would make it so people wouldn't be able to have the same opportunity he did.

Johnathan Blow spent a good deal of time discussing innovations that have been lost to time. These innovations became lost after cultural shifts, Bob Martin spent a lot of time discussing the cultural shifts that happened in the software development world. We put emphasis on studying history to prevent ourselves from repeating it but we aren't very good at correcting history. If it is cultural shifts that cause us to loose innovation then it is a cultural shift that is needed to bring innovation back.