Introduction to Computer Science and Programming using Python

December 25th, 2023

Review
Course
Computer Science

Retrospective

MIT's Introduction to Computer Science and Programming using Python main strength is that the topics it chooses to cover are examined in high detail. Topics that are previously covered in Harvard's CS50P like string manipulation and object-oriented programming are broken down from the perspective of a computer scientist rather than a programmer. This decision to approach problems from both a theoretical and applied perspective allows one to deeply understand each topic, no matter what programming language is being used. My favorite lectures in the course were, by far, those taught by Professor Eric Grimson. He has a confident, well-paced lecturing style that I really enjoyed listening to. His lectures also tended to cover topics that were not covered in CS50P.

What I Learned

Where this course really shines is its lectures on recursion, data structures, algorithms, and program efficiency. Before this course, I had no experience writing a recursive programs. I learned that the implementation of a program is very important in deciding its efficiency. Choosing to implement an algorithm iteratively or recursively can result in a large difference in the time complexity of a program. I now understand its purpose for analyzing the complexity of algorithms in relation to their inputs.

I really enjoyed working on the problem sets. Each problem set was a great way to apply what I had learned up to that point. Each problem set was designed around building a complete and useful program. Knowing I was working towards a complete and useful program helped motivate me.

Dislikes

In my opinion, this course was difficult to get into. I attribute part of this difficulty to the fact that the course I took prior to this one, Harvard's CS50P, was so great. This course repeats a lot of the same topics covered in CS50P, but with less energy. Dr. Ana Bell, while obviously very knowledgeable of the lecture material, is not the most engaging teacher in my opinion.

Additionally, there are very few opportunities during lectures to program along with the professor. This causes the learning to feel very disjointed, since you are digesting a lot of information and not coding during the lectures, and then coding a lot during the problem sets.

Suggestions for Students

Like most online courses, take the time to pause or slow down lecture if you feel that the Professor is going too fast. Additionally, be aware that most of the homeworks will take a long time. I usually split my work on each one up across multiple days.

Key Takeaways

  • Computer science and programming are not synonyms.
  • It is important to analyze an algorithm separately from its implementation in code, or the machine that implementation is being run on.
  • Order of growth (Big O) notation measures the worst case upper bound of the asymptotic growth of an algorithm in terms of its input.
  • Recursion is a useful method for implementing algorithms, and has many advantages and disadvantages when compared to iteration.

Table of Contents

© 2024 Nate Levine