Module II: Programming abstractions and analysis

_images/bintree.png

(A perfect binary tree.)

Programming is the art of automating tasks with the help of a computer. Such tasks range from the simple and mundane to the intriguing and mind-bogglingly complex.

Whatever the task, a programmer benefits from carefully handcrafted abstractions and models of real-world processes or mathematical constructs that help one to (i) structure a program, and (ii) develop further, higher-level abstractions in terms of existing ones.

Critical to such abstractions and models is that they are

  • recurrent, that is, are encountered often enough in practice so as to warrant a dedicated description and study as their own entities,

  • useful, that is, actually help to control and encapsulate the inherent complexity of programming, and

  • efficient, that is, enable us to efficiently deploy the power of the hardware to solve the task at hand.

After Module I we understand the computer as a primitive machine that executes our programs consisting of low-level machine-language instructions. In Module II our intent is to become more powerful programmers by learning to use existing and build new abstractions in our programs.

Abstraction is entangled with analysis. Our programming tools are rarely of any real-world use unless they are efficient, both in terms of human (programmer) and machine (computer) resources invested. Accordingly, our quest in Module II is to become efficient programmers.