#30 overallEvergreen
15-213 Introduction to Computer Systems
Carnegie Mellon University
12 recommenders · 15 threads · recommended in 11 years, 2009–2024 · score 19.1
Carnegie Mellon's undergraduate introduction to computer systems, covering how programs run at the level of machine code, memory, linking, and the operating system, built around labs such as the bomb lab and malloc lab. It is based on the CSAPP textbook and its lectures and labs are publicly available.
Commenters call it one of the best-taught courses they've taken, praise its labs and online lecture presentation, and recommend it as a foundation in systems programming and x86 assembly.
Recommendations by year
20062026
Came here to recommend the same. You can find the 15-213 course videos online. I have done the course and can’t recommend it enough. Do the labs, sincerely. You’ll learn a lot!
I'm currently working through CMU's 15-213. I highly recommend lectures 5-9 for anyone who never learned how processors handle functions calls on the lowest level. Part of the effectiveness of the class is CMU's interface for displaying the classes which is the best online class experience I've ever encountered.
I did this lab as part of CMU's excellent intro to systems class (15-213, which also happens to be the zip code of CMU). Its one of the best courses offered in the CS department. As far as bomb lamb itself, I had a lot of fun doing this lab and getting to use gdb.
For anyone interested, here is the class and labs - https://www.cs.cmu.edu/~213/.
At Northwestern this course is called "Introduction to Computer Systems." To this day it is the best class I've taken at Northwestern. I guess I'm glad the professor decided to take the course with him when he left CMU.
Although I'm not a fan of lower-level programming (I'm a UI guy), I loved 15-213. One of my favorite (and best-taught) courses.
There's some good lectures from CMU if you search for 15-213 on YouTube. The lectures explain how x86-64 works and enough about operating systems you know how virtual memory and signals work. Then any OS resource listed here or try MITs it has YouTube lectures https://pdos.csail.mit.edu/6.828/2021/schedule.html
When you hear "debugger", think "breakpoints". It's any tool that lets you do things like set breakpoints and step through code execution.
Most debuggers will let you view machine code or bytecode respectively, but they won't decompile binaries or bytecode into the original higher level language.
Ghidra does include a basic debugger, but it can also do lots of other stuff (including decompilation).
It would probably help to get some baseline familiarity with systems programming. Check out the "15-213" CS course. The lectures are on YT, the reference book is probably online, and the labs are here :
https://www.cs.cmu.edu/~213/labs.html
That class looks amazing. Took a higher level computer systems course in undergrad that roughly followed http://csapp.cs.cmu.edu/ (great course).
For an academic take on "how-to Linux", I'd recommend CMU's CS 15-213 course [1]. The systems class I took in college borrowed liberally from it, IIRC.
Also, I'm putting together a master list [2] of the best resources from this thread and the other one OP mentioned. Let me know if I'm missing anything!
[1] https://www.cs.cmu.edu/~213/schedule.html
[2] https://trove.to/wes/trove/learn-linux
Click on 'old video' to see the lectures, this covers x86 arch from a programmer's perspective, such as writing cache friendly code http://www.cs.cmu.edu/~./213/schedule.html Database lectures here including a really good advanced playlist on building your own dbms https://www.youtube.com/channel/UCHnBsf2rH-K7pn09rb3qvkA/pla... From there the book Programming Rust is a great book about systems programming. There's also an OS class https://www.rust-class.org/pages/classes.html or you can try taking some CS theory classes https://www.youtube.com/channel/UCWnu2XymDtORV--qG2uG5eQ/pla...
Andrew S Tanenbaum has a Distributed Systems and OS book too that most universities still use.
The course itself is great too - CMU actually posts the video lectures on their website, and the labs are available as well:
http://www.cs.cmu.edu/afs/cs/academic/class/15213-s16/www/sc...
http://csapp.cs.cmu.edu/3e/labs.html
Carnagie Mellon has some open too http://www.cs.cmu.edu/~213/schedule.html (Lectures) https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.a...
That book you can get the global 3rd version from Abe Books for $20something since you aren't in Can/USA
There's other courses in there, like this awesome math/compsci course https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.a... (click on the RSS(Subscribe) logo in the upper right, can download them). They also have some fully open courses like this db course with lectures on youtube http://15721.courses.cs.cmu.edu/spring2016/
Our Computing Systems course had two projects that absolutely required using gdb:
http://courses.cs.vt.edu/~cs3214/fall2011/bomblab/bomblab-cs...
http://courses.cs.vt.edu/~cs3214/fall2011/buflab/buflab-cs32...
Our version of the course was adapted from the CMU course: http://csapp.cs.cmu.edu/ I thought it was an excellent course. It taught students both concepts and skills that I had picked up in a much more ad-hoc manner.
For low level software architecture, at the level of the firmware that drives processors (plus the electronics that are below that), as NonEUCitizen recommended MIT's 6.004 is a good bet (http://ocw.mit.edu/courses/electrical-engineering-and-comput...).
For the medium level, assembly language and on up a fair bit (at least to C), CMU's got what looks like a great course and book: http://www.cs.cmu.edu/~213/ There's enough meat on the web page for the course that it should give you an idea if you want to get the book.
For the higher levels, in addition to the MIT Computer System Engineering courses mentioned by Mithrandir (http://news.ycombinator.com/item?id=1850311), especially 6.033, check out this classic from the '70s: Lions' Commentary on UNIX 6th Edition, with Source Code (http://en.wikipedia.org/wiki/Lions%27_Commentary_on_UNIX_6th...).
Me and a lot of other people learned the basics from it, and while it's certainly dated, it has the advantage of being lucid and complete while not being too big or overwhelming, and of course nowadays if you want to go so far as running a Version 6 UNIX there are PDP-11 simulators that you can use for the purpose. I.e. it's a good foundation, like SICP is for languages and TAOCP is for algorithms (although there are less detailed and difficult books to get you started on algorithms that you might want to try first).
Good luck and enjoy!
"I personally would never be the first programmer in someone else's company, many other hackers are similar."
Including myself; the one time I inadvertently violated that it ended in tears (the idiot penny pinching salesman who was the founder tried to put off really hiring the first programmer until he got at least 1 other programmer ... and the first got a better offer; I think the only benefit I got out of that was by the end of it I could port code between subtly different versions of UNIX in my sleep (1H83)). In that case, it turned out to be impossible to hire the 2nd programmer and the start-up never started up.
As for your sequencing recommendation, I think it's better to learn foundational CS with something like SICP/6.001 and then reifying it with C (this CMU course looks damned good: http://www.cs.cmu.edu/~213/index.html). I think it's easier to make your mental tool box bigger if you can do it this way.
Here's a comment I left on a different thread a few months ago, which you may find useful if you're looking for CS contents:
---
There are a lot of book recommendations, but I would not focus on books if I wanted to get the equivalent of a solid CS education. Instead I would work through university lecture slides, assignments, and exams -- basically fast forward through a CS undergrad leveraging what you already know. I'm partial to CMU's CS syllabus for obvious reasons, but I find that it's also one of the most open and available resources on the web; i.e. not locked in on an intranet, etc.
With pre-existing background in software development the basic syllabus is more than doable in a 3-4 months. There are two sequences below: programming and theoretical fundamentals; you can do them in parallel.
Programming:
15-211: Introduction to Data Structures. Used to be in C++; now looks like it's in Java. https://www.cs.cmu.edu/~mjs/121/lectures.html
15-212: Principles of Programming. Still in ML. https://www.cs.cmu.edu/~me/212/schedule.html | https://www.cs.cmu.edu/~fp/courses/96-212/ (unlocked assignment pages)
15-213: Intro to Computer Systems. I hesitate to recommend this; 90% of the value in this course is in the labs and assignments, so it's difficult to do on one's own, but I would at least go through the slides and try to work through exams. https://www.cs.cmu.edu/~213/schedule.html
Theoretical:
15-251: Great Ideas in Theoretical Computer Science. Used to be Discrete Math with a heavy CS lean; it may have evolved. https://www.cs.cmu.edu/~15251/schedule.html
15-451: Algorithms. Here's a decade worth of lectures, exams and assignments - take your pick: https://www.cs.cmu.edu/~15451/ The 2013 course looks pretty complete: https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15451-f...
Next steps:
Since you are interested in VR, etc, you should probably look into the Computer Graphics courses. Note that the undergrad and grad courses are combined; the only difference is the expectations:
15-462: Computer Graphics http://15462.courses.cs.cmu.edu/fall2020/ Exam problems and solutions are gold: http://15462.courses.cs.cmu.edu/fall2020content/exams/finals...
15-463: Computational Photography http://graphics.cs.cmu.edu/courses/15-463/
15-464: Technical Animation http://graphics.cs.cmu.edu/nsp/course/15464-s21/www/syllabus... http://graphics.cs.cmu.edu/nsp/course/15464-s21/www/assignme...
Hope this helps. Good luck!
There are a lot of book recommendations, but I would not focus on books if I wanted to get the equivalent of a solid CS education. Instead I would work through university lecture slides, assignments, and exams -- basically fast forward through a CS undergrad leveraging what you already know.
I'm partial to CMU's CS syllabus for obvious reasons, but I find that it's also one of the most open and available resources on the web; i.e. not locked in on an intranet, etc.
With pre-existing background in software development the basic syllabus is more than doable in a 3-4 months. There are two sequences below: programming and theoretical fundamentals; you can do them in parallel.
Programming:
15-211: Introduction to Data Structures. Used to be in C++; now looks like it's in Java. https://www.cs.cmu.edu/~mjs/121/lectures.html
15-212: Principles of Programming. Still in ML. https://www.cs.cmu.edu/~me/212/schedule.html | https://www.cs.cmu.edu/~fp/courses/96-212/ (unlocked assignment pages)
15-213: Intro to Computer Systems. I hesitate to recommend this; 90% of the value in this course is in the labs and assignments, so it's difficult to do on one's own, but I would at least go through the slides and try to work through exams. https://www.cs.cmu.edu/~213/schedule.html
Theoretical:
15-251: Great Ideas in Theoretical Computer Science. Used to be Discrete Math with a heavy CS lean; it may have evolved. https://www.cs.cmu.edu/~15251/schedule.html
15-451: Algorithms. Here's a decade worth of lectures, exams and assignments - take your pick: https://www.cs.cmu.edu/~15451/ The 2013 course looks pretty complete: https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15451-f...
Next steps:
Since you are interested in VR, etc, you should probably look into the Computer Graphics courses. Note that the undergrad and grad courses are combined; the only difference is the expectations:
15-462: Computer Graphics http://15462.courses.cs.cmu.edu/fall2020/ Exam problems and solutions are gold: http://15462.courses.cs.cmu.edu/fall2020content/exams/finals...
15-463: Computational Photography http://graphics.cs.cmu.edu/courses/15-463/
15-464: Technical Animation http://graphics.cs.cmu.edu/nsp/course/15464-s21/www/syllabus... http://graphics.cs.cmu.edu/nsp/course/15464-s21/www/assignme...
Hope this helps. Good luck!