Detailed information about this course is available farther down this page, but we find that precept and office hour info is what students really seek on the Info page. Thus, here is the standard weekly schedule of events: lecture Q&A sessions, precepts, office hours, and LabTA availability. The session names act as links to the Zoom meeting (protected by CAS login) or the resource website. All times listed are "Princeton time" (United States Eastern time). Changes in any given week will be announced on Ed. For users of small devices on which the calendar grid does not display well, here is an image version.
The best way to get a spot in the precept of your choice is to regularly check the registrar's Course Offerings page and/or the listings on TigerHub. In our experience, more than a quarter of the total class enrollment changes precepts during shopping period. Dramatic unresolved scheduling concerns can be addressed to Colleen Kenny (ckenny@cs.princeton.edu), the COS Undergraduate Coordinator. The course's teaching staff cannot manage precept assignments.
Lead Instructor: Szymon Rusinkiewicz (smr@cs.princeton.edu) - sign up for office hours here
Lead Preceptor: Christopher Moretti (cmoretti@cs.princeton.edu)
Faculty Preceptor: Donna Gabai (dgabai@cs.princeton.edu)
Faculty Preceptor: Scott Karlin (scott@cs.princeton.edu)
Graduate Preceptor: Weicong Dong (weicongd@princeton.edu)
Graduate Preceptor: Juan Duque (jduque@princeton.edu)
Graduate Preceptor: Anne Kohlbrenner (akohlbrenner@princeton.edu)
Graduate Preceptor: Huihan Li (huihanl@princeton.edu)
Undergraduate Graders: Eesha Agarwal, Elizabeth Berzin, AnneMarie Caballero, Anika Duffus, Katie Dykstra, Sophie Goldman, Annika Hsi, Vedrana Ivezic, Khandaker Momataz, Ayo Oguntola, Miguel Opeña, Indu Panigrahi, Rishwanth Raghu, Maithili Singne, Anton Stengel, Elliott Strahan, Lauren Tang, Nasko Tenev, Kevin Wang
Developing programming skills for systems building, including modular program design, programming style, testing, debugging, and performance tuning. Additionally, an introduction to ARM assembly language and machine language.
COS 126 is the prerequisite. More specifically, you should have substantial programming experience using some high-level programming language such as Java or C++. Prior experience with the C programming language is helpful but not essential. If you have not taken COS 126 but wish to start in this course, a placement exam is available. Contact the COS placement officer with any questions.
The course uses these textbooks and manuals:
C Programming: A Modern Approach (Second Edition), K. N. King, Norton & Co. 2008. The book covers the C programming language and advanced C programming.
ARM 64-bit Assembly Language, Larry Pyeatt with William Ughetta, Newnes 2019. Available with Princeton login here. The book covers the ARMv8 assembly language.
Those books are also accessible in limited electronic reserve on the Reserves menu on Canvas.
The Practice of Programming, Brian W. Kernighan and Rob Pike, Addison-Wesley 1999. Available with Princeton login here. The book covers program and programming style. Many of the software engineering topics in the course are derived, in part, from this book.
Linux Pocket Guide, Daniel J. Barrett, O'Reilly 2016 (or 2012 or 2004). Available with Princeton login here. The book covers the most fundamental aspects of the Linux operating system and the Bash shell from the user's point of view.
The course uses these manuals, for reference only: