CS 45: Software Tools Every Programmer Should Know

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

Akshay Srivatsan
Akshay Srivatsan
Office Hours:
Wednesdays 6:30–7:30 on Zoom
Thursdays 2–3 PM at Gates 4A Lounge
Ayelet Drazen
Ayelet Drazen
Office Hours:
Mondays 3:15–4:15 PM in Huang
Sundays 8–9 PM on Zoom
Jonathan Kula
Jonathan Kula
Office Hours:
Mondays 6–7 PM on Zoom
Wednesdays 11:30 AM–12:30 PM in Huang


Week 1
Mon, Jan 9
Lecture 1: Course Overview
Wed, Jan 11
Lecture 2: The Shell and Shell Tools
Week 2
Mon, Jan 16
No Lecture: Martin Luther King Day
Wed, Jan 18
Lecture 3: Data Manipulation
Assignment 0 Due
Week 3
Mon, Jan 23
Lecture 4: Shell Scripting
Assignment 1 Due
Wed, Jan 25
Lecture 5: Text Editors
Week 4
Mon, Jan 30
Lecture 6: Command Line Environment
Assignment 2 Due
Wed, Feb 1
Lecture 7: Computer Networking
Week 5
Mon, Feb 6
Lecture 8: Version Control
Assignment 3 Due
Wed, Feb 8
Lecture 9: Version Control II
Week 6
Mon, Feb 13
Lecture 10: Build Systems & DevOps
Wed, Feb 15
Lecture 11: Debugging and Profiling
Assignment 4 Due
Week 7
Mon, Feb 20
No Lecture: President's Day
Wed, Feb 22
Lecture 12: Recent Unix Tools
Assignment 5 Due
Week 8
Mon, Feb 27
Lecture 13: Security
Wed, Mar 1
Lecture 14: Cryptography
Assignment 6 Due
Week 9
Mon, Mar 6
Lecture 15: Virtual Machines & Containers
Wed, Mar 8
Lecture 16: Cloud & Serverless
Assignment 7 Due
Week 10
Mon, Mar 13
Lecture 17: Student-Chosen Topics
Wed, Mar 15
Lecture 18: Conclusion
Assignment 8 Due