Programming is Not (Just) Problem Solving

Matthias Felleisen

Experienced computer scientists and defenders of current programming courses alike characterize programming as ``problem solving'' and often add that the choice of programming language doesn't matter. If programming were indeed just about problem solving, programming courses would have to cover all of mathematics, engineering, business, and many more fields because their practicioners solve problems every day and the fields are thus, by definition, concerned with problem solving.

The misunderstanding is due to the confusion of what programming is about and what programming is used for. In the beginning, programming was merely a tool for solving mathematical problems in science and engineering. Soon afterwards, computer programs solved many aspects of administrating businesses. More recently, people started to use programs for mechanical problems in arts and design disciplines. Still, this enumeration of applications does not tell us what programming is; it only shows in how many domains programming is useful.

To understand the nature of programming, we should look at a few examples. When a chemist converts a temperature measurement from Fahrenheit to Celcius, the chemist solves a problem. When a program converts hundreds or thousands of Fahrenheit temperatures into Celcius, it solves a related problem. When an accountant determines the wage for an employee from the numbers of hours worked, the accountant solves a problem. When a program determines the wages of hundreds or thousands of employees from their respective numbers of hours worked, it also solves a related problem. Both programs deal with two forms of knowledge: (1) domain knowledge (chemistry, accounting) and (2) knowledge about representing myriads of details as computer-recognizable data. For the first kind of knowledge a programmer or a student of programming must consult with experts in the appropriate field; for the second kind, a programmer must study computer science and what it has to offer about the design and processing of data representations.

In summary, programming is about problem solving, but its major focus is solving the problems of dealing with vast quantities of data and of managing vast quantities of code for dealing with them. A secondary aspect of programming is problem solving in specific domains of human knowledge. The key to programming is to study and to reason about the design of data representations and how the choice of data representation affects the structure of the program. Both tasks are complex and require a strong background in algebra and a programming language that enforces the consistency of a chosen data representation. Read on to see that it's about design.

PLT / scheme@cs.rice.edu

Last modified at Tuesday, 12-Oct-1999 11:14:20 CDT