Computers are Stupid
Do not take umbrage, please. I mean something very particular. Electronic computers can process massive amounts of data. They can perform calculations far faster than any human conscious mind, with remarkably little error and tremendous consistency. They do tedious and repetitive tasks more quickly than we can intuitively grasp, and they can do so more proficiently than we can credit. Human brains outperform them only because they’re massively parallel process machines with billions upon billions of neurons, each a tiny computer unto itself. But there are certain tasks that we expect even the dimmest and least capable of human beings to do, without conscious effort, that computers presently cannot. Most especially, they do not process the meaning and content of human communication. They are not capable of understanding what is called ‘natural language’. A feature of computers is that they do what they are told. The hard lesson that every computer programmer learns is that they do EXACTLY as they are told. They do not care what you meant, they do not infer what your intentions were, they have no background of experience of human desires that would let them guess what you wanted. They do what you tell them to. The responsibility for telling them properly is yours alone. When trying to instruct the machine, programmers must understand the problem down to a rudimentary level. They must be able to define what results they want. They must be able to describe a series of instructions, a sequence of atomic operations, that the machine can understand and carry out, and they must be able to understand the implications of those instructions to such a degree that they know the machine will produce the desired outcome and none other. Put a character in the wrong place, or leave out a needed one, and your instructions become garbage. Either they are meaningless, and the machine cannot recognize them, or they are functional but define undesired operations which the machine will mindlessly carry out. The latter case is far more dangerous — it’s not always easy to recognize a result that doesn’t match what you wanted. The responsibility for the outcome is yours. If the program does something, you are the one who did it: the computer is a very sophisticated tool carrying out your commands. Maybe the program even does what you wanted it to do. Mistakes are yours, successes are yours, failures are yours — and yours alone. Programmers spend far more time analyzing problems and determining precisely how they should be solved than constructing the actual programs. Trying to skip the hard, tedious grunt-work of thinking beforehand is usually a quick and speedy road to disaster, or at least failure. Every minute of forethought invested avoids an hour of searching for errors or backtracking from conceptual dead-ends. Writing the program is the easy part. Knowing what program to write, and how to write it, is the difficult part. People who cannot take their natural language understanding of concepts and, through a process of analysis, break it into its most basic constituents, make terrible programmers. I’ve seen such people try, and I’ve seen them fail. Such individuals often impress others with verbal fluency and interpersonal charisma, and so are considered ‘smart’, but their arguments lack logic, and they cannot perceive the logic inherent in the problems they face and the arguments they oppose. You can’t impress a computer. You cannot charm it. You cannot dazzle it. You cannot blind it with reasonable-sounding nonsense. The computer sees only the rigorous mathematics in your commands. Give it imprecise or ambigous orders, you’ll get undesirable results. It’s called the GIGO principle: garbage in, garbage out.