MIT's Missing Semester Class: Beyond the CS Curriculum
Tags: beginners, computerscience
Published: 2023-08-04 09:51:04

I was in my second semester of grad school when I learned about [MIT’s missing semester class](https://missing.csail.mit.edu/). 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)](https://missing.csail.mit.edu/), 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):

1. Watched the [lectures on YouTube](https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J); took notes and coded along where possible.
2. Read through the lecture notes on [missing.csail.mit.edu](https://missing.csail.mit.edu/).
3. 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?