Course Overview
Course Description
This course explores computing beyond software. Students will go a level deeper to better understand the hardware, and see how computers are built and programmed. It aims to help students become better programmers by teaching the concepts underlying all computer systems. The course integrates many of the topics covered in other computer science courses, including algorithms, computer architecture, operating systems, and software engineering.
In this course, students will explore the entire system including hardware, operating systems, compilers, and networks. We will emphasize practical learning through the development and evaluation of real programs on actual machines. Key topics covered include data representations, machine-level representations of C programs, processor architecture, and program optimizations. Additionally, the course delves into the memory hierarchy, exceptional control flow (like exceptions, interrupts, and Unix signals), virtual memory, system-level I/O, basic network programming, and concurrent programming. These concepts are reinforced through engaging, hands-on assignments, providing a comprehensive understanding of computer systems. By the end of the course, students will develop a strong understanding of the relationships between the architecture of computers and software that runs on them.
Learning Outcomes
By the end of the course, you will be able to:
- Understand how hardware and software systems are built, and work together
- Explain how key abstraction layers in computers are implemented, and how higher level representations are translated into machine language
- Write assembler and machine code
- Design and build a general purpose computer system, including hardware and software, from the ground up
Instructor
- David Walter
- david@kibo.school
Please contact on Discord first with questions about the course.
Live Class Time
Note: all times are shown in GMT.
- Wednesdays at 5:30 PM - 7:00 PM GMT
Office Hours
- Instructor: Fridays at 7:00 PM - 8:00 PM GMT
Core Reading List
Nisan, N., Schocken S. (2021). The Elements of Computing Systems, second edition: Building a Modern Computer from First Principles. MIT Press
Carpinelli, John D. (2023). An Animated Introduction to Digital Logic Design. NJIT Library
Supplementary Reading List
- Amoroso, E. Amoroso, M. From Gates to Apps, Silicon Press 2013
- https://jvns.ca/blog/learn-how-things-work/
- http://www.bottomupcs.com/
- https://jvns.ca/blog/2016/09/11/rustconf-keynote/
- https://leaningtech.com/webvm-server-less-x86-virtual-machines-in-the-browser/
- https://pages.cs.wisc.edu/~remzi/OSTEP/