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 McCullough 115. 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.

The Monday, Wednesday sessions will consist of guided lectures with in class exercises and live demos, and the Friday session will consist of a lab section with more open-ended exercises. Please bring your computers to class if you are able so you can follow along.

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:
In class on Monday, Wednesday, and Friday at McCullough 115
Kelvin Waititu
Kelvin Waititu
Course Assistant
Office Hours:
Saturdays, 10:00 AM - 12:00 PM Join 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, Mar 30
Lecture 0: In-Class System Setup
Wed, Apr 1
Lecture 1: Course Overview and Shell and Shell Tools
Fri, Apr 3
Lab 1: In-Class Lab on Shell Tools
Week 2
Mon, Apr 6
Lecture 2: Data wrangling
Wed, Apr 8
Lecture 3: Shell Scripting
Fri, Apr 10
Lab 2: Data wrangling
Week 3
Mon, Apr 13
Lecture 4: Shell & Text Editors
Wed, Apr 15
Lecture 5: Text Editors & CLI I
Fri, Apr 17
Lab 3: Shell & Text Editors
Week 4
Mon, Apr 20
Lecture 6: Text Editors & CLI I
Wed, Apr 22
Lecture 7: CLI Environment I/II
Fri, Apr 24
Lab 4
Week 5
Mon, Apr 27
Lecture 8: Networking
Wed, Apr 29
Lecture 9: Version Control
Fri, May 1
Lab 5
Week 6
Mon, May 4
Lecture 10: Version Management
Wed, May 6
Lecture 11: Build Systems & Dev Ops
Fri, May 8
Lab 6
Week 7
Mon, May 11
Lecture 12: Build Systems
Wed, May 13
Lecture 13: Debugging
Fri, May 15
Lab 7
Week 8
Mon, May 18
Lecture 14: Security & Cryptography
Wed, May 20
Lecture 15: VMs & Containers
Fri, May 22
Lab 8
Week 9
Mon, May 25
Holiday
Wed, May 27
Lecture 16: Cloud & Serverless
Fri, May 29
Lab 9
Week 10
Mon, Jun 1
Lecture 17: Media & AI
Wed, Jun 3
Lecture 18: AI Tools
Fri, Jun 5
Lab 10

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!