One reason it is difficult for nonprogrammers to tell computers what to do is that the software systems that surround us are preoccupied with the structure rather than the meaning of information. We can program them to do anything we want, but they are unaware of the meaning of even the simplest things we are trying to do. Let me illustrate.It takes me 17 seconds to say to a programmer, “Please write me a program that I can use to enter onto my computer the checks I write, along with the categories of each expenditure-food, recreation, and so forth. And do this so that I can ask for a report of the checks that I have written to date, listed chronologically or by category.”
I have given this assignment several times to different people. Master programmers invariably decline to play and tell me to go buy this program because it’s commercially available. Good programmers will say they can meet the request in a couple of hours-and end up taking a day or two to develop a shaky prototype. Inexperienced programmers will say cockily that they can write the program in a few minutes as a spreadsheet macro-and are generally unable to deliver anything at all. The company Intuit, which developed the very successful Quicken program that does this job and more, took two years and many millions of dollars to develop, test, document, and bring to market.
Why can I “program” a human being to understand the above instruction in 17 seconds, while it takes a few thousand to a few million times longer to program a computer to understand the same thing? The answer surely lies in the fact that humans share concepts like check, category, report, and chronological, while computers do not. The machine is so ignorant of these concepts that programmers must spend virtually all of their programming time teaching the computer what they mean. If, however, I had a computer that already understood some of these “concepts,” then I might be able to program it to do my job in a very short time. This is an important way in which computers could increase our productivity in the twenty-first century: by being made to better understand more human concepts in better ways.
For computers to be truly easier to use, technologists will have to shift their focus away from the twentieth-century preoccupation with the structures of information tools like databases, spreadsheets, editors, browsers, and languages. In their early stage, computers became ubiquitous because this focus allowed these common tools to be used equally in thousands of applications, from accounting to engineering to art. Yet that same generality is what makes them ignorant of the special uses they must ultimately serve and ultimately less useful than they should be-much like a dilettante jack-of-all-trades.
What we need now, to boost utility further, is a new breed of software systems like a spreadsheet that an accountant can easily program and that already “understands” higher-level repetitive tasks like setting up charts of accounts, doing a cash reconciliation, and pulling trial balances.
Freed from the tyranny of generality, these specialized programming “environments” will rise toward offering a lot more of the basic information and operations of their specialty. The time has come for computer technologists to abandon the “generalist” orientation that served people well for the first four decades of the computer era and shift their focus from the structure to the meaning of information.