Resources
Course Materials from Previous Offerings
Archives of course materials from previous offerings of this class are available from here.
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 |
---|---|---|
Version Control with Git Complete reference on Git. Covers almost anything you want to know about using Git. |
O'Reilly Media, Inc. Free On-Campus: HERE |
|
Head First C Head First C provides a complete learning experience for C and structured imperative programming. |
O'Reilly Media, Inc. Free On-Campus: HERE |
|
21st Century C 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. Free On-Campus: HERE |
|
Programming Rust 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. Free On-Campus: HERE |
|
Linux Kernel Development 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. Free On-Campus: HERE |
Exams and Solutions (Current and Previous Terms)
Term | Instructor | Midterm 1 | Midterm 2 | Midterm 3 | Final |
---|---|---|---|---|---|
sp24 | Kubiatowicz | pdf sol | pdf sol | pdf sol | |
fa23 | Crooks | pdf sol | pdf sol | pdf sol | |
sp23 | Kubiatowicz | pdf sol | 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 | ||||
fa06 | Kubiatowicz | pdf sol | pdf sol | ||
sp06 | Joseph | pdf sol | pdf sol | ||
fa05 | Kubiatowicz | pdf sol | pdf sol | ||
fa04 | Smith | pdf sol | |||
sp04 | Joseph | pdf sol | |||
fa03 | Smith | ||||
sp03 | Joseph | pdf sol | pdf sol | ||
fa02 | Smith | sol | sol | ||
sp02 | Joseph | pdf sol | |||
fa01 | Smith | ||||
sp01 | Joseph | pdf sol | |||
fa00 | Smith | pdf sol | pdf sol | ||
sp00 | Franklin | ||||
fa99 | Joseph | pdf sol | pdf sol | ||
sp99 | Joseph | pdf sol |
Readings
- John R. Garman, "The Bug Heard 'round the World,"
ACM SIGSOFT Software Engineering Notes, Vol 6 No 5, Oct 1981 - Nancy Leveson, "Medical Devices: The Therac-25,"
Safeware: System Safety and Computers, Adison-Wesley, 1995 - Queuing Theory References
- Queuing section from Appendix D of "Computer Architecture: A quantitative approach" second edition by Hennessy and Patterson
- A bunch of resources on Queuing Theory
- Queuing section from Appendix D of "Computer Architecture: A quantitative approach" second edition by Hennessy and Patterson
- File Systems:
- The UNIX Time-Sharing System. D.M. Ritchie and Kk. Thompson. ACM Symposium on Operating Systems Principles, October 1973
- A Fast File System for UNIX. M. McKusick, W. Joy, S. Leffler, and R. Fabry. ACM Transactions on Computer Systems, Vol 2, No 3, August 1984, Pages 181-197
- Analysis and Evolution of Journaling File Systems. Vijayan Prabhakaran, Andrea C. Arpaci-Dusseau, and Remzi H. Arpaci-Dusseau. USENIX Technical Conference, 2005
- The Design and Implementation of a Log-Structured File System, Mendel Rosenblum and John K. Ousterhout. Proceedings of the 13th ACM Symposium on Operating Systems Principles (SOSP), October 1991
- F2FS: A New File System for Flash Storage. Changman Lee, Dongho Sim, Joo-Young Hwang, and Sangyeun Cho. Proceedings of the 13th USENIX Conference on File and Storage Technologies (FAST 2015)
- RAID/Erasure Coding
- A Case for Redundant Arrays of Inexpensive Disks (RAID), David patterson, Garth Gibson, and Randy Katz, ACM SIGMOD conference, 1988
- EVENODD: an optimal scheme for tolerating double disk failures in RAID architectures, M. Blaum, J. Brady, J. Bruck and J. Menon. Proceedings of the 21st International Symposium on Computer Architecture (ISCA), 1996
- Distributed Systems: RPC
- Distributed Systems: NFS
- End-to-End Design
- Van Jacobson's TCP Paper
- The Byzantine Generals Problem. Leslie Lamport, Robert Shostak, and Marshall Pease. ACM Transactions on Programming Languages and Systems, Vol 4, No. 3, July 1982, Pages 382-401
- Smart Sensors to Network the World
- Experience with processes and monitors in Mesa.
- Dynamo: Amazon's Highly Available Key-value Store
- Chord: A scalable peer-to-peer lookup service for internet applications
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:
- A way to hear each other.
- A way to share code and the command line.
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:
- VSCode: You can code in VSCode while SSH'd into your VM using the instructions in Homework 0. Once in VSCode, you can pair program using the Live Share extension, which you can download here. Once you and your partner both have the extension installed, you'll need to start a new Live Share session and then explicitly share your code and terminal with each other. See the instructions on the download page for more details on sharing and joining sessions.
- Atom: You can use Atom on your local computer while SSD'd into the VM using the SMB server detailed in Homework 0. Atom provides the TeleType package for code collaboration. You can install it by opening up the Settings view, clicking on the Install tab, searching for teletype, and clicking "Install". You can also click this direct link to find the teletype package. Once installed, there will be a portal icon in the Atom status bar that looks like a wireless tower. One partner clicks that icon to create a portal and shares the link with the other partner. The partners can then begin collaborating together.
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?
Or:
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
- EECS Student Climate & Incident Reporting Form
- National Suicide Prevention Hotline: 1-800-273-TALK (8255)