I’m frequently asked how MIT’s undergraduate academics, particularly in computer science, compare to those at other universities. I haven’t studied in other universities, so I don’t know. But I can now point folks to this page so they can make their own comparisons. This is both a record of my own path through MIT EECS and a reference for people trying to understand what the curriculum feels like from the inside.
If you’re mostly interested in the structure of MIT’s requirements, focus on the early sections. If you care about what individual classes are like, the semester-by-semester notes will be more useful.
Table of Contents
Graduation Requirements
I graduated in 2024. Some requirements might have changed over time.
MIT has general requirements everyone needs to satisfy:
- 6 core science classes: two calculus classes, two physics classes, chemistry, biology.
- 8 classes in the humanities, arts, and social sciences (HASS). You need to take from all three areas. At least one must be communication-focused, and 3–4 of them need to be within a single field, called your concentration.
- 4 communication-focused classes, where 2 need to be within the major.
- One lab class, and two science-technology classes.
- 4 physical education classes.
- Swimming test or the swimming class.
Excluding physical education, this makes up about 17 classes. Beyond these, you need 180 total units. Units are similar to credits and most classes are 12 units.
And of course, you’ll need to satisfy your major’s requirements. The 180 units will mostly go to your major’s requirements, but some majors might have fewer or more units needed. In either case, 180 units is around 15 classes.
Altogether, you’d need around 32 total classes to graduate, which nicely comes down to 4 regular classes a semester in a 4-year program.
Computer Science Requirements
MIT’s computer-related-stuff department has become pretty complicated recently. There are now 8 undergraduate programs within the Electrical Engineering and Computer Science (EECS) department. You can see them here along with their requirements: https://eecsis.mit.edu/degree_requirements.html.
The standard computer science major would be “6-3 Computer Science and
Engineering.” It seems to have gone a few revisions now, and I studied the old
one, 6-3_2017. It required 14 classes at minimum. The requirements website
above does a nice job explaining keywords and class numbers when you hover over
them.
My Experience
Please note that EECS renumbered its classes, so I will use both numbers for affected semesters.
I took a more or less traditional approach while taking classes. Below, I noted what classes I took each semester and brief personal thoughts about them.
Almost all classes are either on OCW or have their webpage publicly available on the web. Also keep in mind that “curved grading” is prohibited at MIT by its curriculum — classes instead use grade definitions.
This is just one path through MIT, not a specifically recommended or an optimal one.
Semester 1 (Fall 2020)
Before and during my first semester, I placed out of a couple of classes by exam rather than taking them in the usual way.
-
18.01 Single Variable Calculus (placed out)
- I took an exam to skip single variable calculus after speedrunning the content on OCW. The exam is pass-fail only, and I remember doing not too well on it, but I passed.
-
6.0001 Introduction to Computer Science and Programming in Python (placed out)
- I took an exam to skip this class too. The exam asked simple questions about recursion, time complexity, etc. It also had a couple of simple programming questions.
- Now that I know the actual class content, I’d say the exam was much easier compared to the actual class.
-
18.02 Multivariable Calculus
- Since I passed 18.01 exam, I was able to take this class. It felt much easier than single variable calculus.
-
21G.222 Expository Writing for Bilingual Students
- MIT figured that I should take a writing class in my first year. This class was pretty nice because it also improved my English quite a bit.
-
3.091 Introduction to Solid-State Chemistry
- My hardest class during the semester. It teaches a good amount of chemistry while also introducing material science. I wish I had a better background from school.
-
8.01 Classical Mechanics
- A very nice physics class. It was the first time everything actually fully made sense when thinking about movements of all kinds of objects.
-
8.A01 Professional Development Seminar
- A 1-unit class that met once a week to chat about careers or with interesting guests.
- In the first semester, MIT offers a few seminars to help freshmen meet each other and also learn something useful.
I didn’t take any CS classes in my first semester. I know a few people who jumped on a few grad classes. I don’t regret my decision, especially because it was a study-from-home semester.
IAP 2021
Independent Activities Period at MIT is basically the January semester where you can find a variety of classes or activities. They are usually organized and taught by other students. It’s fully optional to do anything during this period.
I took 6.148 web.lab, a class that teaches basic web development. It has a team competition as well, and I worked with a couple others to build a multiplayer card game.
Semester 2 (Spring 2021)
My first semester on-campus, but all classes were on Zoom.
-
14.01 Principles of Microeconomics
- This was a social science class and had a lot of math involved. But I enjoyed the class.
- I remember the teaching of this class to not match its problemset or exam content. It was likely a difficulty coming from online teaching.
-
6.009 Fundamentals of Programming
- This class is where you learn how to code programs that do non-trivial, or rather complex, things. It’s based on labs with practical topics (audio processing, image processing, graph searches, game development, and even a LISP interpreter), and it also teaches you to write decent Python.
- It is definitely a very hard class with a very steep slope, especially for someone who hasn’t done tons of coding before.
- I liked the class so much I decided to teach it many times.
- I would say this is one of the most unique classes at MIT, in the sense that other universities don’t have a class of this level. That makes it naturally hard to teach.
-
6.042 Mathematics for Computer Science
- A classic discrete math class. Probably similar to what any other college would teach, but it has its own nice textbook to follow along. It’s available on OCW.
-
7.016 Introductory Biology (Biomedical track)
- MIT offers a few intro biology classes, and this one is focused a bit more on molecular/cellular biology and related diseases, including cancer biology.
- Similar to chemistry, this was my hardest class during the semester, but I enjoyed it a lot.
-
8.02 Electricity and Magnetism
- The second physics class. I enjoyed it similarly to the first one.
Semester 3 (Fall 2021)
While frequent COVID testing was required, we finally had in-person classes. I had also finished the basic science requirements — some people put them off until their final semester.
-
18.061 Linear Algebra and Optimization
- A pilot variant of the classic linear algebra class. It teaches the basics but also coding in Julia and applying it to some practical problems.
-
21M.030 Introduction to World Music
- Extremely fun and hands-on class to experience world music from a wide geographic range.
- I was able to share local music in this class.
-
6.004 Computation Structures
- This class teaches you how computers work. After making a very brief intro to assembly language, you code digital hardware and your own CPU by the end of the semester.
- Definitely a very hard class to teach, and likely also a unique class to MIT. Something close to it is probably nand2tetris.
- I heard the previous version of the class, taught by Chris Terman, was even more fun. It’s available on OCW and I plan to check it out sometime.
-
6.036 Introduction to Machine Learning
- A rather brief intro to machine learning techniques and matrices.
- I think the class had huge opportunities to be more fun and useful, yet it was mostly filling in some lines in a Jupyter notebook and doing repeated operations. This opinion was shared among many other classmates.
- It’s likely that the class has gotten much better since I took it.
-
6.046 Design and Analysis of Algorithms
- The second class in MIT’s algorithms trio (6.006 is the intro, and 6.854 is the grad version). It is a mathematically rigorous treatment of algorithm design and analysis, emphasizing asymptotic analysis, randomized and amortized algorithms, advanced data structures, and topics such as network flows, NP-completeness, and approximation algorithms.
- Likely one of the hardest undergraduate classes in EECS.
IAP 2022
I took 6.S095 Probability Problem Solving online, which is self-descriptive. It did feel like olympiad math a bit.
Semester 4 (Spring 2022)
This was probably my busiest semester because all my classes were interesting enough for me to spend more time than expected on them. I was also working two campus jobs and was involved in club development.
-
18.600 Probability and Random Variables
- Classic probability class. I never made it to the lectures unfortunately, but the class notes were pretty useful.
-
24.118 Paradox and Infinity
- A philosophy class that studies puzzles, especially around paradoxes and infinities. It goes a bit technical but keeps it very interesting.
- If you enjoy the famous Numberphile or Veritasium videos on YouTube, this class would be very fun.
-
6.031 Software Construction
- The first class that teaches you
gitat MIT, but more importantly, the act of writing robust programs itself. - I initially disliked the class and thought focusing on tests or program contracts was pretty useless. But once I started being more open-minded about it, I loved it.
- Also one of the more unique classes at MIT.
- The first class that teaches you
-
6.08 Intro to EECS via Interconnected Embedded Systems
- The “Arduino class” at MIT. It’s similar to 6.009 in the teaching style, and it’s definitely very fun.
- I got to keep my ESP32 dev board at the end, as well as OV2640 cameras from my final project, which I still use.
-
6.S063 Design for the Web
- A really good HCI class, taught by Lea Verou and David Karger at the time. Covers frontend development, web design, design patterns, colors, etc.
- Lea is an undeniable expert in the area and this class likely wouldn’t exist without her initial support.
- This class is also why I got interested in how humans use or should use computers.
Semester 5 (Fall 2022)
-
24.211 Theory of Knowledge
- Epistemology class at MIT. Tries to answer: what does it mean to know something?
- Without prior philosophy experience (see: me), the class can be pretty tough. But I learned a lot and enjoyed it.
-
6.1040 (prev. 6.170) Software Design
- This class used to be called “Software Lab” and was more focused on teaching full-stack web development with good design practices. However, recently it has focused on teaching concept design and applying it in practice.
- When I took the class, I really liked the concept design idea, but we didn’t end up actually putting it in code. I thought we could do a better job at that and approached Daniel with an idea. It worked out decently well and I did a year of great research with him.
-
6.5400 (prev. 6.840) Theory of Computation
- A truly amazing computation class, taught by Sipser himself. His book is so popular that most other universities use it as well to teach this class.
- One tends to think about building modern computers with Turing machines all the time during this class.
- Sipser allowed us to use our laptops during the exam. He probably wrote all of the existing content out there, so, surely, he knows to put original problems.
-
6.8370 (prev. 6.865) Advanced Computational Photography
- You code a lot of Photoshop features in C++. It’s a really fun class.
- While it’s called “advanced,” and it’s a grad class, it was pretty easy for most people. And the professor is a fun guy.
- There is an undergraduate version too, but in the grad version you get to do more fun homework and complete a final project.
Semester 6 (Spring 2023)
-
24.131 Ethics of Technology
- Readings about general ethics and how technology changes it: privacy, security, power. A lot of good content.
-
6.1100 (prev. 6.035) Computer Language Engineering
- Also known as the “compiler class.” You build an optimized compiler for a C-like language from scratch.
- It’s a team project after writing the parser. The team with the best optimizers wins.
- I decided to use this class to learn Rust as well, and while the team turned out to be chaotic, we ended up getting through it. The night before the final deadline, we were in last place. But we ended up finishing second due to overnight efforts. Many all-nighters in this class.
-
6.1800 (prev. 6.033) Computer Systems Engineering
- An intro to designing and analyzing complex computer systems, from low level to high level. It’s a communication-focused class and also reads a lot of fundamental papers. Most of the time is spent on the design project where you design a large, scalable, robust system for a given large prompt.
- I enjoyed the fact that the class content covers a lot of topics, and we read a lot of useful papers. However, I think the focus being on the final project makes the class miss out on a lot of teaching opportunities. You never code anything in the project; you just design while making many assumptions. It’s more about writing it well than actually designing the system.
Semester 7 (Fall 2023)
This is now my final year. I have only a few requirements left. Some of my classmates already finished their requirements to graduate, and some started their dual-degree master’s to finish both degrees by the end of 4th year. I got into the master’s program but decided not to start it.
I decided to take it easy in terms of classwork while focusing on research and teaching. It was a good decision.
-
21M.294 Popular Musics of the World
- Another world music class, but it’s less hands-on and more analysis-based. Covers a different variety of music, and, as the name suggests, popular music in different countries.
- The instructor is very passionate and the class was fun.
-
21M.600 Introduction to Acting
- The best class I took at MIT. But what happened in the acting room stays in the acting room, so I can’t share more.
-
6.1060 Software Performance Engineering
- The popular 18-unit — but in reality closer to 30-unit — performance class at MIT. You learn through two iterations on four projects, and each focuses on different things. The solutions are published anonymized after each iteration. You work with a randomly assigned partner in each project.
- While the class was very fun and had a friendly competition, I thought it could be a bit more real-world in its teaching at times.
- I don’t like to boast, but my teams did win more than one project in this class.
-
6.1810 Operating System Engineering
- The introductory OS class at MIT. You build on top of the popular xv6 system.
- My term didn’t have any exams, and labs were released early, so I was able to finish them ahead of time. That gave me more time for optimizing in the other class.
-
6.UAR Undergraduate Research
- The research I did was part of the MIT SuperUROP program, so I got paid more than usual and also received credit for completing a two-semester class.
- While the research and class are related, you focus on presenting and writing good papers in the class.
Semester 8 (Spring 2024)
My final semester. I thought I had no requirement other than completing the second term of 6.UAR left. But it turned out I hadn’t done the swim test either. Usually, the freshmen line up to do their swimming in the first semester, but COVID prevented that for me.
I did the swim test on the last possible day after a few increasingly insistent emails, and, luckily, I passed.
To stay a full-time student, I still had to fill the 36 minimum units, so I took a few fun classes.
-
6.UAR Undergraduate Research
- The second semester of the SuperUROP class. The first semester focused on presenting, and this one focused on writing.
-
18.781 Theory of Numbers
- A classic intro to number theory class.
- I already knew decent number theory from math olympiad days, but I had forgotten it all. So this class helped me remember it.
-
6.S079 Software Systems for Data Science
- A pilot class that teaches data software, whether it is analysis, generation, collection, etc. Also touched a bit on LLMs and database performance topics.
- A fun class with a distributed systems final problem set competition (Dune themed). I forgot to register a teammate, but I ended up winning it and received a 3D-printed Dune sandworm thanks to my Python “performance engineering” skills 🤡.
-
6.100B (prev. 6.0002) Introduction to Computer Science and Programming in Python
- The second part of the intro to Python class, focusing on computational modeling and numerical data calculations.
- I took this class because I needed a 6-unit class. It’s half a semester.
- It was fun to see that most of my TAs in this class were my past students from the classes I have taught.
Physical Education
PE classes are quarterly, i.e., two per semester. I don’t remember which quarters I took them, but my classes were:
-
High-intensity interval training (HIIT)
- I saw HIIT and had no idea what it is. Decided it’d be good to take it. I was definitely too out of shape for the class, but I survived it.
-
Beginner Soccer
- I was in need of an easy class in a busy semester. Beginner soccer was pretty friendly and fun.
-
Yoga
- I had no experience in yoga or stretching, so this was a nice experience.
- It’s definitely harder than what I expected.
-
Broomball
- You are on the ice rink with a broom and a ball, but instead of skates, you are on your regular shoes.
- Very fun, apparently more popular in Canada.
I wish I had taken more PE classes, but times were busy.
Petition
I skipped 6.006 (Introduction to Algorithms), which is required in my major. Instead, I petitioned to have 6.046 satisfy the 6.006 requirement.
But then I didn’t have 6.046 available for its own position anymore. The requirement wants either 6.045 or 6.046. I took a more advanced version of 6.045, i.e. 6.840, so I submitted a petition for that as well.
With that, I had really satisfied all the requirements.
Finish Line
With my final semester, I officially graduated from MIT. I took 245 units beyond the general requirements, so more classes than I needed, and still never came close to finishing my wishlist.
Of course, the list above doesn’t include the struggles, all-nighters, and questionable amounts of caffeine that came with the academics at MIT. But that’s expected in most colleges, especially for the curious folks who like tinkering beyond their class content.
For me, the classes were not just about the material but also a way to meet remarkable classmates and teaching staff. MIT values and encourages collaboration, and I felt that every semester. In the end, I think those opportunities and that culture matter more than any specific set of courses a college can offer.