MIT Challenge | Scott H Young

Over the next 12 months, I’m going to learn the entire 4-year MIT curriculum for computer science, without taking any classes.

UPDATE: The MIT Challenge is now complete. I finished on September 26, 2012, just under 12 months after beginning October 1st, 2011. Click on “See More…” for any class to access my exams, official solutions or code I wrote.

Answers to some common questions:

  1. How much did I work during the challenge? In the beginning roughly 60 hours/week. Later more like 35.
  2. Did you get a degree from MIT? No. See the talk above for my motivation to do the entire education without credit.
  3. Did you do everything an MIT student does? No. I did the exams and programming projects for a curriculum that is very similar to MIT’s own (I had to swap some lab classes and humanities requirements for other classes). The number of credit hours is the same though. Check here for MIT’s actual 4-year CS curriculum as a comparison to my own. (Note: This link has been updated as the old one was dead, however I haven’t checked whether there were changes made to the CS curriculum since I did the MIT Challenge)
  4. Did you use textbooks or lecture videos? Everything is in the “See More…” pane for each class. Please check it out if you’re unsure for each class.
  5. What order did you do the classes in? In the order listed below. Except some were taken at the same time. However if you followed this order serially you wouldn’t miss any prerequisites.
  6. Did you grade the work yourself? Yes. Admittedly, this introduces some degree of error over having a professor grade my work. However, most of the exams are quantitative with solution sets that have grading rubrics, so it limits the error somewhat. I encourage anyone to check out my actual exam results and compare them against the solutions. In many of the exams that had lengthy calculations required, I allowed for part marks provided the concepts taught in the course were applied correctly. I believe the provided grading is arguably a fair one, but if you wanted to take the strong position that any mistake (such as forgetting to carry a minus sign) invalidates an entire question, this would reduce some of my grades. I’ve gone through and recalculated under these more severe restrictions and it would put the final exams for 18.01, 5.111, 18.03, 6.002 and 6.013 below the passing threshold (the other 28 classes were either unaffected or stayed above passing). I believe the original grading was fair, if imperfect, but these later calculations show the impact of my decision to use part marks.
  7. Do you believe everyone shouldn’t go to university and do this instead? Of course not. I did my undergrad in university and I don’t regret it. My goal for this project was to see if it would be possible–to push the expectations for how long, how costly and how conventionally an education must be obtained.

Computers have always fascinated me. From finance to Facebook, algorithms are the hidden language that underlies most of our life. The largest transformations of our world are being written in code, and advancements in artificial intelligence allow us to use computers to understand what it means to be human.

Beyond the poetry of the machine, computer science is also immensely practical. Fortunes have been made and revolutions sparked on lines of code.

I’ve always wanted to speak that language. But, I didn’t want to invest four years of my life and hundreds of thousands of dollars to learn it.

I’m embarking on this experiment because I want to show that learning doesn’t require acceptance boards and SAT tests, thousands of dollars in debt, or even the 4-year pace most students assume is necessary to learn a subject.

Will I fail? It’s definitely a possibility—people a lot smarter than myself struggle through immense workloads at institutions like MIT, and I’m attempting to learn the same material at 4x the speed, without the benefit of instructors.

All I can promise is to share what I find with you. Listed below are all 33 classes I’ll be covering. For each of them, I’ll write the final exam and you can compare my answers to the MIT official solutions. I’ll also post any failures, so you can be sure I’m not omitting my mistakes.

Post-MIT Challenge Update

Since the challenge was completed, I’m using this space to share some of the new courses I complete or programs I’ve finished related to computer science.

  • WordSmith – This is an AI I built that plays Scrabble. Free and open-source.


Click to the titles to view videos, access the courses and see my results

This is a good class, but I don’t recommend taking it if you have no programming background, since it dives right into object-orientation with relatively little explanation. I really enjoyed the blending of more advanced concepts from AI and state machines into the core course. The course notes are free and excellent, although a lot of the focus is on robotics which use specialized equipment I don’t have access to. (As a side note, many people have pointed out that the final exam I wrote wasn’t fully comprehensive, you can read my in-depth reply here) Note: The original course I took has been switched by MIT. Here is a replacement.
Scott’s rating: 4/5

Good introduction to quantum chemistry, Lewis diagrams, acid/base and redox reactions. Also includes a more advanced section on transition metals and crystal field theory. Unfortunately the class did not have a viable final exam, so I was forced to use my practice midterms as the basis of evaluation.
Scott’s rating: 4/5

An extension of calculus, differential equations allow you to model and analyze complex systems. They play a particularly important role in electrical engineering where they (and their discrete counterparts) are essential for understanding circuits, signals and systems. The video lectures associated with this class have significant deviations from the rest of the course content, which caused me to waste some time.
Scott’s rating: 3/5

This was a trickier class to take on since there isn’t a class for it in MIT’s OCW. Learning it meant sifting through the mostly hidden recesses of MIT’s public archives to try to find notes and exams. A consequence of that is that filter design, a major topic, was completely missing in the notes and I was unable to complete the labs (6 & 7) or the exam sections that dealt with it. There was no final exam, so I completed all three midterms and graded them collectively.
Scott’s rating: 3/5

An introduction to algorithms and complexity theory. The course provides a good opportunity to apply algorithmic design concepts (dynamic programming, greedy algorithms, etc.) to actual programming problems, giving this class a concreteness that was missing in 6.042J. Unfortunately, I did not realize the final exam wasn’t comprehensive before writing it, so I’ve also included my quizzes I had done for practice. I completed most of the assignments, however as there were no solutions, I have left them ungraded.
Scott’s rating: 4/5

Excellent video lectures and abundant materials made this one of the more approachable courses in OCW’s catalog. Prof. Gilbert Strang gives fluent, easily understood lectures. My first exam for this class was only a 56%, so I decided to take another day to write the higher-scoring exam I posted below.
Scott’s rating: 5/5

A course in probability, it goes into the foundations of probability using calculus to analyze more difficult probabilistic questions than those posed in 6.042J. The textbook is designed for this course specifically, so it is extremely useful.
Scott’s rating: 4/5

This course covers the basics of digital and analog circuits. The exam was quite challenging and it marked the first exam where I actually ran out of time running it. Unfortunately the official solutions are MIT-access only, so I can’t upload them here as a comparison. This class serves as a basis for many of the later EE classes, so I’m sure I’ll get another chance to really be tested on the core concepts.
Scott’s rating: 4/5

One of my favorite courses thus far! The class explores some of the more advanced concepts in algorithms not found in 6.006 such as proving particular problems are NP-Complete, approximation algorithms, encryption, sublinear algorithms and parallel processing. I had to be careful though since the OCW version of this course is prior to MIT’s curriculum change where 6.006 was added, so it covers substantially easier material than the current versions.
Scott’s rating: 5/5

Great class that covered a survey of different AI techniques including search, constraint propagation, neural networks, kernel machines, concept learning and natural language processing. I also completed 6 assignments for this class which required me to learn the programming language Scheme. One of the challenges with writing exams for this class was the variety in the syllabi, since so many different techniques were covered and the specifics differed from class to class.
Scott’s rating: 5/5

This class teaches the basics of signal and systems analysis, extending the mathematical techniques first discussed in 18.03. While useful for more than just circuits, the class is particularly important for understanding things like frequency modulation, audio filters, noise reduction and even serves as a basis for image analysis and manipulation. This also was the first exam which I failed initially, luckily I improved and scored a 69% on my second attempt. Note: The original course I took isn’t available anymore. Here is a replacement.
Scott’s rating: 4/5

Great class teaching the crossover between electrical engineering and computer science. The design project involved building a gate-level CPU specification, that is building the circuitry to allow for a computer to be built. The only weakness was the class’s relative lack of material, however the assignments and labs are strongly supported.
Scott’s rating: 4/5

Intro to sentential and predicate calculus, their derivation systems and metatheoretical proofs. I found the class rather dry and technical, but the class did offer good practice into more rigorous proof methods, as opposed to the more informal styles taught in computer science classes. Unfortunately, the exam answers I used to correct my paper aren’t public, so I can’t post them here.
Scott’s rating: 3/5

I had already taken microeconomics when doing my business degree, so the vast majority of this course was a recap. However, since MIT has a much stronger math basis than my alma mater, it was refreshing to see more rigorous technical definitions of many of the concepts. I spent a little under four days on this course, so most of my errors were from forgetting technical definitions and formulas since none were provided on the exam.
Scott’s rating: 3/5

A useful class teaching the basics of computer networks, encryption, client-server paradigm and the Internet. I found some of the class repetitive after 6.004 and 6.02, which had overlapping content, but it was still useful. I made the mistake of not focusing enough of the reading assignments since that’s where a bulk of the learning comes from.
Scott’s rating: 4/5

Without a doubt, the hardest class I’ve taken in the program thus far. The class makes heavy use of vector calculus, transforms and complex notation in addition to generally extending the principles of electromagnetism taught in 8.02. A strong foundation in the topics of 6.003, 6.002, 18.02, 18.03 and 8.02 is a good idea if you want to attempt this class. I only passed the exam just barely, so it’s definitely a topic I’d like to revisit and refine at some point in the future, since it expressed a lot of interesting ideas.
Scott’s rating: 3/5

I had also done macroeconomics before when I did my undergraduate degree, so this was a recap mostly. That said, I thought the MIT version of the course and supporting material were much more accessible. It’s a great class to take if you want to understand the economy as a whole. Note: The original course I took was switched by MIT. Here is a replacement.
Scott’s rating: 3/5

This class was entirely based on 8 homework assignments, so the amount of testing material I went through was weaker than many others, unfortunately. That said, I loved this class, as Godel’s incompleteness theorems represent one of the most profound ideas I’ve ever seen in a class.
Scott’s rating: 5/5

This class was an extension of 6.003, Signals and Systems. It takes the basic concepts of signal analysis and filters and extends it to state-machine representations and stochastic signals. The inclusion of random signals is very useful for handling noise, so many of the concepts in this class are more practical than their ideal counterparts in 6.003. The free textbook/course notes was very useful.
Scott’s rating: 4/5

Intro economics courses typically simplify analysis by assuming perfect competition or monopoly. This class removes that assumption and considers how firms compete strategically against one another. This class really sparked my interest in learning more about game theory. Unfortunately I didn’t realize the sample final exam was fairly limited as a coverage of the content, but it was the best I could do.
Scott’s rating: 3/5

The content of this class was very similar to 14.20, although it focused more on the historical context and political framework than the game-theory side. An interesting class, the textbook reading sections were quite lengthy (nearly 900 pages) however the level of mathematical analysis was light, so it made for easy reading.
Scott’s rating: 3/5

Given the nature of my challenge, this was a fun class since it explored the various theories of education. Most of the class felt like a discussion in basic econometrics, as it appears the literature is inconclusive on many core ideas (are smaller classes better? do voucher programs work?). The class also explored the differences between the standard human-capital theory of education versus the signaling explanation, although, once again, the literature presented was mostly inconclusive.
Scott’s rating: 3/5

This is MIT’s required software development class. It was a tough one, not because it is too intellectually demanding, but because of the amount of work. It consists of 3 team projects, 3 individual projects and several labs (assignments, in their own right). I was hesitant about taking this class on because the time constraints of the challenge make it difficult to take on classes like this, however, in the end I figured the only way was simply to do all the work.

I managed to finish the class in about 3 weeks, spread over around two months. It was one of the most rewarding classes, even if it was also the most time consuming. I would have liked to stay longer with each project, particularly the final instant messaging application I built from scratch, to embellish it with more features. The class is an excellent choice if you’re already a novice programmer, but want to learn more high-level design ideas for not just writing working code, but well-designed code.

I’ve posted all of the projects I wrote here, although you’ll need Java installed to run them. I also included the write-ups for the three design projects (sorry for the lack of contrast in the scans!)
Scott’s rating: 5/5

This class teaches the basics of how to use computer algorithms to see, primarily under the context of guiding a robot to perform actions based on those images. Topics include binary image processing, edge detection, Gaussian extended surfaces, orientation and photogrammetry. The course was evaluated by two take home quizzes and counted as one of two graduate-level classes I took in the challenge.

Overall, the class was challenging, using techniques of Fourier analysis, vector calculus, linear algebra, quadratic programming and calculus of variations, so it was likely the most challenging class I’ve taken in applying mathematics. Unfortunately there were no programming assignments, which would have been interesting.
Scott’s rating: 5/5

This class teaches the basics of computer graphics, primarily ray tracing, although scanline methods are taught. The evaluation was based entirely on assignments (there were two minor quizzes, but they had no solutions so I didn’t use them). Starting with a basic ray caster and flat shading, the assignments progressively built up the ray tracer to include matte shading, glossy reflections, cast shadows, transparent surfaces with indices of refraction, mirror reflection and procedural texturing. A project was also done on creating a grid acceleration data structure, which has no visual effect but greatly speeds up the relatively slow ray tracing approach to graphics.

Details on the programming environment used are included in the README.rtf for the code. The file is quite large, but it also includes all the images rendered so that you can take a look at the output even if you don’t compile/run the specific scenes in question. (For comparison, MITs official outputs are included as sample_res.pdf for each assignment, so you can see how my raytracer compares). Note: The original course I took changed. Here is a replacement.
Scott’s rating: 5/5

This class wasn’t an MIT course but a graduate class in the theory of computation taught by Cal Newport at Georgetown University. This was a topic I had really wanted to study after enjoying both of MITs algorithm courses, but the MIT complexity theory course lacked any evaluation tools I could use. Some interesting ideas from the course are which types of problems can be solved by algorithms (meaning there is a process for solving any instance of the problem) and the restrictions on the speed and memory required to solve certain classes.

It also includes an extensive discussion on one of the most important and unsolved problems in mathematics, whether P=NP, which would have profound implications for society depending on its answer and despite decades of work and a one million dollar prize for its solution, nobody has been able to answer it.

There were two exams which I wrote and graded because they were non-cumulative.
Scott’s rating: 5/5

  1. Access the course material for free
  2. My Exams

FAQ for the MIT Challenge

Q) What rules are you following?

Because I’m not enrolled in MIT (or affiliated with them in any way) I’ve had to construct my own rules to make the challenge fair, yet feasible. The basic rules are simple:

  1. I consider a class successfully completed if I can pass the final exam (which typically means getting a grade of at least 50% although I aim for much higher).
  2. I write the exam under the same constraints of a student: no looking at the questions or solutions beforehand, no notes or forbidden material, same time constraints (the default is 3 hours if not specified).
  3. I grade the papers myself, comparing them to the actual MIT solutions. I’ll post both, so anyone can double-check my grading methods.

Keep in mind these are only the minimum requirements of my challenge. For classes which have a significant programming component, I try to do representative programming assignments, to the extent that this is possible.

Q)Are you doing all the assignments, papers and projects?

For theory or math-based classes, final exams are generally a comprehensive basis of evaluation, so I’ll use those as my evaluation. I still end up doing most or parts of the assignments and quizzes as preparation, but since I can’t maintain consistency with this criteria over the entire challenge (many assignments are either unavailable or impossible to evaluate objectively) I’m doing them in an informal manner.

For classes with a significant amount of programming work or practical design problems, I’ll try to complete most the assignments. However, since these are harder to evaluate, I’m still relying on final exams as the major criterion for these classes.

Q) Does your curriculum differ from MIT’s?

I spent nearly a month trying to piece together the closest mirror of MIT’s actual computer science curriculum to follow. Unfortunately, I can’t do this perfectly since some classes are impossible to evaluate (including labs and research classes), and others didn’t have any access online.

I am taking the same number of credit hours as an actual MIT degree, so where I couldn’t take one class, I replaced it with a similar alternative. In terms of volume of knowledge to learn, therefore, my curriculum is similar to the one suggested by MIT to its students.

The only other exception with MIT has to do with electives. I’m taking various non-computer science classes, to best mimic the HASS requirements for MIT students. These aren’t a perfect match, as the online courseware for arts is considerably weaker than for sciences at MIT.

You can see the actual MIT curriculum for computer science here.

Q) What happens if you fail a class?

Given the pace I’m attempting, I think it’s inevitable that I’ll fail a class. My main requirement is that I pass a final exam, so if I fail one, I’m allowing myself to take a different exam after.

My strategy is to take a fail-first approach, to be more efficient with my time on classes where I have several final exams I can use as the basis of evaluation. This is very different from university where a failure can be a real setback. That’s a benefit of self-education over rigid formal institutions.

Q) Why are you doing this? Do you just love studying?

Nobody likes studying, but everyone wants to be smart. Learning, getting to those insights and feeling smarter about a subject are immensely rewarding. Too bad many of us have forgotten this after years of punitive formal education.

I’ll admit, I may be a bit crazy, or arrogant, for wanting to complete a 4-year program in only 12 months. However, my real motivation is to show people that learning faster is possible and that it can be more fun at the same time.

Q) Will you get a diploma for doing this?

No, and that’s exactly the point. Our society incorrectly equates knowledge with accreditation. Getting a piece of paper is great, and for many lines of work, it’s completely necessary. But the equation is made so strongly that people forget the two things are different.

I already have a career as a writer and small business owner. I never want to work for a large corporation, where HR might scrutinize over my lack of a diploma. For me, I just want to learn computer science in case I want to start a new business or work for a start-up.

I have nothing against college. University was an amazing and worthwhile experience for me, and it could be for you as well. All I hope is that by showing an alternative, people who feel the current system doesn’t work for them can find another path.

Q) Isn’t this just cramming for tests?

No, but the difference is subtle. Most the classes build on past concepts, so my goal with each is to develop a deep understanding that I can leverage. Cramming is typically a resort to memorization to quickly pass a test then forget it. Understanding is harder, but not necessarily more time consuming (and a requirement if each class builds on the one before it).

As an update, Since the first four classes, I’ve been proceeding 3-4 classes in parallel at a time. Although this involves reviewing over a much shorter time span than is typical (1 month instead of 1 semester), it increases the benefits of spaced repetition.

Ultimately, my ability to comprehend and perform adequately on higher level classes will be the test of my method, since most freshman classes serve primarily as grounding for more difficult senior classes.

Q) What kind of past experience do you have with the subject?

When I was still in high-school I did a fair bit of programming, mostly creating small computer games. In addition, I’ve taken 4 university-level computer science classes, when I attended the University of Manitoba for my business degree. Yes, I do have some prior experience with programming which will give me an advantage in the challenge. That being said, my prior level of skill isn’t probably far from many of the CS students actually attending MIT and for whom the curriculum is based.

In addition, I completed the first course 8.01 Classical Mechanics as a pilot experiment for this main challenge in July of 2011. Therefore the number of classes I’m attempting in the 12 month period is officially 32.

Q) I’m a blogger/reporter/journalist–how can I contact you to share the story?

You can contact me at or use the form here. I’m going to be fairly busy (for obvious reasons) so apologies in advance if it takes me awhile to get through my emails, as I usually go offline when I’m working through a course.