Course Materials from Previous Offerings

Archives of course materials from previous offerings of this class are available at<sem><year>. For example:

Quick Review of C: Ladder

Some of our past TA's have created a helpful resource to help brush up on C. This is a work in progress, but let us know how we can improve it.

Special thanks to Jason Chin!

Online Textbooks

The textbooks below are available as supplementary material that can help you become familiar with some of the languages and tools used in this course. While using an on-campus network or VPN, you can access them for free using the Safari Books links.

Textbook Image Textbook Description Textbook Technicals
Git 3nd edition

Version Control with Git
3rd Edition

Authors: Jon Loelinger and Matthew McCullough

Complete reference on Git. Covers almost anything you want to know about using Git.

O'Reilly Media, Inc.
3nd Edition (October 2022)

ISBN-13: 978-1-4920-9119-6

Free On-Campus: HERE
[SIGN IN with your email address]:

Head First C

Head First C
1st Edition

Authors: David Griffiths and Dawn Griffiths

Head First C provides a complete learning experience for C and structured imperative programming.

O'Reilly Media, Inc.
1st Edition (April 2012)

ISBN-13: 978-1-4493-9991-7

Free On-Campus: HERE
[SIGN IN with your email address]

21st Century C

21st Century C
2nd Edition

Author: Ben Klemens

With this revised edition of 21st Century C, you’ll discover up-to-date techniques missing from other C tutorials, whether you’re new to the language or just getting reacquainted.

O'Reilly Media, Inc.
2nd Edition (September 2014)

ISBN-13: 978-1-4919-0389-6

Free On-Campus: HERE
[SIGN IN with your email address]

Programming Rust

Programming Rust
2nd Edition

Authors: Jim Blandy, Jason Orendorff, Lenora F. S. Tindall

With this practical guide, experienced systems programmers will learn how to successfully bridge the gap between performance and safety using Rust.

O'Reilly Media, Inc.
2nd Edition (June 2021)

ISBN-13: 978-1-4920-5259-3

Free On-Campus: HERE
[SIGN IN with your email address]

Linux Kernel Development

Linux Kernel Development
3rd Edition

Author: Robert Love

The book details the major subsystems and features of the Linux kernel, including its design, implementation, and interfaces. It covers the Linux kernel with both a practical and theoretical eye, which should appeal to readers with a variety of interests and needs.

O'Reilly Media, Inc.
3rd Edition (June 2010)

ISBN-13: 978-0-6723-2946-3

Free On-Campus: HERE
[SIGN IN with your email address]


Exams and Solutions (Current and Previous Terms)

Term Instructor Midterm 1 Midterm 2 Midterm 3 Final
sp23 Kubiatowicz pdf sol pdf sol
fa22 Crooks pdf sol pdf sol
su22 Kumar/Zeng pdf sol pdf sol
sp22 Joseph/Kubiatowicz pdf sol pdf sol pdf sol  
fa21 Stoica pdf sol pdf sol pdf sol  
su21 Kulkarni/Gokhale pdf sol     pdf sol
sp21 Joseph/Crooks pdf sol pdf sol pdf sol  
fa20 Kubiatowicz pdf sol pdf sol pdf sol  
su20 Kumar pdf sol pdf sol pdf sol pdf sol
sp20 Kubiatowicz pdf sol      
fa19 Culler pdf sol     pdf sol alt-pdf alt-sol
su19 Kolb pdf sol      
sp19 Kubiatowicz pdf sol pdf sol pdf sol  
fa18 Stoica pdf sol pdf sol pdf sol  
sp18 Joseph/Ragan-Kelley pdf sol pdf sol pdf sol  
fa17 Stoica pdf sol pdf sol pdf sol  
sp17 Stoica pdf sol pdf sol pdf sol  
fa16 Joseph pdf sol pdf sol pdf sol  
sp16 Joseph pdf sol pdf sol    
fa15 Kubiatowicz pdf sol pdf sol    
sp15 Kubiatowicz pdf sol pdf sol    
fa14 Culler pdf sol pdf sol    
fa13 Joseph pdf sol pdf sol    
sp13 Joseph pdf sol      
fa12 Stoica pdf sol      
sp12 Joseph/Stoica pdf sol      
fa11 Joseph/Stoica pdf sol    
sp11 Stoica pdf sol      
fa10 Kubiatowicz pdf sol      
sp10 Stoica pdf sol      
fa09 Kubiatowicz pdf sol      
fa08 Kubiatowicz pdf sol pdf sol    
sp08 Joseph pdf sol pdf sol    
fa07 Kubiatowicz pdf sol pdf sol    
sp07 Smith pdf      
fa06 Kubiatowicz pdf sol pdf sol    
sp06 Joseph pdf sol pdf sol    
fa05 Kubiatowicz pdf sol pdf sol    
fa04 Smith pdf sol pdf    
sp04 Joseph pdf sol      
fa03 Smith pdf pdf    
sp03 Joseph pdf sol pdf sol    
fa02 Smith sol sol    
sp02 Joseph pdf sol      
fa01 Smith pdf pdf    
sp01 Joseph pdf sol      
fa00 Smith pdf sol pdf sol    
sp00 Franklin pdf pdf    
fa99 Joseph pdf sol pdf sol    
sp99 Joseph pdf sol      

See Older exams on HKN


Pair Programming Guide

Working well with your group is very important for success in CS 162. One way to facilitate group work is by pair programming. Pair programming is a way to program collaboratively with a partner. It's a great approach that is used by many companies in the tech industry.

In pair programming, partners are working together at the same time. One partner is the "driver," who actually types the code. The other partner is the "navigator," who observes, asks questions, suggests solutions, and thinks about slightly longer-term strategies. We will continue to discuss pair programming in the canonical sense (with two people), but note that the idea can easily extend to a larger group of people, with one driver and multiple navigators.

It's very important for partners to switch roles throughout an assignment, either every 10-20 minutes or alternating on each subtask/problem.

Pairing in Person

This is the traditional approach to pair programming. Partners sit together at the same computer, ideally one with a large or double monitor. The driver controls the keyboard and mouse, while the navigator looks at the code and assignment description.

Pairing Remotely

Fortunately, it is also very possible to do pair programming online, thanks to the wide range of collaborative cloud applications. You'll need two things:

For both of these options, you can set up a Zoom call, Google Meet, or Discord call. For sharing code, you can alternatively follow these instructions for an editor of your choice:

You'll generally want to both be using the same editor, so you'll either want to find a partner using the same editor or be willing to try a new editor. That can be a part of the learning experience, too!

Working with a Partner

We sometimes see feedback like:
My partner didn't do any work, or didn't do their share of the work, or didn't communicate or meet with me, etc. What can I do?
My partner did too much! They hogged the keyboard, or they did the whole assignment without waiting for me, or they didn't communicate with me, etc. I feel that I didn't get a real chance to help in solving the assignment. What can I do?

Have you tried speaking to your partner about your expectations beforehand? Many group issues can be resolved by better communication and setting expectations. If talking to your partner does not resolve the situation, speak to course staff and explain the details of what has happened. We will try to help you resolve the issue.

Additional Resources