Criticizing Computers
Do you ever get really mad at your computer? Are you frustrated by how everything works these days? Do you get angry not knowing who to complain to when programs or applications break down? Well, youâre certainly not the only one.
Computers and applications are our gods now. They operate in an invisible ether and live out there on some distant, mysterious Mount Olympus â better known to us as a data center. Their mercurial whims dictate our moods and our fortunes. We plead with them, but have no idea if they are listening.
Of course, it wasnât always this way. Computers used to be small and straight forward. They used to be cute! Now they are big and scary and mind boggling. Now they are so complex that barely anyone alive understands how they work in their entirety.
We were warned about this. We were warned about the dangers of too much complexity, but we didnât care. Now, rather than understanding how the thing works and what to do to fix it, we basically cross our fingers anytime we boot up our computer or open an app. These criticisms arenât original to me, I am just a messenger.
The history of cursing modern computation is storied and exciting, and below is a summary of some of the most biting critiques issued by the most brilliant minds in the field.
1. Good hardware is masking really bad software.
The processors in our laptops are over 1,000 times faster than they were thirty years ago. So itâs natural to ask, as Joe Armstrong does, why our programs donât run 1,000 times faster.
Jonathan Blow answers because software is in decline, even though it looks like itâs flourishing. Software has been free-riding on hardware for decades and actually, software technology has not improved in years.
He says that âtoday, we simply donât expect software to work anymore. ⌠âThe Five 9sâ used to be a very common phrase in the 90s when people wanted to sell you software or a hardware system. What it means is âthis system is up and working and available 99.999% of the time.â We donât use this anymore. In part because the number of 9s would be going down, and we canât make them go up again. Weâve even lost the rhetoric of quality that we used to have.â
2. All the bad code is piling up, and we donât know how to get rid of it.
Joe Armstrong says that in the last 40 years, we have written billions of lines of code that will keep programmers employed for trillions of man hours in the next few thousand years to maintain and debug the code weâve written.
On the one hand, software engineers should be thanked for this incredible jobs program theyâve created. On the other hand, to the extent that implementing software was intended as a solution to reduce labor costs, it seems that implementing software may have inadvertently increased them?
If, as the brilliant mathematician Edsger Dijkstra said, âcomputing is about controlling complexity,â then the body of work produced by the computer industryâs programmers has entirely failed.
In the past, when computers only had so much memory, programmers had to be selective about which programs would live on in memory. These constraints imposed a strict discipline on programmers, and overtime, a process of natural selection retained the good programs while weeding out the bad.
Today, memory is not an issue! We have more memory than we know what to do with. Rather than natural selection, we have a regime of hoarding. All the bad code can live on to torment and confuse the programmers of the future.
3. Programs used to be pipeable. Now, GUIs are killing pipes.
There already exists a programming philosophy with ideas on how to tame entropy and ensure that computers actually control complexity, instead of increase it. Those ideas are summarized in the Unix philosophy, which Iâve added below for convenience:
- Write programs that do one thing and do it well.
- Write programs to work together.
- Write programs to handle text streams, because that is a universal interface.
If you think about programs as modular units of computation, then you can think about combining or piping these programs together to do all sorts of new things. That way, you never have to re-program anything when youâre just trying to create a new combination of functions, and if something goes wrong in your program â itâs easy to debug since every component of your program only ever does one thing. Furthermore, because the input and output of every program is just text we can even pipe together programs written in different languages!
Pipeable programs promised a golden world of future possibilities. Combine programs together in any way you like to have the computer do whatever you ask of it! You are the master of your destiny and the computer is the ship that takes you there!
The only problem is that most of the programs we use arenât pipeable. Usually, when Iâm using an app, I am interacting with it through a graphical user interface (GUI). I click on a button, and then the app does some function. Maybe I click on the weather app to ask what temperature it will be tomorrow. The weather app will not give me my answer in a convenient output format that I can pipe into another program. The weather app might just display a number on my screen that I then have to remember and re-type in elsewhere.
4. Computers are telling me what to do, but I canât tell them what to do.
Itâs not an exaggeration to say that today, computers have more sway over human behavior than humans do over computer behavior. This, actually, was the whole idea behind the design of modern personal computers. The big idea was that users shouldnât have the ability to tinker with how their file system is organized or change the appearance or function of their operating systems. Itâs an idea that then spread to the entire world of computer application. Now it is entirely the norm to give users non-programmable interfaces where they cannot change anything about the programs that they interact with!
5. Software is not technology. It is ideology.
âWith ideas come the politics of ideas. There are thousands of computer ideas and so there are thousands of computer religions. Every faction wants to pull you in. Every faction wants you to think that they are the wave of the future and because there are no objective criteria, as in religion, there are thousands of sects and splinter groups. Everyone has a favorite language and theyâre fanatical about it! C++, Perl, Python, Ruby, PCP, C#, Lisp â but which Lisp? â East Coast Unix versus West Coast Unix. But â who gets to decide what methods will be used? What ideas will be followed in creating software? Ah â thatâs the politics of the computer world.â
âIn Hollywood, they have it down to a system. They determine who directs. In the computer world, everyone wants to design software, but they donât call it creative control. In software, itâs the same issue as in Hollywood, but nobody recognizes it. And thatâs partly because interactive software is really a kind of movie. What is a movie? A movie is events on a screen that affect the heart and mind of the viewer. What is interactive software? Events on a screen that affect the heart and mind of the user.â
âAs long as the industry thinks that software is technology, the process will not improve.â â Ted Nelson
6. Computers are fast, but in the dumbest way possible.
âThe semiconductor guys donât know much about computers so theyâve copied a bunch of ancient architectures. So what we have in the personal computers is creaky old architectures with this wonderful (semiconductor) technology. So the people driving the technology donât know anything about systems and the people who have built traditional large computer systems havenât participated in the (semiconductor) technology revolution. Supercomputers are an extremely inefficient use of power and space. They just brute-forced it. They said weâre not going to use any cleverness at all, weâre just going to pour the coal to it and see how fast we can make it run. So they just turn up the knob and go for it. And you end up with these giant steam engines that blow off all this heat. It doesnât make any sense at all from any point of view. But, you see, the situation is actually much better than that. And thatâs the part nobody counts. I mean if you take todayâs technology and use it to do a really novel architecture you can get a factor of 10,000 right now. Today.â â Carver Mead
7. No one knows what theyâre doing, and itâs a civilizational problem.
Jonathan Blow says it takes a lot of energy to communicate information from generation to generation and that âwithout generational transfer of knowledge, civilizations can die because the technology that those civilizations depend on degrades and fails.â
Well, most people canât program without help from Google and Stack Overflow, and as mentioned, basically no one understands how the computer works in its entirety, so weâve really screwed up our chances for educating the next generation in how computers really work.
One of the greatest programmers in history, who did indeed understand every component of the computer from the software down to the chip, Niklaus Wirth, wrote âthe belief that complex systems require armies of designers and programmers is wrong. A system that is not understood in its entirety, or at least to a significant degree of detail by a single individual, should probably not be built.â Not only have we built such systems, all our collective livelihoods depend on them!
I guess the best we can do is pray to the computing gods that everything works out!