
- Teacher: Jason Zietz
- Teaching Assistant: Manan Khasgiwale
- Teacher: Aaksha Jaywant
- Teacher: Paul Kooros
- Teacher: Bryan Melville-Admin
- Teacher: Adam Zheng
- Teacher: Asa Ashraf
- Teacher: Supriya Manikonda Keshavaiah Naidu
- Teacher: Bryan Melville-Admin
- Course Assistant: Madhusudhan Aithal Mahabhaleshwara
- Course Assistant: Filip Casey
- Course Assistant: Sourav Chakraborty
- Course Assistant: Ashlyn Duy
- Course Assistant: Alex Fix
- Course Assistant: Andrew Gerlach
- Course Assistant: Daniel Harris
- Course Assistant: Michael Hoefer
- Course Assistant: Isha Karki
- Course Assistant: Berkley Larson
- Course Assistant: Christen Malloy
- Course Assistant: Luis Mieses Gomez
- Course Assistant: Kyra Moran
- Course Assistant: Calista Nguyen
- Course Assistant: Allison Palmer
- Course Assistant: Luke Pan
- Course Assistant: Tiffany Phan
- Course Assistant: Arjun Ramesh Rao
- Course Assistant: Anirudh Rathore
- Course Assistant: James Ryan
- Course Assistant: Lizzie Scotty
- Course Assistant: Amatullah Sethjiwala
- Course Assistant: Siddartha Shankar
- Course Assistant: Collin Sinclair
- Course Assistant: Ryan Slocum
- Course Assistant: Elizabeth Spaulding
- Course Assistant: Siddhant Sushilkumar Keshkar
- Course Assistant: Lita Suwattee
- Course Assistant: Connor Thompson
In this course, students will:
- Document code including precondition/postcondition contracts for functions and invariants for classes.
- Create and recognize appropriate test data for simple problems, including testing boundary conditions and creating/running test cases.
- Design and test new classes using the principle of information hiding for the following data structures: array-based collections (including dynamic arrays), list-based collections (singly-linked lists, doubly-linked lists, circular-linked lists), stacks, queues, binary search trees, hash tables, graphs, and at least one balanced search tree.
- Identify the features and applications of common data structures, including records/structs, lists, stacks, queues, trees, graphs, and maps.
- Implement algorithms for standard operations on common data structures and discuss the complexity of the operations.
- Comment on the features of different traversal methods for trees and graphs, including pre-, post-, and in-order traversal of trees.
- Describe the implementation of hash tables, including algorithms for collision avoidance and resolution.
- Describe the principles of recursion and iteration, and implement recursive and iterative solutions for a problem.
- Formulate and implement solutions to problems using fundamental graph algorithms, including depth-first and breadth-first search and a shortest-path algorithm.
- Explain the features of at least one tree balancing algorithm and how tree balancing affects the efficiency of various binary search tree operations.
- Correctly use and manipulate pointer variables to change variables and build dynamic data structures.
- Explain the differences between dynamic and static data structure implementations, and justify the use of static and dynamic implementations in different applications.
- Practice explaining design choices and algorithm features in small-group settings.

- Teacher: Raj Chandak
- Teacher: Mark Hanna
- Teacher: Bryan Melville-Admin
- Teacher: Ashutosh Trivedi
- Teacher: Maciej Zagrodzki
- Teacher: Adam Zheng
- Course Assistant: Shrey Arora
- Course Assistant: Meeti Baliga
- Course Assistant: Krishna Sai Chemudupati
- Course Assistant: David Dayan
- Course Assistant: Guohui Ding
- Course Assistant: Christopher Godley
- Course Assistant: Justus Griego
- Course Assistant: Himanshu Gupta
- Course Assistant: Huilin Han
- Course Assistant: Drew Hockstein
- Course Assistant: Sanskar Katiyar
- Course Assistant: Tyler Kimbell
- Course Assistant: Lars Knutson
- Course Assistant: Jingwei Li
- Course Assistant: Owen Martin
- Course Assistant: Ethan Meyer
- Course Assistant: Dheeraj Mulbagal Ravindranath
- Course Assistant: Aditi Prakash
- Course Assistant: Wyatt Rees
- Course Assistant: Andy Rittenhouse
- Course Assistant: Saiyma Sarmin
- Course Assistant: Lucy Van Kleunen
- Course Assistant: Yichen Wang
- Course Assistant: Siyu Yao
Covers how programs are represented and executed by modern computers, including low level machine representations of programs and data, an understanding of how computer components and the memory hierarchy influence performance.

- Teacher: Dirk Grunwald
- Teacher: Hoang Truong
- Teacher: Maciej Zagrodzki
- Teaching Assistant: Siqi Chen
- Teaching Assistant: Dylan Fox
- Teaching Assistant: Tae Ho Kim
- Teaching Assistant: Pramod Venkatesh Kulkarni
- Teaching Assistant: Insoo Lee
- Teaching Assistant: Zhiyuan Liu
- Teaching Assistant: Hamza Motiwalla
- Teacher: Rachel Cox
- Teacher: Bryan Melville-Admin
- Teacher: Jinyoung Park
- Course Assistant: Naomi Brown
- Course Assistant: Veena Prasad
- Course Assistant: Ella Sarder
- Course Assistant: Sagarika Shreevastava
- Course Assistant: Travis Torline
- Course Assistant: Kevin Xu
- Course Assistant: Vanessa Zhang
Operating systems are an essential part of every
computing system and play a major role in determining the performance and
usability of the system. This course is an introductory course covering
the fundamental concepts in the design, implementation and evaluation of an
operating system. While the field of operating systems has been undergoing
rapid change, the fundamental concepts remain firmly clear. This course covers these fundamental concepts
comprised of device management, process management, memory management and
network management.

- Teacher: CJ Herman
- Teacher: Bryan Melville-Admin
- Teacher: Jinyoung Park
- Course Assistant: Zaid Alali
- Course Assistant: Shazal Irshad
- Course Assistant: Anh Nguyen
- Course Assistant: Justin Reiss
- Course Assistant: Biljith Thadichi
- Course Assistant: Gavin Zimmerman
This course introduces students to UNIX and Linux System Administration. It includes topics such as: building & deploying systems from scratch, troubleshooting difficult system and network problems, software configuration, account management, basic
shell scripting, network configuration and the mitigation of common security vulnerabilities.

- Teacher: CJ Herman
- Teacher: Bryan Melville-Admin
- Teacher: Jinyoung Park
- Teacher: Jason Zietz
- Course Assistant: Shiva Darian
- Course Assistant: Anthony Pinter
- Course Assistant: Dianna Radpour
- Course Assistant: Katy Weathington