MIT Challenge
I'm self-studying the full MIT Computer Science and Engineering (6-3) degree via OpenCourseWare (OCW), aiming to finish in under 18 months.
In order to complete all ~17 classes in 18 months, I have about a month for each class, plus a little extra for when I need a break or more time. Realistically I can only give each class about 60 hours of total dedicated time, including lectures. That means I need to study a combined 3 hours of total work per day working ~5 days a week. At least one hour of that will be lecture (in some cases I will need to do 2 lectures per day), so the balance will be studying and problem sets. Where possible, I will try to complete courses faster than 4 weeks.
Since I will be skipping all the GIRs outside of prereqs needed for classes (like linear algebra and calculus). Not every class is available on OCW (and MIT loves to renumber courses), so whenever possible I will default to the closest substitute.
Starting 18.01 (Calc 1) on March 1, 2026.
How I'm Studying
For each course, if there are lectures, I look at how many there are and space them so I can watch them all in 30 days or less. Then I look to see if there are other materials like slides, lecture notes, problem sets, and so on.
I use an approach I learned from a student at the US Naval Nuclear Program (which for many years has been considered the single most difficult academic program in the country) that he used for learning technical, rigorous courses and building both intuition and very strong recall on dense topics called the Crucible approach. I used it for my hardest classes in college and it never failed to yield an A, even on mathematically rigorous classes where I was normally weaker. It is very time consuming and requires a lot of mental energy, and only works if you can get the slides, lecture notes, or reading ahead of time for each class. Considering my constraints I plan to do a simplified version of it here.
First I read the slides or lecture notes, and provided they are not egregiously long, copy them by hand verbatim, including graphs. Then I watch the lecture, usually the next day so I have time to sleep on it, and generally don't take any notes other than doing miscellaneous problems that were not in the slides/lecture notes, or trying to address questions I had or things I didn't understand from the notes/slides. I don't like to watch lectures faster than 1x because I like to be able to think about the idea being presented multiple times before moving on, so I do the full duration. Since you already sort of know the material, it makes the class a lot more fun and light.
After class, you immediately consolidate your notes. Now that you know what is important and have seen it twice, you can basically fit everything that matters into a page or two. I will probably skip this step since it is pretty time consuming to write it all out again, and this is an intermediate step.
The final step is to take every separable idea, definition, core equation, representative problem with solution, and edge cases/nuances, and write them out onto SEPARATE index cards each. This can produce, depending on the lecture, a lot of cards or only a handful. You write the lecture number and the class in the top corner, and put them in a box. Every night, you look at every single card you have made so far in the course, even if you know it cold, before going to bed. Then you move on to the next lecture, which you would need to pre-read/write the day before, and repeat. Once you have made your cards, you add them to the growing stack.
Before long, it takes you almost as long to review your cards as it does to write them. But the effect, by the end of the course, is astounding. You can not only recall many cards near-photographically, but subtleties in the content jump out, cards seem to connect across topics and dimensions in your mind, and you get a real intuition for the content, even if there were no problem sets in the course. When there are, and on exams as well, it's as if you can see the questions coming. You realize there are "only so many" things that can be asked, and you start to get away from the minutiae of the material and can think about it at a higher level of abstraction.
I have used this to great effect, but you can only do it realistically for one class at a time, since it is very mentally demanding. However, the rewards are worth it, as you feel you have a degree of real mastery over the subject.
Course List + Exam Results
Introductory Courses / Prerequisites
18.01 - Single Variable Calculus
Exam results coming soon18.02 - Multi-Variable Calculus
Exam results coming soon6.100L - Introduction to Programming
Exam results coming soon
Math
18.06 - Linear Algebra
Exam results coming soon6.042J - Mathematics for Computer Science
Exam results coming soon
Foundation Subjects
6.087 - Practical Programming in C (replaced unavailable intermediate Python class with 2 4-week IAPs as a rough equivalent)
Exam results coming soon6.096 - Introduction to C++ (4-week IAP)
Exam results coming soon6.1210 - Introduction to Algorithms
Exam results coming soon6.1910 - Computation Structures
Exam results coming soon
Header Subjects
6.1020 - Software Construction
Exam results coming soon6.1220 - Design and Analysis of Algorithms
Exam results coming soon6.1800 - Computer Systems Engineering
Exam results coming soon
Electives
I wasn't able to conform to the finer electives constraints, so picked what was both available and looked interesting.
6.172 - Performance Engineering of Software Systems
Exam results coming soon6.3900 - Introduction to Machine Learning
Exam results coming soon15.773 - Hands-on Deep Learning
Exam results coming soon6.830 - Database Systems
Exam results coming soon6.1810 - Operating Systems Engineering
Exam results coming soon6.5660 - Computer Systems Security
Exam results coming soon