CS 45

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
Office Hours:
Wednesdays 6:30–7:30 PM on Zoom
Thursdays 2–3 PM at Gates 4A Lounge
Ayelet Drazen
Office Hours:
Mondays 3:15-4:15 PM in Huang
Sundays 8-9 PM on Zoom
Jonathan Kula
Office Hours:
Mondays 6-7 PM on Zoom
Tuesdays 2-3 PM in Huang Basement


Week 1
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 Systems
Assignment 3 Due
Wed, Feb 8
Lecture 9: Compilers
Week 6
Mon, Feb 13
Lecture 10: Build Systems/DevOps
Assignment 4 Due
Wed, Feb 15
Lecture 11: Debugging and Profiling
Week 7
Mon, Feb 20
No Lecture: President's Day

Wed, Feb 22
Lecture 12: Image Manipulation and Recent Linux Tools
Assignment 5 Due
Week 8
Mon, Feb 27
Lecture 13: Security
Assignment 6 Due
Wed, Mar 1
Lecture 14: Cryptography
Week 9
Mon, Mar 6
Lecture 15: Virtual Machines and Containers
Assignment 7 Due
Wed, Mar 8
Lecture 16: Cloud and Serverless
Week 10
Mon, Mar 13
Lecture 17: Student-Chosen Topics
Assignment 8 Due
Wed, Mar 15
Lecture 18: Conclusion