Hollis Holmes

Homepage

Learning MIT's Computer Science Curriculum

Motivation

2020 was a tumultuous time to graduate. Exams cancelled, goodbyes cut short, job offer rescinded, and just when you thought things couldn’t get any more strange, no more toilet paper! Moving from a full-time offer to part time work, I found myself with a lot of extra time, and very little direction.
Though it was not the focus of my undergrad, I had consistently returned to open-courseware in my free time to learn tidbits of python and machine learning. It then became clear that this Covid-19 curveball, though under unfortunate circumstances, had given me the opportunity to pursue another one of my interests. In September 2020 I decided to pursue an online education in computer science, and here is how I'm doing it!

Where To Begin

I quickly discovered the plethora of resources available: Coursera, edX, Code Academy, the YouTube channel of every CS undergrad with a whiteboard, and the list goes on! Having too many resources to choose from is a damn good problem to have, but a problem nonetheless. I found myself stuck in a loop of endlessly comparing courses, all the while making no progress. Working in circles, I knew I needed to pick something to get the ball rolling.
I consistently found free courses from universities to be receiving the highest praise and decided to follow MIT's curriculum for a few reasons. Firstly, I could be confident in the breadth and depth of topics covered. As one of the top engineering universities in the world, I knew their curriculum would be pristine. Secondly, there were plenty of resources available via their open-courseware platforms (more on this shortly). Most courses have everything from tutorial videos to exams and all for free! Moreover, the structured curriculum would prevent me from needing to waste time planning and comparing future courses, because a regimented plan had already been created for me.

Curriculum

My engineering degree endowed me with the prerequisite math knowledge for the computer science curriculum. Furthermore, complementary electives in the humanities taken in my undergrad and required for a standard MIT degree would play no role in advancing my computer science knowledge. Therefore, I decided to focus solely on the final third of MIT's computer science curriculum, comprised of the core computer science requirements.
MIT's curriculum, course 6-3, is outlined here, and my progress, below.

Methodology

MIT has three main branches for their open-courseware resources:

The first of these resources, edX, emulates end-to-end MIT courses with start/end dates, live teaching support, auto-graders, exams, and certifications for courses passed. On the other end of this spectrum is MIT OCW which is completely self-guided but still with all MIT lectures, assignments, labs, exams, each with their respective solutions available. There is not however, a certification available for completion. Between these two resources is the Open Learning Library with auto-graded assignments and homeworks. For each course I prioritized edX availability, then OLL and finally MIT OCW, to ensure I was taking advantage of the most resources possible.

Execution

This course offered through edX introduced me to some core python programming concepts including its main data types, object-oriented programming, complexity analysis and testing/debugging. Mid-lecture questions and weekly assignments helped to solidify concepts, and exams tested the congregation of all concepts visited throughout the course. I first took this course on my own through MIT open courseware but circled back to take the verified track on edX in 2021.

This course is not part of MIT's CS curriculum, but offered exciting lectures and immersive assignments that that would help to improve my understanding and capabilities with respect to the core concepts introduced in 6.0001. The key concepts covered include optimization, object-oriented programming, stats and data science. Much like 6.0001, I first took this course through MIT OCW but am circling back to complete it through edX to earn the certificate.

This class was really the meat-and-potatoes of improving my programming skills. 12 weeks, with 10 assignments, each of which has over 20 built in tests in order to verify the functionality of your code. This course covered design paradigms, recursion, graph search, object-oriented programming and much more. Discussions with MIT students verified that this course was almost entirely assignments based. As a result, I only focused on recitations and assignments for this course. Posting solutions for this course is prohibited, but you may find my test cases passed for each lab below.

Data structures and algorithms, the notoriously difficult class, and a central theme to industry coding interviews. This course lived up to its reputation and was my favourite class thusfar! Its theortical concepts and mathematical rigor reminded me of my undergraduate classes. Though, I am just beginning the long road to interview prep, and so it would not surprise me if my opinion is starkly different in 6 months.

The course whose topic is the buzzword in 90% of headline tech news is finally here! This course offered through MIT's open learning library had tremendous lectures, and auto graded weekly exercises, labs, and homeworks. This course took more time than any other class, well over 150 hours, especially since I needed to brush up on my multivariable calculus.

This class was filled with great lectures by tremendous lecturers, and even the course textbooks have some good jokes. 6.042 served as a great refresher of key topics covered during my undergrad including proofs and probability. It also introduced some key structures with which I was unfamiliar, including graphs. Given this content was over 90% covered in my undergrad, I did not feel the need to go through every assignment - this is the only class for which this is the case.

I am currently taking this course which offers an introduction to the engineering of digital systems.

I am currently taking this course which builds on the concepts seen in 6.006, Introduction to Algorithms, but now moving to design of algorithms requiring much more rigor in analysis and proofs.

Java and design practice course.

Systems class: Networking, OS, security, and distributed systems.

Reach Out!

hollis.holmes.work@gmail.com

linkedin.com/in/hollisholmes