Computer Systems: A Programmer's Perspective (3rd Edition)

Category: Computer Science
Author: Randal E. Bryant, David R. O'Hallaron
This Year Hacker News 2
This Month Reddit 2


by conditi0n   2019-11-17

found this for anyone researching the same topic:


chapter 5

In general, it looks like knowing common compiler optimizations and cpu instructions and architecture well helps with this.

by cjarrett   2019-11-17

I took a course from the authors of this book during my time at university. I highly recommend it and often go back and re-read chapters: (crazy amazon link: Dense, technical, but absolutely fantastic for understanding computers.

For instance, the labs denoted here ( are directly related to the very difficult labs I had to do as a student at CMU nearly a decade ago, and likely are variations on projects that students have done there for quite a long time.

Note: Do not buy the 'international edition'. If you can get a used copy from a local university, it's well worth the money.

by Himmelswind   2019-07-21

Some resources I found useful:

  • This Github repository is a really good overview. Although it doesn't exactly give a deep understanding of any particular topic, it's a really good way of understanding the system design "landscape". After reading this, I had a much better idea of what I needed to study more.
  • Designing Data-Intensive Applications is an awesome and thorough book that covers just about everything you need to know for a system design interview.
  • Maybe a bit obvious, but CTCI's system design chapter is useful (although not enough on its own).
  • It's in some ways a bit orthogonal to system design, but Computer Systems: A Programmer's Perspective gave me a much better idea of how the hell this machine I touch all day works. I think learning the things covered in here helped me speak with more confidence on system design.
by Himmelswind   2019-07-21

There's little backend stuff in CTCI besides the parallelism/concurrency chapter, unfortunately. You may have heard of them, but I'm a big fan of Computer Systems: A Programmer's Perspective and Designing Data-Intensive Applications.

by deepaksurti   2019-05-07
One of the best ways would be to build a computer yourself. For that I haven’t found anything better than ECS [1]. Please try to build your own extensions to ECS and don’t forget to burn your computer to FPGA.

Follow that up with Computer Systems A programmers perspective.[2]

My review of ECS [3]




by throwaway_7718   2019-05-02
CS:APP is hands down THE book that every person interested in the low-level stuff in computer systems should own. But heads up, anyone who is considering to buy the book - please get the North American Edition, NOT the global edition.

I made the mistake of getting the Global edition, because of its considerably less cost, and because I couldn't afford the North American one - it was only after that I checked out the book site, where the authors mention that the global edition is chock full of errors [0].

I don't blame the authors, nor even the people who were responsible for 'the generation of a different set of practice and homework problems'. I can get printing the book in B&W, reducing paper quality, and publishing as a paperback to cut costs, but it's baffling why the publishers compromise on the actual quality of the content itself.

Amazon is full of similar 'PSAs' about not buying the global edition [1].


by mathieubordere   2019-01-14
A great resource to dive a bit deeper into the stack is and the accompanying labs found at

Just make sure you don't buy the `international edition` of the book, it's unreadable due to the amount of errors in the exercises.

by anonymous   2018-02-05
@AndrewHenle seeing how this was written 7 minutes ago, you were probably typing that comment when I was reading the same statement from [this]( book :D.
by techjuice   2017-08-19
The following that I have on my bookshelf have helped:

Compilers Second Edition [0]

Engineering a Compiler, Second Edition [1]

Computer Systems: A Programmer's Perspective (3rd Edition) [2]

[0] [1] [2]