What I Would Change About the MIT Challenge

After a year spent learning MIT’s computer science program independently, I’ve gotten a number of emails from people who want to do the same thing. People who want a computer science education but don’t want to wait four years and pay thousands of dollars to get it.

I’m very happy with how I conducted the challenge, but I wouldn’t recommend most people follow my plan identically.

My goal was to publicly tackle a hard academic program. I wanted to learn practical skills, but because I’m a full-time blogger, not a full-time programmer, I didn’t mind taking classes which were more math or science.

Many of the people writing me want to repeat the MIT Challenge so that they can become great programmers, possibly landing jobs in the industry. Given that’s a more popular goal than investing a year full-time just for intellectual satisfaction, I would definitely make some modifications to my challenge for those interested in repeating it.

Downsides to an MIT Education

Whenever you design a curriculum, you’re making tradeoffs. You choose what to emphasize and what to downplay. MIT does this. Every school does.

There are many advantages of an MIT education. The material is excellent and the teachers are world class. The expectations are high, so passing an exam is a good sign you really understand the ideas. The material, especially for graduate classes, is focused on cutting-edge innovations in the field.

But there are also tradeoffs MIT makes when teaching it’s students which I feel are important to take into account if you’re wanting to self-study the program and not receive a degree for your effort.

MIT is Math and Theory Heavy

Doing the MIT Challenge I learned a lot of math. Now don’t get me wrong, I enjoyed those classes and I wouldn’t have changed it if I had gone back. But the amount of math was probably unnecessary for being a decent programmer.

MIT’s bias towards theory and math-heavy classes, and the relative dearth of programming, was a contentious point during my challenge. Many people claimed it was impossible to do the programming work of a 4-year challenge in one year. Except that MIT doesn’t do nearly as much programming as other schools.

In the four classes of computer science I took from my alma mater, the primary emphasis was programming. Even the exams were more than half handwritten computer programs we had to make.

MIT does have programming assignments, and I did a lot of them (and there were also lab classes which had more programming which I had to substitute out during my challenge). The difference is only relative to my experience with other schools which did tons of programming but probably wouldn’t have gone into the full correctness proof of the SVM algorithm using Lagrangian multipliers.

My impression of MIT is that it assumes learning to program is the easy part, so it puts more emphasis on the big theoretical ideas of computer science. This is an understandable position, because they want to prepare their graduates to do innovative work, not just prepare them for their first entry-level job.

MIT Teaches a Rounded Program

Another laudable goal of MIT instruction is that they expect all their graduates to be well-versed in the science and arts. This roundedness to the curriculum is noble, but perhaps impractical for someone who mainly wants employable skills.

During the program I studied biology, chemistry, physics and economics. These were great classes, and I enjoyed them, but they could probably be omitted if you only wanted to learn about computer science.

MIT is Highly Extracurricular

Another reason I feel MIT’s course curriculum downplays the programming aspect is that they expect you’ll learn that on your own. Most MIT students will do summer internships or extracurricular projects which will supplement the theory-heavy courses.

Since my challenge, and any self-education attempt to replicate MIT’s curriculum would omit these side projects, it’s important to take that into account.

MIT Merges Electrical Engineering and Computer Science

Another quirk of the MIT program is that it also covers electrical engineering. As a result, I learned quite a bit about electrical engineering which is arguably only distantly related to computer science in the day-to-day work of a programmer.

I think there is some value of learning the basics of electrical engineering, particularly computation structures which shows how computers are made of wires and semiconductors. However if my main goal had been practical, not intellectual, I would have skipped most the EE courses to put extra emphasis on the CS.

I’m glad I followed MIT’s curriculum, but I’m aware that many people aiming to follow me have different goals and are unaware of these emphases in MIT.

What I Would Change for a Programmer

You can see the curriculum I followed here, and MIT’s actual 4-year computer science curriculum. It’s not a perfect replica, but my main goal was to get as close as humanly possible, both in volume and in subject matter.

However, if your goal is to become an excellent programmer or have the foundation of a computer science degree to serve as the foundation of a professional skill, I don’t think perfect imitation is the ideal benchmark.

Here’s how I would change the curriculum I used to better suit those aims.

What I Would Keep

Here are the courses I thought were particularly useful to know, as a programmer. The list is not exhaustive, and there are useful classes I didn’t take. Many of these are more theory oriented, but they teach useful theory for someone who wants to build things in code:

18.01: Single Variable Calculus
6.01: Introduction to EE and CS I*
6.02: Introduction to EE and CS II
6.042J: Mathematics for Computer Science
6.006: Introduction to Algorithms
18.06: Linear Algebra
6.046J: Design and Analysis of Algorithms
6.034: Artificial Intelligence
6.004: Computation Structures**
6.033: Computer Systems Engineering
6.005: Elements of Software Construction

*Technically, this class requires having done the two intro physics classes, but considering the only reason for this is to understand voltages and simple circuits, you could just learn those from KhanAcademy videos and skip the two physics classes (although they are very well taught).
**This class requires Circuits as a prerequisite, but I believe you’d have sufficient coverage from 6.01 and 6.02 to cover it and taking 6.002 would be overkill.

These are the core CS courses I took. I would also consider taking additional courses based on your particular interests in computer science. I did machine vision, computer graphics and theory of computation as well, but the above 11 classes would be the most beneficial, even though it’s only a third of the classes I took.

What I Would Add

In terms of more classes, I would first consider adding an intro programming class if you’re starting from scratch. 6.01 is technically MIT’s first class, but it races through the beginnings of Python which could be daunting for someone who is new. I’d also include Khan Academy to make sure you have the appropriate math background to start taking calculus (not strictly necessary, but useful for understanding AI, graphics and some more advanced topics).

Some other academic subjects I would like to cover better, but weren’t explored deeply for the MIT Challenge would be:

  • Operating Systems – This is covered in 6.004, but only as a section.
  • Programming Paradigms – I did this separately from the challenge, but this set of lectures from Stanford is really good.
  • C and C++ – Most of MIT’s classes are done in Python. One used Scheme and the main software development class used Java. I didn’t use any C during the MIT Challenge, and I only used C++ in the computer graphics course which didn’t teach using the language beyond the basics.

More Projects, Fewer Courses

Given the stripped down courses I listed plus the few additions I mentioned, you would have roughly 15 courses, less than half of the ones I took in the challenge. Adding to that, I would put the rest of my emphasis on working on interesting projects, not more academic classes.

The MIT Challenge did have projects, but school projects are very different from self-started ones. With an academic project the constraints and aims of the project are provided. With a self-started project, you must discover and create the constraints for yourself.

I’m in this phase myself, doing self-started projects to learn more about computer science and get to a higher level of skill as a programmer. I don’t have a perfect guide, but here are some rough categories of projects I want to work on to test my skills in different areas:

  • Create a project that involves some machine learning
  • A web application
  • A project involving interesting uses of graphics or sound
  • Build something using robotics

I’m not sure I’ll get to all of these projects, but they are interesting areas and allow me to expand on the theoretical foundations I’ve picked up in classes. Were I doing the MIT Challenge again with the sole aim of becoming a programmer, I would have spent at least half my time doing these kind of unstructured projects.

Since the MIT Challenge, I’ve finished one project on that end. I built an AI which plays Scrabble, so you can play against a computer that always plays the highest scoring word. For my next mini project I think I’m going to redevelop it so that it can be a JavaScript application I can put online for free.

Self-Education and Impractical Knowledge

I learn because I’m interested in many things and I’d love to be educated on many topics even if they don’t have any real practical necessity in my life.

One of my favorite classes was Theory of Computation, a graduate class exploring what computation is and the inherent powers and limitations of algorithms. It was fascinating, but the material was so esoteric I doubt I’ll ever need it when writing a computer program.

I’m aware that most people don’t share my love for knowledge, even impractical, so I feel my above modifications are better suited for someone who wanted to follow the MIT Challenge, but strip away the superfluous.

To me, the power of self-education is that the world is a fascinating place that I’d like to know more about. Not needing to pay tuition or deal with labyrinthine bureaucracy to get at it is a huge advantage. I know many people who paid thousands to study a useless major because they didn’t realize that learning doesn’t need to be expensive.

But self-education is also a tool you can apply to get better jobs, clients or business opportunities. If that is your primary aim, then the power of self-education is that you can tailor it specifically to your goal.

  • Brandon

    Good post, Scott. I must say, my favorite part about the challenge was that it was repeatable. Also that even if someone didn’t want to take 4 years worth of classes, they could still use your tactics on a few classes they were interested in. Oh, and Scott, i did have a question about you doing the challenge. During your “cover” period of the materials, how did you keep up with later ideas without a deep understanding of earlier ones? In any case, inspiring stuff man.

  • Leon

    I find this and previous posts very interesting. I am enrolled in this program because I am a university professor who teaches Computer Information Science and my main goal is to find ways to better structure the classes and the assignments so that students will find themselves naturally using some of Scott’s techniques and hence have better absorption of the knowledge and skills that I am attempting to teach. Thanks for allowing me to lurk at your back door to do this.

  • Peter

    Nice Scrabble program!

    Very useful information to know. Thanks a lot!

  • Brett Warner

    I think the only reason that most people don’t view education as fun is because they believe they’re not supposed to think that way. Just about everyone I’ve talked to that’s taken free online classes has become addicted in a sense and made that one of their downtime activities.

    When you get rid of the stress of grades, or taking something because you have to get some meaningless credit you can have fun and enjoy picking up new skills in your spare time.

  • Ólafur Jón Thoroddsen

    Awesome post! I now feel a lot better about my thoughts about getting a degree in physics just because I’m interested. Some of my friends think I’m waisting time but I don’t see it that way.

  • Abulasar

    Hey, Scott can you list the Edited course(considering Operating System,Proramming Paradigm , C & C++ ) in the order of which it should be taken.

  • Scott Young


    I didn’t do them, so I can’t say for sure the order. The OS course is a grad course, so it should be taken nearer to the end (it might be too hard, I haven’t fully gone through it to see if there are any prereq’s missing from my list). Programming Paradigms can probably be taken pretty early on, I did it before the MIT Challenge. C and C++ are similar.


    Honestly I didn’t find it to be much of a problem. The lack of a deep understanding usually only prevented me from solving hard problem sets, not really from following along a lecture. It’s *much* easier to follow along a prepared sequence of logic than it is to solve creative problems from first principles.

    There were a few classes where I should have interleaved the practice more, because I was starting to get lost in the middle, but with the time pressure I was operating under, I’m not sure what I would have done better.


  • Tyler

    “Another quirk of the MIT program is that it also covers electrical engineering. As a result, I learned quite a bit about electrical engineering which is arguably only distantly related to computer science in the day-to-day work of a programmer.”

    I think that might be a quirk of any technical school. I know one of my best friends is going to Rolla, Missouri Institute of Science and Technology, for Electrical Engineering, and all he has to do is take a couple more classes to double major in Computer Science.

  • Scott Young


    MIT is definitely not a technical school. I haven’t done a complete survey, but I’d argue it’s generally the opposite. Most schools have separated EE and CS since they only overlap in smaller areas and most modern work in each field is fairly distinct.

    EE grads may pursue more CS applications if they choose to work with hardware or computation structures, so that might explain it. But the reverse is rarely true. I know very few software guys that even go near the underlying physics of how a computer works in their daily work.


  • Mustafa

    Nice post Scott, coming from someone who actually endured the challenge, I’d take your advice seriously. I for one plan to do electrical engineering at Carleton University in Canada’s Capital, but it is hardware intensive, while it still teaches a fair amount of programming. However thanks to your tips computer science is something I know I can pursue in more depth. I recommend others to teach themselves like Scott has demonstrated so well.

  • Steve Bithell

    Hey Scott

    A Happy New Year to you and your readers!

    Re: your MIT challenge. The reaction to your study programme struck a chord with me, as I have been self educating for nearly 20 years and found it a more effective and efficient method than formal education. The response from HR people to your work prompted me to reply to your post, as it stands in contrast to my experience.
    I trained as an engineer, and then studied formally for a Masters in Environmental Policy and Ethics, and an MBA before self studying in political philosophy and lots of other stuff. I did obtain formal qualifications, but only as an afterthought – the knowledge, not the certificate, was important to me.
    The reaction from recruitment consultants was not encouraging, typical responses being ‘we don’t know what you are – are you an engineer?’, and ‘your CV confuses our clients – what can you do?’

    At this time of the year, employers’ organisations in the UK (e.g. the CBI) start to complain of two things that graduates ‘lack’. The first is life experience which, since most graduates will be in their early twenties, is hardly surprising. The second is basic skills, meaning reading, writing and maths – hard to believe for a group of people who have passed through higher education.

    I think the long and short of it is that it is too hard (or perhaps too much trouble) for traditional companies to identify talent, rather than ability, so recruitment follows from qualifications, not potential. It is also not in the immediate interests of some companies to bother, because talented people need companies far less that companies need talented people. They will always think and work themselves out of a dead end role.

    Best Wishes

  • Jim Gfesser

    Thanks for this update to your MIT challenge.
    I just had a comment on the Electrical Engineering (EE) part.

    Perhaps EE courses are still included in the CS curriculum for embedded software development. Sometimes, not always of course, it helps to have some knowledge of circuits as one develops software for embedded systems, such as smart phones, GPS units, engine controls, or any gadget with a microprocessor in it.

    Again, it’s not mandatory, but it sometimes it helps. Sometimes an engineer is called upon to design the embedded circuit AND to program it. One example of this is the open source Arduino platform. One builds the circuits AND programs the processor to do what it needs to do.


  • Varoon S

    “Again, it’s not mandatory, but it sometimes it helps. Sometimes an engineer is called upon to design the embedded circuit AND to program it. One example of this is the open source Arduino platform. One builds the circuits AND programs the processor to do what it needs to do.”

    I agree with your statement,like programing an Arduino By learning EE stuff can help in self learning as one can design projects around them because these devices are accessible allowing you to make you own lab or playing field

  • Tom

    You put together some easy to follow awesome resources so that others can repeat what you did. I am about a month away from graduating with a BS in Computer Science. I am very interested in cruising through these courses and refreshing myself on things I am starting to forget or that I avoided understanding completely the first time around.

  • santie

    Hi Scott,

    I am a loyal reader of your blogs since I first stumbled into here. I am an mediocre software developer always frustrating to improve my skills. After I read your blog I started developing a study habit before/after work. It works out really well. Besides programming I am also reading the books you listed in ‘what intellectual ideas one should know’ blog. It is beginning to transform my knowledge and understanding of the world and I drafted my first 10 year plan which adapt to my personality, intelligence level and financial needs.
    I am an immigrant, a late starter, and I am not young any more (in my late 30s). If you could write something for late starters like me, it will greatly encourage and help us. I appreciate your selfish-less sharing of your experience, not many people would do this. What you are doing is extremely valuable.

  • ben

    I read the points on your website of setting goals and holistic learning . You repeat those same points in your finished video, and that is great. I’ve been procrastinating for a long time. The moment I listen to some guy talk and write on a chalk board I want to sleep. It was because of the pre-defined goal of failure and knowing it would take too long to learn anything. I think things will be different this time. I am going to do the same challenge as you, but not as extreme. I want the math and programming languages, that’s it.

    Thanks Scott!

  • Rohit Vashisht

    I am interested in how many hours a day did you put in during your mit challenge. How many hours of reading, how many hours of lectures and how many hours of doing assignments.

  • Rohit Vashisht

    I am interested in how many hours a day did you put in during your MIT challenge. How many hours of reading, how many hours of lectures and how many hours of doing assignments.
    I took some courses from MIT Opencourseware and the assignments were pretty tough especially in Physics, Calculus and Electronics. How did you approach them.

  • Dominick

    It sounds like, form the goals that you listed as hoping to get out of the program, you would have found a degree in Software Engineering much more to your taste. Universities which offer SE degrees are usually engineering-centric universities which are heavily project oriented and know what it takes to graduate alumni with marketable skills. Sure there is still some math, and lots of theory, but along with a heavy emphasis on programming and project work, they also teach everything required to properly engineer a useful and maintainable system, not just the programming. They focus on all aspects of the Software Development Lifecycle, from requirements gathering to domain modeling, design patterns, SOLID principles, version control strategies, deployment strategies (continuous integration / continuous delivery), agile methodologies (SCRUM, TDD, BDD, etc.) and also, team skills and communication skills with non technical personnel. Working as a team is extremely important nowadays in the software engineering world and gone is the programmer who hides in his ivory tower cranking out code and never talking to anybody. The average programmer now spends less than half of this actual work time programming, and the rest of it getting feedback from stakeholders, collaborating with team members, and doing systems design.

    Side note: my guess is that they threw in the circuits classes because a large part of all code written through which we interact with is actually written for embedded systems on micro-controllers, where good knowledge of circuits is required.

  • BenevolentCarnivals

    Halloa, Scott.
    How would you call that alternate version of MIT CS curriculum? Restricted Computer Science?
    Also, I can’t find anywhere any information about how many hours did you spend, how much did you practice daily, and what was the biggest time-wasters. Could you possibly finish the challenge, if you decided to take 6 months from the very beginning?

  • Terry C.

    Great post Scott!
    I am a math Ph.D student who did not take any computer science class during my undergraduate years (I regretted that). I was looking for a place to start right now and saw your blog. So here is my question: how is your skill level compared to real MIT graduates after completing this 1 year challenge? I ask this question because I want to pursuit a career in computer science after I get my Ph.D and I definitely need to improve my skill to a competitive level. Thanks in advance for your answer.

  • Scott Young


    If you compared me to a hypothetical student that just did the coursework at MIT, I’d say I would compare decently. However, many MIT students also do summer internships and work on their own, extra-curricular projects, so I’d probably have accumulated less knowledge than those students.


  • Harrison


    This is really cool and have been meaning to start this curriculum myself. I’ve been bouncing between doing self learning, using this approach, vs. going to a coding bootcamp (or maybe a mixture of both). Have you been able to compare your abilities with some alumni from the top boot camps or done any type of comparisons against those bootcamps?