CS 104: Introduction to Essential Software Systems and Tools

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 three times a week, Monday / Wednesday / Friday from 3:00 to 4:20 at 260-113. The course is offered for 3 units on either a letter grade or a CR/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

Sara Achour
Sara Achour
Instructor
Office Hours:
On Demand in Gates 484
Jin-Hee Lee
Jin-Hee Lee
Course Assistant
Office Hours:
TueThu 10:30am-11:20am with Signup
Aman Kansal
Aman Kansal
Course Assistant
Office Hours:
Mon 10-11am, Wed 9-10am on Zoom
Cole Sohn
Cole Sohn
Course Assistant
Office Hours:
Tue 9am-11am on Zoom

Unless you’re contacting us about OH or something else instructor-specific, please make a post on Ed.

Calendar

Week 1
Topic
Materials
Assignments
Due
Mon, Jan 8
Lecture 0: In-Class System Setup
Wed, Jan 10
Lecture 1: Course Overview and Shell and Shell Tools
Fri, Jan 12
Lab 1: In-Class Lab on Shell Tools
Week 2
Mon, Jan 15
Holiday
Wed, Jan 17
Lecture 2: Data wrangling
Fri, Jan 19
Lab 2: Data wrangling
Week 3
Mon, Jan 22
Lecture 3: Shell Scripting
Wed, Jan 24
Lecture 4: Text Editors
Fri, Jan 26
Lab 3: Off the Beaten Path
Week 4
Mon, Jan 29
Lecture 5: Command Line Environment
Wed, Jan 31
Lecture 6: Command Line Environment II
Fri, Feb 2
Lab 4
Week 5
Mon, Feb 5
Lecture 7: Networking
Wed, Feb 7
Lecture 8: Version Control
Fri, Feb 9
Lab 5
Week 6
Mon, Feb 12
Lecture 8 (addendum): Version Management
Wed, Feb 14
Lecture 9: Build Systems & Dev Ops
Fri, Feb 16
Lab 6
Week 7
Mon, Feb 19
Holiday
Wed, Feb 21
Lecture 10: Debugging and Profiling
Fri, Feb 23
Lab 7
Week 8
Mon, Feb 26
Lecture 11: Security
Wed, Feb 28
Lecture 12: Cryptography
Fri, Mar 1
Lab 8
Week 9
Mon, Mar 4
Lecture 13: VMs and Containers
Wed, Mar 6
Lecture 14: Cloud & Serverless
Fri, Mar 8
Lab 9
Week 10
Mon, Mar 11
Lecture 15: Recent Tools
Wed, Mar 13
Lecture 16: Media Processing

Attributions

This class is an expanded offering of CS45, a fantastic Stanford course that was originally developed by Akshay Srivatsan, Ayalet Drazen, and Jonathan Kula. 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!