Lectures
Lecture 1: Course Overview
Monday, April 3
- [Slides]
[Lecture Video]
[Assignment 0]
We covered basic class logistics (also available on the course info page), and did Assignment 0 to get everyone set up.
Lecture 2: The Shell and Shell Tools
Wednesday, April 5
- [Slides]
[Notes]
[Lecture Video]
We defined what "the shell" is, went over the history/background of the UNIX operating system and the shell as we know it today, and covered how to use basic shell commands.
Useful Resources:
man
pages (the system manual)- cheat.sh
- devhints.io/bash
I used a non-standard command bat
in my lecture demo; the software installation page contains installation instructions if you want to try it out.
Lecture 3: Data Manipulation
Monday, April 10
- [Slides]
[Notes]
[Lecture Video]
We will learn how to efficiently process large datasets (or any other text-based data) from the shell using tools like regular expressions.
There's a great regular expression debugger at regex101.
Lecture 4: Shell Scripting
Wednesday, April 12
- [Slides]
[Notes]
[Lecture Video]
[Assignment 1]
We will learn how to write our own "scripts"—mini-programs that combine shell commands.
Lecture 5: Text Editors
Monday, April 17
- [Slides]
[Notes]
[Lecture Video]
We will compare and contrast different programs commonly used to edit code; namely, the terminal editor vim and the graphical IDE (integrated development environment) Visual Studio Code.
Lecture 6: Command Line Environment
Wednesday, April 19
- [Slides]
[Notes]
[Lecture Video]
[Assignment 2]
We will delve in more detail into the environment command-line programs run within, including:
- how we configure programs
- how programs find data (the filesystem)
- how we can run multiple programs at the same time
We will also cover a terminal multiplexer called tmux
; be sure to install it using the instructions on the software page
Lecture 7: Compilers and Package Management
Monday, April 24
- [Slides]
[Notes]
[Lecture Video]
We will see two related concepts:
- how source code (in C and Python) is turned into a program
- how we can install programs shared by other people
Lecture 8: Computer Networking
Wednesday, April 26
- [Slides]
[Lecture Video]
[Assignment 3]
We will learn how computers talk to one another across the internet.
Lecture 9: Version Control I
Monday, May 1
- [Slides]
[Notes]
[Lecture Video]
We will learn how to keep track of, switch between, and merge different versions of our code using the popular version control system git
.
Lecture 10: Version Control II
Wednesday, May 3
- [Slides]
[Notes]
[Lecture Video]
[Assignment 4]
We will learn how to collaborate with others using git
and GitHub.
Lecture 11: Build Systems & DevOps
Monday, May 8
- [Slides]
[Lecture Video]
We will learn how to set up a system that can automatically compile, test, and deploy our code.
Lecture 12: Debugging and Profiling
Wednesday, May 10
- [Slides]
[Lecture Video]
[Assignment 5]
We will cover common debugging strategies and various static analysis tools that can be used to make programming easier.
Lecture 13: Security
Monday, May 15
- [Slides]
[Lecture Video]
We will introduce the concept of computer security, including different types of attacks you might see in the real world (and strategies to protect yourself from them).
Lecture 14: Cryptography
Wednesday, May 17
- [Slides]
[Lecture Video]
[Assignment 6]
We will see real-world tools used to verify people's identity and keep data secure even in untrustworthy settings (like the internet).
Lecture 15: Virtual Machines & Containers
Monday, May 22
- [Slides]
[Lecture Video]
[Final Project]
We will set up and run virtual computers on your real computers, both for security and for ease of software development and deployment.
Lecture 16: Cloud & Serverless
Wednesday, May 24
- [Slides]
[Lecture Video]
[Assignment 7]
We will set up a connection to a computer running on a "cloud" service, such as Amazon AWS, Google GCP, or Microsoft Azure, and run our own code on it. We will also set up a simpler service using a "serverless" platform, which is a convenient way of deploying code without much work.
Lecture 17: Media Encoding
Wednesday, May 31
- [Slides]
[Notes]
[Lecture Video]
[Assignment 8]
We will look at how different types of media (text, images, audio, and video) are represented by computers, including the tradeoffs of different formats.
Lecture 18: Q&A and Conclusion
Monday, June 5
Whatever topics you find interesting! Let us know what you want us to cover.
No Lecture
Wednesday, June 7