Lecture 1: Course Overview
Monday, April 3
Lecture 2: The Shell and Shell Tools
Wednesday, April 5
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.
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
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
We will learn how to write our own "scripts"—mini-programs that combine shell commands.
Lecture 5: Text Editors
Monday, April 17
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
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
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
We will learn how computers talk to one another across the internet.
Lecture 9: Version Control I
Monday, May 1
We will learn how to keep track of, switch between, and merge different versions of our code using the popular version control system
Lecture 10: Version Control II
Wednesday, May 3
We will learn how to collaborate with others using
git and GitHub.
Lecture 11: Build Systems & DevOps
Monday, May 8
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
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
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
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
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
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
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.
Wednesday, June 7