MIT Challenge

Inspired by Scott H. Young’s MIT Challenge, I am going to complete 5 MIT computer science courses in under 4 months through MIT OpenCourseWare.

During my formal training in mathematics, I spent some time writing and analyzing software. Getting a taste of computer science through programming only increased my interest in understanding how computers work.

I am embarking on this journey to accomplish one primary objective: to develop a comprehensive understanding of the fundamentals of algorithms and data structures. From reviewing the MIT computer science curriculum and comparing it to my university transcript, I believe that the central gap in my understanding of computer science is precisely these two concepts.

Listed below are the 5 classes I will be covering. For each of these classes, I will either a) create and publish a short document that contains the notes that I found most interesting or important or b) create Anki notes which are available upon request.

See GitHub Repo

Learning Progress (5/5):

6.042J: Mathematics for Computer Science

Matt’s Review: 6.042J was almost all review from a collection of introductory undergrad math courses (mostly number theory, group theory, graph theory, and real analysis with a sprinkle of probability at the end). It was a well-designed course with easy-to-follow course notes. 5/5!

6.004: Computation Structures

Matt’s Review: Having never taken a computer hardware course, most of 6.004 was new material. Terman does a great job of making the video lectures engaging and concise. I found the complexity of the computing stack fascinating and overwhelming. Reading Reddit reviews, I can see how students found the course assessments extremely challenging; the amount of technical nuance hidden away at each abstraction layer is, on a good day, humbling, and on a bad day, terrifying. I found reading Essentials of Computer Architecture (2nd Edition) by Douglas Comer extremely helpful during this course. It was a doozy but well worth the time! 5/5!

6.005: Software Construction

Matt’s Review: 6.005 started strong. Its focus on how to write software that is safe from bugs, easy to understand, and ready for change (i.e., the three main themes of the course) never left me wondering why I was studying the material. However, the quality of the course material began to oscillate after Reading 17; some chapters would be strong while others would fall flat. This course could benefit from further modularization, particularly in the latter half. A book such as Code Complete (2nd Edition) by Steve McConnell may be a better introduction to software development. 3.5/5.

6.006 & 6.046J: Algorithms (First two courses)

Matt’s Review: Unlike the three previous courses, I combined 6.006 & 6.046J into one “course” by utilizing the Introduction to Algorithms (Fourth Edition) textbook by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. Learning from the best textbooks is more accessible for me than from lecture videos/notes in a technical discipline. Overall, the combination of Anki flashcards and the well-written and concise style of Introduction to Algorithms greatly improved my knowledge of the analysis and design of algorithms and data structures. Great textbook! 5/5!