DEV Community

Cover image for MIT's Missing Semester Class: Beyond the CS Curriculum
Bala Priya C
Bala Priya C

Posted on

MIT's Missing Semester Class: Beyond the CS Curriculum

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):

  1. Watched the lectures on YouTube; took notes and coded along where possible.
  2. Read through the lecture notes on
  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?

Top comments (2)

sarajohn130 profile image
sara john

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?

balapriya profile image
Bala Priya C

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).

How did you stay disciplined enough to complete it?
The topics were interesting enough. More importantly, they were things I should know but did not. I think the main motivation was to become familiar and comfortable with shell scripting and text editors before starting my internship that summer.