The Missing Semester of Your CS Education – Revised for 2026

missing.csail.mit.edu

215 points by anishathalye a day ago


We returned to MIT last month to teach a revised version of Missing Semester, six years after the original debut (which has been extensively discussed on HN, in https://news.ycombinator.com/item?id=22226380 and https://news.ycombinator.com/item?id=34934216).

We’ve updated the course based on our personal experiences as well as major changes in the field (e.g., the proliferation of AI-powered developer tools) over the past several years. The 2026 course includes revised versions of four lectures from the previous course, and it adds five entirely new lectures:

- Development Environment and Tools

- Packaging and Shipping Code

- Agentic Coding

- Beyond the Code (soft skills)

- Code Quality

We’d love to hear any feedback from the HN community to improve the current or future iterations of the course. In particular, we’re curious to hear the community’s take on our inclusion of AI-related topics (e.g., dedicating an entire class to the topic of agentic coding; though we tried to counterbalance it with plenty of disclaimers, and a dedicated section on AI etiquette in Beyond the Code).

--Anish, Jon, and Jose

Hendrikto - 5 hours ago

Great to see a chapter on version control. It is such a shame that almost no CS program teaches proper version control. VCSs and the commit history can be such a tremendously valuable tool when used correctly.

git bisect/blame/revert/rebase/… become so much less useful when VC is treated as a chore and afterthought, and basically amounts to: “Feature is done, my work is complete, just do `git commit -am "changes"` and be done with it.”. And don’t get me started on commit messages.

It is shameful that for a large part of the industry, this is the norm. It is shameful that for a lot of professional, who call themselves software architects or reliability engineers and such fancy titles, still have essentially no idea what they are doing with git, and their response when git add/commit/push/pull don’t work is to shrug, and just delete and re-clone the repo.

Version control should be treated with care and attention to detail. It pays for itself 100 times over.

If your commit history is maintained and tells a story, it is a joy to review your PR. If you just `git commit -am "try fix"` 26 times over, and all that is left in the end is a ball of mud, it is horrible.

0xbadcafebee - 15 minutes ago

If you want to master the shell (it will save years of your life), follow these guides. I highly recommend reading the entire BASH manual, it will answer every question you'll ever have, or at least give you a hint about it, as well as expose you to all the hidden knowledge (some call it "gotchas") you'll wish you knew later.

  101
  - Bash for Beginners (https://tldp.org/LDP/Bash-Beginners-Guide/html/)
  - Bash Tutorial (https://www.w3schools.com/bash/)

  201
  - Bash Programming (https://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html)
  - Advanced Bash Scripting Guide (https://tldp.org/LDP/abs/html/)

  301
  - The Bash Manual (https://www.gnu.org/software/bash/manual/bash.html) (https://man7.org/linux/man-pages/man1/bash.1.html)
  - ShellCheck (https://www.shellcheck.net/)
To find every Unix-y program and get a 1-line description of it (and referenced programs/functions), run:

  for i in $(ls /bin/* /usr/bin/* /sbin/* /usr/sbin/* | sed -E 's?.*/??g' | sort -u) ; do
    echo "command: $i"
    whatis "$(basename "$i")" | cat
    echo ""
  done | tee command-descriptions.log
View 'command-descriptions.log' with less command-descriptions.log, use arrow-keys and page up/down to navigate, and type 'q' to exit. To find out more about a program like df(1), run man 1 df.
stevetron - 5 minutes ago

How about including a course in touch-typing that emphasizes the computer keyboard rather than the typewrite keyboard?

NoNameHaveI - 3 hours ago

I'm glad to see there is a "Beyond the Code" section that discusses comments. Here's what I typically told my students in Intro to Programming" Good comments lend insight into the code. Reading the code itself tells you the what. Comments should explain the why. Comments like "i+=1; /* Increment i */" are of little value. However comments such as "We increment i mid loop so that we can peek ahead at the next value for a possible swap" are more useful. Use a narrative voice when writing comments, like you are explaining the code to your grandparent. This make digestion easier. Remember, code spends most of its life, and most of its expense, in the maintenance phase. The easier you make your code to understand, the less it will cost and the longer it will live.

Arun2009 - an hour ago

Just wondering - do you include information on interviewing, salary negotiation, communication with management, leading teams, and maybe topics on career progression?

These would have been very useful to me back when I was in the university.

pards - 4 hours ago

One of my large enterprise clients currently requires all tech staff to complete 18h (yes, eighteen hours!) of "agile training", in addition to speed-running 14 separate mandatory online courses.

This time would be much better spent watching these 9h of lectures.

projektfu - 3 hours ago

I'd include sed and awk, because these tools are ubiquitous and can accomplish in a few readable lines what people write long programs to handle in other languages, seemingly because they are unaware of sed and awk, don't know how to use them, or are required for some reason to do it in the project language.

In fact, generally teaching people to select the right tool for the job is a good skill to prevent them from using golden hammers.

andersmurphy - 4 hours ago

Is this going to be like when Sun paid universities to use/teach Java? Just with Anthropic and LLMs?

ludicrousdispla - 2 hours ago

Personal hygiene is worth a mention.

ThrowawayR2 - an hour ago

I'd suggest adding software testing and QA, particularly with the rise in AI and agentic coding requiring better testing skills, but that would deserve an entire separate course all of its own.

ILoveHorses - 5 hours ago

Not an entire semester, but I'm really glad my uni had a semester long core CS course on exactly this. Still one of the most useful courses I've ever taken, I refer my notes from that class even now.

a-dub - an hour ago

maybe would be interesting to include a lecture on how to interact with the open source community and successfully contribute to an open source project while respecting maintainer time and energy (and other unwritten rules of (n)etiquette).

edit: already in the "beyond the code" section... cool!

qsort - 5 hours ago

> In particular, we’re curious to hear the community’s take on our inclusion of AI-related topics

I think this is fine and if anything you should give it more space. It doesn't replace foundational understanding, but the course is explicitly about "practical" aspects, we can assume said foundational understanding is developed in other courses.

Something like "build your own agent" would be a great intuition pump. The model is doing the heavy lifting and a basic harness is a couple hundred lines of simple code. It could fit in a single lecture and it would be very high signal in my opinion.

DGAP - 21 minutes ago

This is great but irrelevant in the age of ai.

lordnacho - 4 hours ago

In some way this could be the most important course.

You don't appreciate it when you're studying, because obviously it sounds a bit soft. But when you're learning how something works, often the thing that stops you isn't the fundamentals, which you know what are, it's the little frustrations like not knowing how to commit or pull code, or not knowing how to navigate the terminal.

shimman - an hour ago

Honestly shocked ethics aren't discussed more as the "missing semester," too many devs are completely fine working for truly evil companies.

kkfx - 3 hours ago

I have a bit of unsolicited feedback (in this terms): the basic IT skills, not CS or CE, but IT, that everyone needs but most don't realize, including techies who often stay in their bubble and don't truly understand the classic desktop model despite having the skills to do so, are a bit different IMVHO:

- first of all, you need to know how to manage your own digital information. Even though it's taken for granted that a CS/CE freshman knows this, well, in my experience, that's usually not the case also for many PhD... Information management isn't just a taxonomy of files and dirs; it's also about evaluating, for example, what happens if the software you use for your notes is discontinued, or if your photo gallery disappears, and so on, and acting accordingly knowing your SPOFs and how to mitigate them;

- then you need to know how to write, in the broadest sense, which includes mathematical notation, generating graphs, "freehand" drawing like simple CAD, and formatting your work for various purposes and media, whether it's emails, theses, reports, or general messages. This is where teaching LaTeX, org-mode, R/Quarto, etc comes in. It's not "advanced" is the very basic. Before learning to program and no, Office suites are not an answer, they are monsters from a past era, made to makes untrained human with little culture to use a computer for basic stuff instead of typewriters, a student is not that;

- you need to know how to crunch numbers. Basic statistics are useful, but they're largely stuck in another era. You need to know how to do math on a computer, symbolic computation, whether it's Maxima or SymPy, doesn't really matter, and statistical processing basis. For instance, knowing Polars/Plotly/* at a minimum level are basic skills a freshman should have at a software/operational level, because they should be working in these environments from day one, given that these are the epistemological tools of the present, not paper anymore.

Then you also need to manage code, but in the broadest sense. A dSCM is also for managing your own notes and documents, not just software, and you need to know how to share these with others, whether it's Radicle or Forgejo or patches vua mail doesn't really matter, but this family of software needs to be introduced and used at least at a basic level. A DynDNS services should be also given so anyone could try to self-host the services they want.

Knowing how to communicate is an essential skill, and it's not about using Gmail or Zoom... it's about learning how to self-host basic communication services. It doesn't really matter if it's XMPP, Matrix, or Nostr, but the concept must be clear, and understanding the distributed and decentralized options we have today is vital. A student needs to learn how to stand on their own two feet, not on someone else's servers.

These are basic IT skills that aren't "advanced" at all, despite what many people think, or "sysadmin-level" and so on; they're simply what a freshman should have as someone who loves knowledge and wants to get their hands dirty.

badc0ffee - 13 hours ago

At first, the purple links had me convinced that I'd already clicked on them.

tovej - 2 hours ago

I would focus more on being able to follow the development of new and existing foundational technologies, rather than focusing on, say agentic coding. That one really sticks out as a trendy topic that doesn't really deserve to be included.

- a day ago
[deleted]
nautilus12 - 2 hours ago

Lol, does any of this matter anymore with AI coding? It was hard to get people to care about this sort of thing before ai coding, now its impossible. People in a few years will be coding without even knowing what unix is.

mono442 - 4 hours ago

Is there even a point learning CS now with the rapid progress of agentic coding? It seems like a complete waste of money and time.