Skip to content

Details

Let's Teach Ourselves Computer Science - Computer Systems! After finishing "Composing Programs", it's now time to dive into how computers really work!

We will follow Randall E. Bryant and David R. O'Hallaron's legendary book "Computer Systems: A Programmer's Perspective" (aka CS:APP). We will be using the "Third Global Edition" which can be found here:
https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf

For this session, please read Ch. 3.3-3.7 Data Formats, Accessing, Information, Arithmetic and Logical Operations, Control), pp. 213 - 274, ideally before the meeting (but no worries if you don't manage to read everything). In the meeting, we can then discuss anything we did not understand or found particularly interesting!

If you like video lectures, there are some for this book by the authors (which do not cover everything but might be a very good complementary resource to reading the book).
2017 version (29 lectures, but bad audio)
https://www.youtube.com/watch?v=cEFXuhPm65k&list=PLtv4PQFH2yMas_SCMTEaE4eUIWWWiwISj&index=1
2020 version (26 lectures, good audio, Chinese subtitles :D)
https://www.youtube.com/watch?v=ScMxnXq6fbI&list=PLcQU3vbfgCc9sVAiHf5761UUApjZ3ZD3x&index=1

***

In the professional world, this book is often described as the difference between a coder (someone who writes syntax) and a software engineer (someone who understands the system).
It is extremely useful if you want to learn about/work in, e.g. embedded systems, cybersecurity or backend development. And I think it will be just good "general knowledge" for anyone who is (planning on) working professionally with computers.

The book uses the C programming language (from what I understand, one needs to know just the basics, and the book teaches the really hard stuff -- pointer arithmetic and memory allocation, for example -- from scratch) and teaches the x86-64 assembly language, which is the most used assembly language for PCs, especially with Intel or AMD processors. So get ready to learn some hardcore low level programming together -- it's gonna be great ๐Ÿ˜ƒ

Here are the contents:

  1. A Tour of Computer Systems
  2. Representing and Manipulating Information
  3. Machine-Level Representation of Programs
  4. Processor Architecture
  5. Optimizing Program Performance
  6. The Memory Hierarchy
  7. Linking
  8. Exceptional Control Flow
  9. Virtual Memory
  10. System-Level I/O
  11. Network Programming
  12. Concurrent Programming

Related topics

Book Club
Learning
Computer Programming
Software Development
Computer Science

You may also like