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
Instructor
akshay01@stanford.edu
Office Hours:
Wednesdays 6:30–7:30 PM on
Zoom
Thursdays 2–3 PM at Gates 4A Lounge
Ayelet Drazen
Instructor
adrazen@stanford.edu
Office Hours:
Mondays 3:15-4:15 PM in Huang
Jonathan Kula
Instructor
jdkula@stanford.edu
Office Hours:
Tuesdays 2-3 PM in Huang Basement
Calendar
Lecture 1: Course Overview
Lecture 2: The Shell and Shell Tools
No Lecture: Martin Luther King Day
Lecture 3: Data Manipulation
Assignment 0 Due
Lecture 4: Shell Scripting
Assignment 1 Due
Lecture 6: Command Line Environment
Assignment 2 Due
Lecture 7: Computer Networking
Lecture 8: Version Control Systems
Assignment 3 Due
Lecture 10: Build Systems/DevOps
Assignment 4 Due
Lecture 11: Debugging and Profiling
No Lecture: President's Day
Lecture 12: Image Manipulation and Recent Linux Tools
Assignment 5 Due
Lecture 13: Security
Assignment 6 Due
Lecture 15: Virtual Machines and Containers
Assignment 7 Due
Lecture 16: Cloud and Serverless
Lecture 17: Student-Chosen Topics
Assignment 8 Due