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

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/