Tech Talk
I, Programmer

Software is like air conditioning: When it’s working, you hardly notice; but when it breaks, it’s the most aggravating thing ever.

I’ve been wanting to write a column about software and software development for some time. Software is what I know: I’ve been creating software (and managing people who create it) for nearly 40 years. It’s given me a great career and a great life. And software is, to quote VC Marc Andreessen, “eating the world.”
Sadly, I’d be willing to bet money that your first reaction to this column was, “But I hate software.”
It seems that everyonehates software. You hardly ever hear about software when it works correctly. My spouse provides me with a never-ending litany of how the software she interacts with at work (hospital information systems) and the software she uses at home (Outlook, Quicken, Chrome and Windows) are poorly designed, flaky and always break at the worst possible moment—usually after she’s spent a lot of time getting to a particular point, upon which the software unceremoniously quits or has an error, losing all her work. Software is like air conditioning: When it’s working, you hardly notice; but when it breaks, it’s the most aggravating thing ever.
And software gets a lot of bad press. This year has been filled with news stories about software bugs like Heartbleed that expose information to hackers, as well as stories of how poorly configured software systems like those of Target and Home Depot have let hackers steal the credit card information of millions of users (more than 800 million records were exposed worldwide in 2013). Why can’t software be better than it is?
Let me step back and assert, as bad as it may seem to be, software is still pretty miraculous. Software placed a probe into orbit around a comet millions of miles from Earth and is sending back pictures. Software recognizes faces in pictures. Software lets me buy a book with a single click and have it delivered to my house in a day or two, or better, instantly to my phone or tablet. Software puts the sum total of human knowledge into a little box I carry in my back pocket, that oh-by-the-way, also lets me make phone calls. Consider, to live in a world without software, you’d have to return to 1945: ENIAC was the first Turing-complete general-purpose electronic computer (Colossus, it’s British predecessor, lacked some of those qualifications).
The pioneering computer scientist Alan Turing described a very simple machine: an infinite length of tapedivided into squares (think toilet paper) and a head, which is positioned over one square of the tape. Initially, every square of the tape contains a “0.” The head can read what’s in the square, write a “1” or a “0” in the square, and move one square left or right on the tape. That’s it. How does the head decide what to do? Well, the machine also has a state(think of it as a number from 1 to 100, although there might be many, many more than 100 possible states). When it’s turned on, the machine is in state 1. The final piece of the puzzle is a program. The program tells the head what to do (write a 1 or a 0, move left or right) based on the combination of what state it’s in (starting from state 1), and what symbol it reads under the head (a “1” or a “0”). After doing that, the program also specifies a new state, and the process repeats. Using mathematical logic, Turning proved that this machine (later called a “Turing machine”) could compute anything that could be computed by a machine; in other words, it’s “Turing complete.” And the program that runs that machine is software.
Of course, real computers don’t contain infinitely long rolls of toilet paper, and they do more than write single ones and zeroes. But the ideas are the same: Modern computers can load and store values in their memory cells (those gigabytes of RAM you read about in advertisements). They can test those values (for example, “is it zero or non-zero”) and, based on the result, decide whether to execute the next instruction in the sequence defined by their program or jump to some other part of that sequence. Despite all that, they can’t compute anything that can’t be computed by Alan Turing’s hypothetical toilet-paper machine. But they can do it a whole lot faster.
In college, we wrote a simple program to add two numbers using a Turing machine (it writes the answer onto the tape as a binary number, and then stops). As you might imagine, it was a tedious and error-prone affair. Modern computer hardware and software have made it a lot less tedious and error-prone (a topic for a future column), but it’s still a human being who writes the programs for these machines. And human beings make mistakes, for a range of reasons ranging from a lack of understanding to simple carelessness. Googling “worst programming error” brings up countless examples from one end of the spectrum to another.
Of course, if humans are the problem, why not—as the movie “War Games” suggested—get the humans out of the loop? Turns out, we’re not quite smart enough for that. Tune in next month for the next installment. Meanwhile, if you have questions or complaints about software, send them to