June 2, 2004
Previously at GTxA we’ve discussed the issue of whether media artists and theorists should program (1 2 3 4), mentioned Mary Flanagan’s and Ken Perlin’s new procedural literacy project, and generally championed the idea that new media artists, game designers and theorists, media and software studies theorists, and generally anyone involved in cultural production on, in or around a computer, should know how to program. Of course people have been talking about the importance of procedural literacy for awhile, with Seymour Papert describing his work with teaching children to program in Logo in the 1980 book Mindstorms, Alan Kay and Adele Goldberg describing procedural environments in which everyone, including children, can build their own simulations in the 1977 paper Personal Dynamic Media, and Ted Nelson crying in the wilderness that “you can and must understand computers NOW” (including programming) in his 1974 Computer Lib/Dream Machines. But a couple of months ago Mark Guzdial turned me onto an even earlier argument for universal procedural literacy, one given by A. J. Perlis in a talk at a symposium held at M.I.T. in 1961 to celebrate its 100th anniversary, and published in the collection Management and the Computer of the Future, Martin Greenberger (Ed.), MIT Press. The symposium consisted of 8 talks, with two discussants responding to each talk, and was attended by such luminaries as C. P. Snow, J. W. Forrester, Herb Simon, J. McCarthy, and A. J. Perlis. Perlis’ talk, The Computer in the University, focused on the role the computer should play in a university education.
Perlis begins by describing current common uses of the computer in university settings, primarily for numerical analysis. He notes that most university computer use is characterized by “…extensions of previously used methods to computers; and they are accomplished by people already well trained in their field who have received most of their training without computer contact” . He notes that most students learn to use computers in relatively haphazard ways, either driven by the need of some particular application, or in the context of a numerical analysis course that is primarily focused on teaching numerical methods, or on their own, or in a course that teaches some particular programming language. None of these approaches focus on the teaching of computation per se. In describing the programming language approach, for example, he writes:
A credit course involving the use of some automatic programming language is provided. Fluency in ‘conversation’ with this language and clear understanding of the language’s grammar are the intent of such a course. Here, too, the approach suffers from limited and even misguided pedagogic objectives; and the result is a student well conversant in, say, Algol 60, but still very likely uneducated as to the scope of computation. 
Note that this approach is similar to the way computing is currently taught in media arts programs, primarily as a black box tool (substitute Photoshop or Director for Algol 60) rather than focusing on the conceptual possibilities of computation itself.
Perlis goes on:
These approaches all fall far short of what is urgently needed. Whatever appreciation of computers they invoke comes too late in the education program and is inevitably too parochial. It is thus important to state quite clearly when the computer and the student should first meet and what should be the nature of their first acquaintance. As others have stated in other contexts, the product of a university education should receive training directed to the development of sensitivity, rationality, and an intelligent table look-up procedure.
Sensitivity, as the poet MacLeish so aptly has said, is a feeling for the meaning and relevance of facts. Rationality is fluency in the definition, manipulation, and communication of convenient structures, experience and ability in choosing representations for the study of models, and self-assurance in the ability to work with the large systems that are unfortunately necessary for modeling and solving the important problems of our times. Table look-up, of course, refers to the mechanism for gaining access to a catalog of facts and problems that give meaning and physical reference to each man’s concept of, and role in, society. While the computer may conceivably play a small role in the development of human sensitivity, it is quite critical to the other two developments. Indeed, no other mechanical instrument combines so well the theoretical and practical balance necessary to these two developments. [187-188]
While steeped in a scientistic language likely to immediately raise hackles (rationality, table look-up), Perlis argues that the purpose of a university education is to help students develop an intuition for which problems and ideas are important or relevant (a cultural grounding for knowledge), teach students how to think about and communicate models, structures and ideas, and teach students how to educate themselves by tapping the huge cultural reserves of knowledge. The computer plays a critical role in two out of these three areas, and as we’ll see below, he later agrees that it actually plays a critical role in all three.
Consequently, it is felt that the first student contact with the computer should be at the earliest time possible: in the students freshman year. This contact should be analytical and not purely descriptive, and each student during this first course should program and run or have run for him a large number of problems on the computer. At least in engineering and science programs, this course should share with mathematics and English the responsibility for developing an operation literacy, while physics and chemistry develop the background toward which this literacy is applied. In a liberal arts program the course could be delayed until the sophomore year, but certainly deserves inclusion in such a program because of the universal relevance of computers to our time. 
He then goes on to admit that the optimum content for such a course is not yet known, but goes on two describe a two term course then being developed at Carnegie Tech (now Carnegie Mellon).
During the first term the students wrote programs in a symbolic machine code, the Carnegie TASS system; and during the current term they are writing their codes in GATE, the Carnegie Algebraic Language system. Coding in machine language, they are taught mechanical algorithms of code analysis that enable them to do manually what the GATE translator does automatically. In particular, they are becoming adept in decoding complex logical relations to produce branching codes and in manual decoding of complex formula evaluations by mechanical processes. The intent is to reveal, through these examples, how analysis of some intuitively performed human tasks leads to mechanical algorithms accomplishable by a machine. 
Notice that in this early course there’s a focus not on particular languages or tools, but on how the computer can be transformed into any language or tool, with a focus on process and representation.
In much of the rest of the article he proudly describes Carnegie Tech’s automated grading program, some dubious drill and test approaches to teaching computer language syntax, and the necessity for the development of time sharing so that students can be “in the computer loop” while writing and executing their programs. While most of his examples focus on science and engineering education, the argument is clear: procedural literacy is a necessary component of a general education.
Several respondents then comment on Perlis’ talk, including Peter Elias and J. C. R. Licklider. Elias disagrees with the fundamental importance of programming.
Perhaps our most serious difference is in predicting the ultimate state of affairs when time-shared computers are available on every campus and good symbolic processing languages are in use. By that stage it sounds to me as though Perlis would have programming assume a large role in the curriculum, while I should hope that it would have disappeared from the curricula of all but a moderate group of specialists.
I have a feeling that if over the next ten years we train a third of our undergraduates at M.I.T. in programming, this will generate enough worthwhile languages for us to be able to stop, and that succeeding undergraduates will face the console with such a natural keyboard and such a natural language that there will be very little left, if anything, to the teaching of programming. We shall continue, of course, to have a group of students who are interested and specialize in numerical analysis per se or programming per se. But I hope that this does not continue to have to be a major concern for the large majority of people doing any kind of scientific or engineering work.
I think that if we stop short of that, if it continues to demand as much effort to learn how to speak to machines as it costs us to teach students a course for a couple of semesters, then we have failed. I do not see anything built into the situation which requires as much as that. 
Elias desires the development of frictionless tools that, like the computers on Star Trek, with little work allow us to make the computer do our bidding (e.g. “Computer, gather data on the anomaly, correlate it with all known space phenomena, and suggest a course of action.” Computer: “Done”). The problem with this vision is that programming is really about describing processes (as Perlis himself will say in a moment), describing complex flows of cause and effect, and given that it takes work to describe processes, programming will always involve work, never achieving this frictionless ideal.
Pete [Elias], I think the first apes who tried to talk with one another decided that learning language was a dreadful bore. They hoped that a few apes would work the thing out so the rest could avoid the bother. But some people write poetry in the language we speak. Perhaps better poetry will be written in the language of digital computers of the future than has ever been written in English. 
What I like about this is the recognition that computer languages are expressive languages; programming is a medium. Licklider continues:
Let me explain myself. I am just a psychologist who has had the rare and wonderful opportunity of some contact with computers and some associations with computer people. All I can bring to you, I think, is a little more enthusiasm than my two colleagues here have brought with them. 
Amusingly self-deprecating words from the man who will become a major architect of DARPA’s computer science research strategy, and who’s agenda will drive much of the work in interactive computer systems and artificial intelligence for the next couple of decades.
With most of Perlis’ concepts and ideas I agree enthusiastically… The only exception is that you [Perlis] said that the computer would not do anything toward the creation of sensitivity, and with which I disagree wholeheartedly.
Perlis: I disagree with it too. 
So here he have the computer strongly incorporated into all three aims of the university, opening the door for thinking about computers in the context of cultural production. Licklider spends the rest of his remarks outlining his well-known vision combining artificial intelligence with rich interfaces to turn the computer into a real-time, interactive, intellectual partner. Much of the discussion centers around the hot, emerging topic of the time: time-sharing. In this context, Licklider makes the following curious remark.
I want to say that although nobody really has tried time sharing yet, enough people have gotten to sit with a big computer for a couple of hours to feel morally certain of the possibilities. I hope you will not mind if I illustrate this. One of my friends has a sign on his wall which says, “Put your clothes back on, lady, I’m a computer man.” The point is that once you get anywhere near something like the man-machine system which Minsky envisages, you know you really want it. 
While certainly illustrating that Licklider is a product of his time, a member of the sexist, early ’60s culture of science and technology, this statement is also interesting in pointing to the huge desire that existed within computing culture for real-time interactive computing systems, as well as serving as an indicator for the idealist urge, historically tied into the AI/interactive system vision, to transcend the body and the world of matter.
In Perlis’ response he clarifies his argument as to the central importance of procedural literacy.
Perhaps I may have been misunderstood as to the purpose of my proposed first course in programming. It is not to teach people how to program a specific computer, nor is it to teach some new languages. The purpose of a course in programming is to teach people how to construct and analyze processes. I know of no course that the student gets in his first year in a university that has this as its sole purpose.
The course in calculus that is taught in most universities today is so covered by a mass of techniques that are completely and totally associated with the task at hand that the fundamental processes are recognized only with difficulty by many students. In physics one tries to get insight into the basic physical laws in the first course; but one is talking about physics. In chemistry the course is divided up into perhaps two parts… But you are talking about chemistry, and in many students’ minds the logic is never separable from the chemistry. In English you are concerned with grammar. You learn to express yourself precisely; you learn how to write; and you learn how to write only in English.
A course in programming, on the other hand, if it is taught properly, is concerned with abstraction: the abstraction of constructing, analyzing, and describing processes. It is not the particular problem content of numerical analysis or analyzing a problem statement which is important. Rather, it is possible to skip from problem area to problem area and still stabilize on the concept of process design and analysis. Thus in a programming course, much more than in any of these other courses, it is possible for the student to abstract ideas from the particular examples given…
This, to me, is the whole importance of a course in programming. It is a simulation. The point is not to teach the students how to use Algol, or how to program the 704. These are of little direct value. The point is to make the students construct complex processes out of simple ones (and this is always present in programming), in the hope that the basic concepts and abilities will rub off. A properly designed programming course will develop these abilities better than any other course. I do not have proof that this is true. I only have very little evidence of it. But this is why I think the course should be taught.
Here Perlis makes it clear that programming is a medium, in fact the medium peculiarly suited for describing processes, and as such, a fundamental component of cultural literacy, and a fundamental skill required of new media practitioners and theorists.