The course: The Hardware/Software Interface (by Gaetano Borriello, Luis Ceze - University of Washington) is very good to understand the low-level fundamentals of computer programming. It's very valuable resource to understand what your are doing when your write C code, too.
As I was writing down quite a lot notes, I decided to divide them by course sections. These are the posts:
Section 0: Introduction (below)
Section 0: Introduction
- Understanding of some of the abstractions that exist between programs and the hardware they run on, why they exist, and how they build upon each other.
- Knowledge of some of the implementation details of these underlying abstractions.
- Become more effective programmers:
- More efficient at finding and eliminating bugs.
- Understand some of the many factors that influence program performance.
- Facility with a couple more of the many languages that we use to describe programs and data.
The Big Theme
- How does the hardware (0s and 1s, processor executing instructions) relate to the software (C or Java programs)?
- Computing is about abstractions (but we can’t forget reality).
- What are the abstractions that we use?
- What do YOU need to know about them?
- Become a better programmer and begin to understand the important concepts that have evolved in building ever more complex computer systems.