“Educators, generals, dieticians, psychologists, and parents program. Armies, students, and some societies are programmed. An assault on large problems employs a succession of programs, most of which spring into existence en route. These programs are rife with issues that appear to be particular to the problem at hand. To appreciate programming as an intellectual activity in its own right you must turn to computer programming; you must read and write computer programs — many of them.” -Alan Perlis, Foreword to Structure and Interpretations of Computer Programs
For perhaps understandable reasons, programming has been on my brain more than normal. One thing you notice quite quickly if you spend time around programmer jargon is that references to textbooks are never given with the title. Rather, certain books- especially those from the wild west of programming culture (i.e. the late 70s to early 90s)- had received nicknames referring to the often incredibly strange cover art given to such texts. For example, the textbook Compilers: Principles, Techniques, and Tools is known as the “dragon book” for its off-putting cover art. Similarly, the work I’m citing is known as the “wizard book,” for it’s equally odd cover art. The reason I’m telling you this- other than proving that at least some textbook makers understand their audience- is that one often hears the concept about programmers (and in a more general sense engineers) approaching problems differently- that we somehow possess special insights about computers that are beyond the reach of the average person.
While perhaps perpetuating this myth would help me and those in my major score more jobs, the fact is that understanding programming is not that hard if you get beyond the formatting.
What Perliss is getting at in all of this is that the techniques we use in programming aren’t some sort of wizardly magic, but are basic techniques we all use in some fashion. Imagine giving directions to someone- you need to divide a task into easily executable parts. Most forms of math are simply algorithms put down to paper. A computer’s main benefit is that it can do this math much faster than humans- this is why the infamous Deep Blue match went the day it did. The idea of computers being unapproachable seems to have evolved due to the increasing complexity of the modern computer. For most of the 20th and 21st century up to now, computer power was increasing at an exponential rate, and as it got smaller and faster it increasingly became a black box we relied on for everything from entertainment to education. With the rise of the graphical user interface having pushed the command prompt to the dark depths of the operating system, we’re lead to believe that our world is profoundly constrained by the boundaries we let corporations like Microsoft or Apple set for us.
The reason for putting this in the foreword of a textbook aimed at a intro-level programming course is quite simple. Perliss wants to point out that you don’t have to be someone who hacked the Pentagon at 13 to learn to code, nor that it’s something that you’ll never use. The skills of breaking down and analyzing problems is something nearly every field requires- programming just looks at it in a more unambiguous way than most. However, Perliss naturally suggests that the way towards appreciating the act of programming is to look at in this more pure format quite constantly- it’s an art more than a science, but one we all practice to some degree. The point is this: never think you can’t program if you can think- just don’t expect to be a master at it the first time.