There are so many great options for self learning now. Most of them are either free or very affordable, (especially compared to taking a university course). I hadn’t written a single line of code in my career, so I approached this from the perspective of a total noob. Over the past year, I went through 300+ hours of Python instruction (and practice) for less than $200.

Below, I’ve listed the courses I took in the approximate order that I went through them, along with time spent on each course. This is by no means a comprehensive review, but I figured somebody wanting to get started in Python might be interested in my thoughts on each one.

Codecademy

This was a very gentle introduction into Python. No additional software or setup required on my laptop. Just log in, and start following the walk-throughs. Its focus is to get you comfortable with syntax. I liked that I could work in bite sized pieces. Even if I just had 5-10 minutes to spare, I could log in and complete one or two exercises. Codecademy won’t teach you to be a programmer, but it gave me the confidence to start. The learning curve is really gradual, and motivated me to go out and find additional resources to keep learning. While it was good to start with this, I got bored quickly with the format and moved on.

Time Spent: 10 Hours

Learn Python the Hard Way (Book)

Technically not a MOOC, but an ebook I followed in parallel with Codecademy. There’s very little coding required, but you do have to type of a lot of code. Does that make sense? The author explains a concept in each lesson, then provides example code which you need to retype (not copy and paste) into your own text editor and run. Then there are some study drills to get you thinking about the concepts, along with some typical student Q&A for that chapter. I liked this book a lot. The author explains things in a very practical manner. He really oversimplifies concepts, and has you focus on the key ideas, rather than get lost in the technical details. The focus is less on memorizing syntax, and more on the broader picture of programming with Python.

Time Spent: 20 Hours

Udacity

I took 3 separate Python Intro classes on Udacity: Intro to Computer Science, Intro to Python Programming, and Programming Foundations with Python. The most comprehensive by far was the Intro to Computer Science. I really like this class because it sets a good foundation in Computer Science. This is a CS class, that uses Python, rather than just a Python class. It was fun to relearn about CS concepts that I had forgotten (or blocked from my memory) from 20 years ago. This was the most challenging course that I had taken so far. I struggled with some of the later problem sets, but that’s how you learn right? The other two courses were more supplemental, and focused on Python. Not much to say about those… they were short and sweet.

Time Spent: 40 Hours

Treehouse

The Python track at Treehouse is very comprehensive. The videos are very well made. At this point, a lot of the topics were review for me, but Treehouse gets into Python details that just weren’t covered in the previous courses (PEP8, Dates and Times, Regex, etc…). The exercises were more challenging, as they don’t hold your hand and walk you through everything. I remember having to look on the forums, and search google / stack overflow for advice (especially the object oriented programming problems). I got about 80% of the way through, and stopped so I could take the MIT 600.1 course.

Time Spent: 30 Hours

Udemy

So many options to choose from on Udemy. I browsed through a few, but ultimately selected ‘The Modern Python 3 Bootcamp’ by Colt Steele. In my opinion this is probably the best Python intro course on Udemy. Colt walks through each concept in a very clear manner that’s easy to digest. I found his videos and explanations better than Treehouse. However, this might be due to the fact that I had already gone through Treehouse. Second time around is always easier right? Unfortunately, the class is not as interactive as Udacity or Treehouse. I mainly used this course to reinforce some of the more challenging topics, like list comprehensions, and object oriented programming. I didn’t watch the videos on more basic topics.

Time Spent: 5 Hours

MIT 600.1 - Intro to Comp Sci Programming Using Python

Wow. This is the big one. There’s a reason this course makes the list of top Python MOOC’s on so many websites. The level of instruction is world class, probably the highest quality content of any CS course I’ve taken (this includes college). The professor walks through slides, along with some programming examples. These are followed by short exercises to help solidify the most recent topics, then a weekly problem set. The problem sets are where the course really shines. The material is challenging. Just beyond my comfort level in a way that makes for a very effective learning experience. There is also a discussion forum for each exercise and problem. I would not have been able to finish the course if not for these discussion forums. If I had to pick one course to take, this would be it. Concepts like object oriented programming were still fuzzy to me when I started. By the end of this course, I was able to easily write object oriented python code that is 100-200 lines long. It also sets a foundation to learn more complex concepts (like algorithmic efficiency), and the ability to learn and leverage 3rd party libraries. I got the most out of this course, but I also put in more time here compared to the other courses. The only downside I found was that the Python used in the course does not follow PEP8 standards. Not really an issue, but could be distracting at times.

Time Spent: 80 Hours

MIT 600.2 - Intro to Computational Thinking & Data Science

This is the follow on class to MIT 600.1. Equally as challenging, but in a different way. I felt much more comfortable with the programming, but this class threw in additional challenges by introducing algorithms and data science. Overall, it was harder than 600.1, primarily because I don’t have much of a math and science background. At one point, I had to take a break, and spend a week off reviewing Descriptive and Inferential Statistics on Khan Academy and Udacity. As expected, the instruction format and quality was equal to that of 600.1.

Time Spent: 60 Hours

Datacamp

I was drawn to Datacamp by its large library of data science related topics. I spent some time on the statistics lessons, along with some financial analysis lessons (all using Python). I didn’t really like the learning experience. A bit too Codecademy-ish, albeit with video lectures and longer exercises. I found myself being walked through the lessons, only to forget what I did in the previous sections. I think this was due to everything being in small bites, it was difficult to maintain continuity.

Time Spent: 10 Hours

Dataquest

I tried the Data Scientist with Python track. This was very similar to Datacamp in terms of offerings and style. Although I didn’t have as many of the ‘forgetting what I did in previous steps’ issues as I did in Datacamp. I think both Dataquest and Datacamp have the same problem. If you are somewhat familiar with the concepts, then it’s too easy because there are no big problems sets or projects. But if you are totally new to the content, then it’s a little too hard to follow because of the continuity issue. The learning approach didn’t really fit what I was looking for.

Time Spent: 20 Hours

Conclusion

In writing this post, I realized that I have spent the last year basically learning the same concepts over and over again. It sounds kind of silly. Why would I need to keep learning the same thing so many times? Of course this is from the perspective of somebody who has spent over 300 hours building the pathways in my brain through the learning process. I have to think back to when I first started and how insurmountable it felt. I’m nowhere near as proficient as a professional developer. It’s not like I would go get a job doing this. But at least I have the foundational tools to get me to the next level. I have to remember this mindset, and carry it forward when I tackle deep learning and the math associated with learning AI!