I was in my second semester of grad school when I learned about MIT’s missing semester class. Over the next few weeks, I worked through the class and found it super helpful. Here's why.
In a conventional CS curriculum, you’ll diligently work through, perhaps, two semester-long classes, perfecting your data structures and algorithms foundations (yeah, also count the weekends of leetcoding). You'll also take classes in compiler design, operating systems, and much more. These are core computer science skills.
But what you don't learn at the university, though, is how to exit Vim (yeah, I know!) or how to git rebase
with confidence (add as many as you’d like).
Rightly called The Missing Semester (of Your CS Education), this class from MIT will teach you how to use some of the tools that are fundamental to the software engineering ecosystem. From shell scripting to the fundamentals of information security—spanning around 12 lectures—you can add a bunch of practical skills to your toolbox.
And if you’re into CS, chances are you’ve already heard of or taken this class. If you’ve taken it before, I’m sure you enjoyed the process. But if you haven’t already, happy learning!
So What Does This Course Teach?
Here’s what I did when I took the class (very studently of me):
- Watched the lectures on YouTube; took notes and coded along where possible.
- Read through the lecture notes on missing.csail.mit.edu.
- Completed the exercises for each module.
I’ll briefly go over the topics covered in the lectures/modules.
#1 – Shell and Shell Scripting
From automating boring simple tasks to building ETL pipelines in production, shell scripting is the swiss-army knife of a programmer’s toolbox.
The first lecture is an introduction to shell (and the class). And the second lecture covers shell scripting fundamentals. Be sure to do the exercises.
#2 – Working with Vim
Yes, I had to spend a couple of dedicated days learning my way around Vim. The lecture on Vim covers basics like navigating and editing files. It also covers customizing Vim and advanced features like macros.
#3 – Data Wrangling
To me, this was, perhaps, the most challenging module. Learning about regular expressions and tools like sed
and awk
—all in a single lecture—was quite overwhelming.
#4 – Command-Line Environment
This lecture introduces the learners to command-line capabilities including process management, all things ssh
for working with remote machines, dotfiles, and more.
#5 – Version Control with Git
Even if you are a student, you should learn to use Git. It can be helpful in working on your projects as well as in your internships.
The lecture emphasizes how we can do better than just knowing our way around a few Git commands, and covers Git’s data model. And goes on to cover the usage of basic to advanced commands.
#6 – Debugging and Profiling
Debugging and profiling is one of my favorite modules from the class. From native (or should rather say naïve) print
statements to using the shell program logger
and Python debugger, this covers reasonable depth. You’ll also learn tracing system calls with strace
.
In the profiling part, you will learn profiling for CPU usage, memory, and visualizing profiles to make sense of them better. In addition, you’ll get to know using perf
for event profiling and tools for resource monitoring.
#7 – Build Systems, Dependency Management, and More
Originally titled as metaprogramming, this lecture provides a comprehensive overview of build systems, dependency management, continuous integration systems, and testing.
#8 – Security and Cryptography
This lecture is an introduction to hash functions and cryptography basics. One of the easiest lectures where you don't feel overwhelmed at all.
#9 – Potpourri
True to its name, this lecture is a collection of interesting hacks. I particularly liked the overview of daemon processes and keyboard remapping.
Wrapping Up
So if you are a student or a new grad, the tools you learn in this class should be helpful in your software engineering career. Even if you are looking to pivot to software engineering from another domain, you can work through this class after you’ve gained some programming experience.
So have you watched the first lecture yet?
Top comments (2)
Did you have no classes when working through it?
How many hours a day did you spend on it?
How did you stay disciplined enough to complete it?
Hi Sara,
Yes, I was a full-time student. I tried to spend at least an hour every evening (sometimes, I studied a little longer—so as to reach a logical stopping point—without having to regress much the next day).