Algorithms are realized as programs, which in turn are written in precise and prescribed programming languages. Almost universally, designers learn to think algorithmically by learning a programming language to accomplish design work. Anyone who has become a good programmer will tell you that, at some time, they focused intensely on programming and spent a great deal of time learning to do it well. The term "programming language" itself gives a hint as to why this is so. Just as the most effective way to learn a new natural language is to immerse yourself in the daily life of native speakers of that language, the best way to learn programming is to work intensely with a language to the near exclusion of other forms of thought. But even when a designer has expended all of this effort and has become an accomplished programmer, there will be aspects of algorithmic thinking still unlearned. This happens because there are general language-independent concepts to be mastered. Computer scientists learn these through a combination of studying more abstract algorithmic descriptions and programming in multiple languages. In fact, most computer scientists would assert that the science of computing is quite separate from programming skill. In particular, they will point out that not all programmers are computer scientists and (somewhat more reluctantly) that not all computer scientists are programmers. Analogous to drawings in design, programming is the craft skill by which much of computer science is done.
This book is not an introduction to programming. There are hundreds of wonderful such books, and dozens of languages on which new books are published every year. It aims rather to help the amateur (and often self-taught) designer/programmer become better at using the combination of parametric modeling and programming to do more effective design work. This chapter presents a brief sketch of the sequence of concepts typically encountered in a programming language and outlines what each step in the sequence enables the designer/programmer to accomplish. For the novice, it might serve as a needed overview, so often missing in introductory programming books. For the more experienced, its brevity might help in reviewing and connecting key ideas.