CS 45: Software Tools Every Programmer Should Know

We're excited to announce that this class will continue as CS 104: Introduction to Essential Software Systems and Tools in the 2023-24 school year. CS 104 will be an upgraded version of CS 45 taught by Professor Achour in Winter Quarter. If what you see on this website looks interesting, you should check it out!

Course Description

Classes teach you all about advanced topics within CS, from operating systems to machine learning, but there’s one critical subject that’s rarely covered, and is instead left to students to figure out on their own: proficiency with their tools. This course will teach you how to master the key tools necessary for being a successful computer scientist, such as the command line, version control systems, debuggers and linters, and many more. In addition, we will cover other key topics that are left out of standard CS classes, but that are essential to being a proficient computer scientist, including: security and cryptography, containers and virtual machines, and cloud computing.

General Information

This course meets in-person twice a week, Mondays and Wednesdays from 4:30 to 5:50 at 300-300. The course is offered for 2 units on a S/NC basis. For more information about the course structure, visit the Course Info page.

Computer Setup & Software Installation

This course will have about a 50/50 mix of conceptual background and hands-on practice with the tools we’ll teach– this means you’ll need to be able to download and install software onto your computer (either your personal computer, or a computer you have access to). Click here for more information about setting up your computer and the kinds of software we’ll be using. (Let us know if this will present a challenge, e.g. if you’re using a chromebook or a very old computer, or don’t have access to a personal computer– we may be able to help 😄)

Course Staff

Staff Mailing List: cs45-spr2223-staff@lists.stanford.edu

Akshay Srivatsan
Akshay Srivatsan
Office Hours:
Thursdays, 10am-12pm at/around Gates 478 and on Zoom
Ayelet Drazen
Ayelet Drazen
Office Hours:
Mondays, 3-4pm in Huang Basement
Tuesdays, 8-9pm on Zoom
Jonathan Kula
Jonathan Kula
Office Hours:
Wednesday 11am to 12pm (just for week 9) on Zoom
Tuesdays, 5-6pm on Zoom

Unless you’re contacting us about OH or something else instructor-specific, please either use the staff mailing list or make a post on Ed.


Week 1
Mon, Apr 3
Lecture 1: Course Overview
Wed, Apr 5
Lecture 2: The Shell and Shell Tools
Week 2
Mon, Apr 10
Lecture 3: Data Manipulation
Wed, Apr 12
Lecture 4: Shell Scripting
Assignment 0 Due
Week 3
Mon, Apr 17
Lecture 5: Text Editors
Wed, Apr 19
Lecture 6: Command Line Environment
Assignment 1 Due
Week 4
Mon, Apr 24
Lecture 7: Compilers and Package Management
Wed, Apr 26
Lecture 8: Computer Networking
Assignment 2 Due
Week 5
Mon, May 1
Lecture 9: Version Control I
Wed, May 3
Lecture 10: Version Control II
Assignment 3 Due
Week 6
Mon, May 8
Lecture 11: Build Systems & DevOps
Wed, May 10
Lecture 12: Debugging and Profiling
Assignment 4 Due
Week 7
Mon, May 15
Lecture 13: Security
Wed, May 17
Lecture 14: Cryptography
Assignment 5 Due
Week 8
Mon, May 22
Lecture 15: Virtual Machines & Containers
Wed, May 24
Lecture 16: Cloud & Serverless
Assignment 6 Due
Week 9
Mon, May 29
No Lecture: Memorial Day
Wed, May 31
Lecture 17: Media Encoding
Assignment 7 Due
Week 10
Mon, Jun 5
Lecture 18: Q&A and Conclusion
Wed, Jun 7
No Lecture
Assignment 8 and Final Project Due


Big thanks to the MIT CSAIL’s The Missing Semester of Your CS Education taught by Anish Athalye, Jon Gjengset, and Jose Javier Gonzalez Ortiz– The Missing Semester was the original inspiration for CS 45.

Additionally, this website is based on versions of CS110 and CS111’s website created by John Ousterhout and Jerry Cain– thank you!