You're in
Iker Hurtado's pro blog
Developer | Entrepreneur | Investor
Software engineer (entrepreneur and investor at times). These days doing performant frontend and graphics on the web platform at Barcelona Supercomputing Center

Computer programming: the beginning (compilation post)

30 Nov 2015   |   iker hurtado  
Share on Twitter Share on Google+ Share on Facebook
This entry gathers my notes of the very good Coursera course: The Hardware/Software Interface. This post is not intended to be exhaustive review of the course, rather, they are personal notes for later inquiries.

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 1: Memory, Data, and Addressing

Section 2: Integer and Floating Point Numbers

Section3: Basics of Architecture, Machine Code

Section 4: x86 Assembly

Section 5: Procedures and Stacks

Section 6: Arrays and Structs

Section 7: Memory and Caches

Section 8: Processes

Section 9: Virtual Memory

Section 10: Memory Allocation

Section 11: Java vs. C

Section 0: Introduction

Course outcomes

  • 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.