Computer Systems
Status: #in-progress
General Outline
- Nand2Tetris Part 1
- CS:APP (course)
Nand2Tetris Part 1 Retrospective
Part 1 involves the hardware side of computers. From building simple OR, and AND gates from NAND gates to building the CPU and an Assembler. This part was great for connecting the dots between logic gates and assembly. However, it was very surface level.
Since the authors state the course can be taken after an introductory programming course, the content itself is introductory to the hardware and low-level side of computers. For instance, the book doesn't cover how the NAND gate itself is implemented and is up to the reader to figure that out more-or-less. This summarizes a complaint myself, and many others, had with this course was that it was very surface level. Part 2 of the book deals with Jack, a Java-like programming language, which may does its job of teaching concepts, but Jack is not a programming language used in day-to-day applications.
After Part 1
[[Teach Yourself CS]] mentions Part 1 of this course in its curriculum whereas OSSU has both parts. [[Teach Yourself CS]] says to do Part 1 of this course and then go back to CS:APP to refine that knowledge.
Personally, I'd like to go in to the nitty-gritty, which might not be the best if I were to complete Part 2 of this course. I'd like to get more into C for the sake of [[Intro to Operating Systems]] and going through CS:APP seems like the best route to take. Additionally, I have somewhat lost interest in doing Part 2 of Nand2Tetris
Intro to Computer Systems Syllabus
Topic | Lectures | Readings | Recitation | Lab |
---|---|---|---|---|
Overview | Part 1 | 1 | ||
Bits, Bytes and Ints | Part 1 | Part 2 | 2.1-2.3 | Data Lab and Data Representations | Data Lab |
Floating Point | Part 1 | 2.4 | ||
Machine Prog | Basics Control Procedures Data Advanced | 3.1-3.5 3.6 3.7 3.8-3.9 3.10 | Bomb Lab | Bomb Lab |
Code Optimization | Part 1 | 5 | Attack Lab and Stacks | Attack Lab |
The Memory Hierarchy | Part 1 | 6.1-6.3 | C Review | |
Cache Memories | Part 1 | 6.4-6.7 | Cache Lab and Blocking | Cache Lab |
Linking | Part 1 | 7 | ||
ECF | Exceptions & Process Signals | 8.1-8.4 8.5-8.8 | ||
System I/O | Part 1 | 10 | Shell Lab | Shell Lab |
Virtual Memory | Concepts Systems | 9.1-9.6 9.7-9.8 | ||
Storage Allocation | Basic Advanced | 9.9 9.9-9.11 | Malloc Lab Debugging Malloc Lab | Malloc Lab |
Network Programming | Part 1 Part 2 | 11.1-11.4 11.5-11.6 | ||
Concurrent Programming | Part 1 | 12.1-12.3 | ||
Synchronization | Basic Advanced | 12.1-12.3 12.4;12.5.1-3 | Proxy Lab | Proxy Lab |
Thread-Level Parallelism | Part 1 | 12.6 | ||
The Future of Computing | Part 1 |