Notes on Concepts, Techniques and Models of Computer Programming preface

I have a personal goal of improving my knowledge about fundamental concepts of Computer Science. I chose to start this by reading the book “Concepts, Techniques and Models of Computer Programming” by Peter Van Roy and Seif Haridi.

I always start reading a book by its preface and it usually pays off. This was no different with CTM which made me even more excited about the book. In its preface the authors try to outline the goals of the book and start defining some terms that will be present throughout the book.

Here I present my favorite quotes about these definitions.

Computation model

The idea of the book is to present several computation models and the authors start defining this term right away.

A computation model is a formal system that defines how computations are done.

We therefore define it in terms of concepts that are important to programmers: data types, operations, and a programming language.

What is programming?

…programming is the step between the system’s specification and a running program that implements it. The step consists in designing the program’s architecture and abstractions and coding them into a programming language.

When used in a specific situation, the general view is adapted to the tools used, taking into account their abilities and limitations.

Programming is both science and technology

Programming as defined above has two essential parts: a technology and its scientific foundation. The technology consists of tools, practical techniques, and standards, allowing us to do programming. The science consists of a broad and deep theory with predictive power, allowing us to understand programming.

Knowing the tools prepares the student for the present. Knowing the concepts prepares the student for future developments.

I love this last quote as it perfectly expresses my thoughts on learning tools and concepts of Computer Science and software development.

Programming is more than a craft

The problem is that programming is almost always taught as a craft, in the context of one or a few programming languages. You end up learning a language deeply and start looking at everything in Computer Science through that language. What this usually means is that the errors or problems that such language has about one concept become the concept’s problem, for example, concurrency in Java is complex but that doesn’t mean that the concept is complex. Someone can come with a form of concurrency that is not complex which can be used in Java or any other language.

Designing abstractions

The most difficult work of programmers, and also the most rewarding, is not writing programs but rather designing abstractions. Programming a computer is primarily designing and using abstractions to achieve new goals.


Judging from the preface I can’t wait to dive into the other chapters and I intend to post my notes on them. Stay tuned!