Monday, December 3, 2012

Is the Udacity CS101 course watered down?

April 21, 2016 note

This article was originally published on December 03. 2012. It's now more than 3 years later and this is one of the most popular articles on my blog, having accumulated more than 2000 pageviews, so I re-visited the article to see how it's holding up. Alas, the link (http://forums.udacity.com/questions/2025469/is-this-course-watered-down#cs101) to the original forum question in the opening paragraph no longer works as Udacity has re-done their forum. Worse still, far as I can tell, not all of the old forum Q&A items survived that re-do. I think I finally found a link that works. Sigh. And the forum re-do broke other links in this article too. I've done my best to replace them with updated links. If you find any problems with broken links or whatever be sure to leave a comment about the problem so I can do what I can to fix it.

I haven't retaken the CS101 course lately, but my understanding is that it now has some additional content and is now, nominally, a 3 month course. It is still self-paced and you can still take it for free, but they offer an option ("Udacity Connect") for $99/month to have face-to-face (Skype?) support, so you can personally ask questions, get human assessment of your work, have a sense of accountability for your progress. If you find you aren't as self-driven, self-motivated as you thought, perhaps that face-to-face option is worth $99/month to help keep you on track. It certainly is less than college tuition.

The original December 03, 2012 article, as amended

A Udacity CS101 student asked on the forum if the course is watered down compared to taking an introductory programming course from Prof. Evans on campus in Virginia. To see the original question, see: Is this course [CS101] watered down

Here is my reply to that question:

It's an 8-week course intended to fit into your life - that is, it isn't 8 weeks of intense focus every waking hour. It doesn't cover 100% of the Python language and Python environment, but it is not, IMHO, watered down. It covers what it intends to cover and does a good job of it. At the beginning of Unit 7, Dave gives a quick recap of what the course has covered. I won't rehash that here, but will try to describe from a different angle what you should get out of CS101:

  1. Python programming language. A start on programming, specifically in Python.
  2. Introduction to computer science. BNF, abstraction, recursion, iteration, even an introduction to performance analysis (e.g. linear run time, quadratic run time, ...)
  3. Research skills. Hone your use of Google or the search engine of your choice to find more information than the lectures have covered.
  4. Communication skills. The forum is an important part of the course. You should be asking and answering questions there. It should motivate you into working on those research skills mentioned as item 3.
  5. Time management. Much like getting through all the hoops to earn a college degree, getting a certificate of completion from CS101 shows that you've managed your time well enough to stay on track and keep moving forward for the 8 or so weeks. That's an important skill that will serve you well on the longer haul to a 4-year college degree.
  6. An idea of whether computer programming and computer science is a field that interests you enough to focus on it for years to come. If you hate it, you can always go in other directions (Hamburger U.?) and will only have sacrificed a fraction of 8 weeks of your time. I hope you find the course stimulating and enjoyable and that it leaves you hungry for more. I assure you there is no shortage of more.
Expanding a bit on items 3 & 4 from the above list:

One of the things you should master while you are in this course is how to dig up additional information from the web. This forum is one place to learn more than the lectures cover. In part, reading the forum helps. But to really get the most out of it, you should attempt to answer questions too. You don't need to know the answers off the top of your head. They may require some digging and testing. If you aren't really sure of the answer explain what you think and what you're still unsure of. Someone else might then be able to help you and the original poster too. One of the creators of the Stack Overflow web site (the software on which this forum apparently is founded) had a very good essay on his blog explaining the importance of communication skills in programming:

But what should you study next?:

Elsewhere in the CS101 forum is a discussion of what might come after CS101. This next write-up isn't in terms of actual Udacity course offerings, but more like wishing for what Udacity could offer in the future. You can read that here:

Let's make it happen - CS102. Or see my blog article of the same title: [Blogged edition] - Let's make it happen - CS102. Looking at the Udacity forum today [April 21, 2016], it appears that the CS102 discussion continued here: https://discussions.udacity.com/t/new-optional-mini-unit-released-unit-8/63518/22.

Also elsewhere in this forum is a really good list of additional sites to read. You can read the list here:

I haven't read everything on that list (yet), but I do particularly commend the Peter Norvig essay:

I've been programming now for approximately 40 years and I guess I'm a little slow as I'm still finding things to learn. In my humble opinion, the field's endless supply of new things to dig into is what has held my interest for so long.

I won't dwell here on enumerating things outside the scope of CS101. Some time ago, when "learn the Python language" was an entirely not-done thing on my to-do list, I wrote a blog entry that was nominally about 'literate programming', but spun off into cataloging the many things that I thought I'd have to learn to feel I'd become an expert Python programmer. The language itself is just one of those things. If you'd like to read my blog entry, see:

I confess that despite this being several years later, I still feel I have a lot more to learn (though I'm happy with my progress and delighted with the language as a tool for software development). I've created a Pearltree of links to more info about software development and a sub-tree there is specifically about Python, largely shaped by that catalog of topics from my old blog posting. Here's a URL for the Python Pearltree:

I'm still dabbling in Python, but starting to think the next thing I should tackle is the quite different programming language, Haskell. At this time, "learning Haskell" is in the entirely not-done category of my to-do list. Here's the essay that convinced me it was worth learning yet another programming language:

I hope my reply here has convinced you that CS101 is time well spent even though it is well short of finishing a degree in Computer Science. Even a degree in Computer Science is, at best, just a start at becoming a really Good programmer.

'It's not just a job, it's an adventure.'

Drew