The way of the program The goal of this book is to teach you to think like a computer scientist. I like the way computer
scientists think because they combine some of the best features of Mathematics, Engineering,
and Natural Science. Like mathematicians, computer scientists use formal languages to denote
ideas (specifically computations). Like engineers, they design things, assembling components into
systems and evaluating tradeoffs among alternatives. Like scientists, they observe the behavior
of complex systems, form hypotheses, and test predictions.
The single most important skill for a computer scientist is problem-solving. By that I mean
the ability to formulate problems, think creatively about solutions, and express a solution clearly
and accurately. As it turns out, the process of learning to program is an excellent opportunity to
practice problem-solving skills. That's why this chapter is called "The way of the program."
Of course, the other goal of this book is to prepare you for the Computer Science AP Exam. We
may not take the most direct approach to that goal, though. For example, there are not many
exercises in this book that are similar to the AP questions. On the other hand, if you understand
the concepts in this book, along with the details of programming in C++, you will have all the
tools you need to do well on the exam.
1.1 What is a programming language?
The programming language you will be learning is C++, because that is the language the AP
exam is based on, as of 1998. Before that, the exam used Pascal. Both C++ and Pascal are
high-level languages; other high-level languages you might have heard of are Java, C and
FORTRAN.
As you might infer from the name "high-level language," there are also low-level languages,
sometimes referred to as machine language or assembly language. Loosely-speaking, computers
can only execute programs written in low-level languages. Thus, programs written in a
high-level language have to be translated before they can run. This translation takes some time,
which is a small disadvantage of high-level languages.
But the advantages are enormous. First, it is much easier to program in a high-level language;
by "easier" I mean that the program takes less time to write, it's shorter and easier to read, and
it's more likely to be correct. Secondly, high-level languages are portable, meaning that they
can run on different kinds of computers with few or no modifications. Low-level programs can
only run on one kind of computer, and have to be rewritten to run on another.
Due to these advantages, almost all programs are written in high-level languages. Low-level
languages are only used for a few special applications.
There are two ways to translate a program; interpreting or compiling. An interpreter is a
program that reads a high-level program and does what it says. In effect, it translates the
program line-by-line, alternately reading lines and carrying out commands.

A compiler is a program that reads a high-level program and translates it all at once, before
executing any of the commands. Often you compile the program as a separate step, and then
execute the compiled code later. In this case, the high-level program is called the source code,
and the translated program is called the object code or the executable.
As an example, suppose you write a program in C++. You might use a text editor to write the
program (a text editor is a simple word processor). When the program is finished, you might
save it in a file named program.cpp, where "program" is an arbitrary name you make up, and
the suffix .cpp is a convention that indicates that the file contains C++ source code.
Then, depending on what your programming environment is like, you might leave the text editor
and run the compiler. The compiler would read your source code, translate it, and create a new
file named program.o to contain the object code, or program.exe to contain the executable.

The next step is to run the program, which requires some kind of executor. The role of the
executor is to load the program (copy it from disk into memory) and make the computer start
executing the program.
Although this process may seem complicated, the good news is that in most programming
environments (sometimes called development environments), these steps are automated for
you. Usually you will only have to write a program and type a single command to compile and
run it. On the other hand, it is useful to know what the steps are that are happening in the
background, so that if something goes wrong you can figure out what it is.
How To Think Like A Computer Scientist With C++
