Background
You'll have to take my word for it that is actually my progress for MIT's Introduction to Computer Science and Programming Using Python hosted on edX → linked here), and not someone else's. I heard a lot about this course on Reddit, particularly that it was rather demanding and covered a lot of topics. Additonally, I would say that at least in terms of the Reddit population, this course is ranked second only to Harvard's CS50 in terms of being the best open-source education introduction to programming course.
Also, years before I started programming, very crude videos of the lectures for this course were uploaded to Youtube. This was during the nascent days of open-source education, when audio and video quality left a lot to be desired. Regardless, I was only able to watch a few minutes of the first lecture before losing interest (at that time I was not willing to download anything in order to learn programming), namely because I still had no idea what programming was.
I took this course after doing a lot of data visualization stuff and a little bit of webscraping with Python. I was getting to the point where I could write simple programs that worked, but nothing beyond that. In other words, there was not much thought about good design or runtime — I was very much in a "if it works, it works" mentality, primarily because I didn't know any better. Things like encapsulation or solving a problem using recursion (especially since I didn't know what recursion was at the time) never crossed my mind.
However, as I began to broaden my knowledge of programming, I learned that the little things matter. It was not enough to solve a problem, but it was important to do so using best-practices. This, combined with the fact I was looking for a course that would be difficult and had a good reputation, led me to enroll in the audit track for 6.00.1x.
Oh yea, of course I also wanted to find out what they were talking about in those Youtube videos I tried watching years ealier.
Topics
As I mentioned above, this course is pretty grand in scope.
Week | Topic | Some things covered |
---|---|---|
1 | Python Basics | Types, Variables, Operators and Branching, Strings, Iteration, Control Flow |
2 | Simple Programs | Bisection Search, Approximate Solutions, Iteration vs Recursion, Fibonacci |
3 | Structured Types | Functions as Objects, Tuples, Lists, Dictionaries, Mutation, Aliasing, Cloning |
4 | Good Programming Practices | Debugging, Assertions, Exceptions |
5 | OOP | Object Oriented Programming, Class Instances, Methods, Generators |
6 | Algorithmic Complexity | Big Oh Notation, Analyzing Complexity, Bogo and Bubble Sort |
7 | Plotting | Visualizing Results, Overlapping Displays |
Grading
Your grade will be evaluated based on the following:
-
Finger Exercises (10%)
These are little quizzes dispersed between lecture videos. They range in difficulty from quite easy to very difficult, the latter especially so if you are new to programming. Luckily, you can continually revise your answers until you get 100%, so these won't adversely affect your grade.
That said, I wouldn't recommend looking at the answers right away if you get something wrong. I found it's much more beneficial to struggle with a problem for days and come to the conclusion on your own than it is to cheat a course's grading system so you can keep moving forward, but I'm sure you knew that already.
-
Problem Sets (40%)
These can be quite tough at times, typically because I found myself overthinking the problem. In lecture, they provide clear examples on how to solve certain problems — use these examples! It may be a good idea to run the code covered in lecture in a Jupyter Notebook and/or PythonTutor while referencing the lecture slides. The primary skill I took away from the problem sets was debugging, which provided me with a strong foundational understanding of key concepts like inheritance, encapsulation, and recursion.
-
Midterm/Final (25% each)
These are the toughies, though you are given 8 hours to complete each. That said, I finished each one in about two hours — the 8 hours is more a convenience thing, since you can't retake these exams once you start.
I took each of these on a Saturday so that I would have minimal distractions and ample time. Admittedly, when I first began the exams and saw the questions, I was incredibly overwhelmed and sad. However, after some deep breaths and stepping away from the computer for a few minutes, I was able to tap into the skills used to solve the problem sets and earn A's on both exams.