To learn to program is to be initiated into an entirely new way of
thinking about engineering, mathematics, and the world in general.
Computation is integral to all modern engineering disciplines, so the
better you are at programming, the better you will be in your chosen
field.
The author departs radically from the typical presentation by teaching
concepts and techniques in a rigorous manner rather than listing how to
use libraries and functions. He presents pointers in the very first
chapter as part of the development of a computational model that
facilitates an ab initio presentation of subjects such as function
calls, call-by-reference, arrays, the stack, and the heap. The model
also allows students to practice the essential skill of memory
manipulation throughout the entire course rather than just at the end.
As a result, this textbook goes further than is typical for a
one-semester course -- abstract data types and linked lists, for
example, are covered in depth. The computational model will also serve
students in their adventures with programming beyond the course: instead
of falling back on rules, they can think through the model to decide how
a new programming concept fits with what they already know.
The book is appropriate for undergraduate students of engineering and
computer science, and graduate students of other disciplines. It
contains many exercises integrated into the main text, and the author
has made the source code available online.