Teaching computers to program. Computer programs are forms of communication. They are a conversation between programmers. This conversation describes a solution to a problem, but in a language that computers are barely smart enough to understand. As software development grows in sophistication, so do the languages used to express the solutions to problems. The conversations become more abstract. Ultimately, we may have computers that are smart enough to allow us to express a problem in very abstract, human-conversational terms, and see the computer able to implement the solution in software. This step will be necessary if software development is to keep up with the advancements we see in hardware - doubling in capability every 18 months. (Programmer productivity has been argued to double roughly once every 6 years!)