It’s been a couple of weeks since my first post about the Udacity CS101 course, so here’s an update. Before that, let me mention this nice article in Wired about Udacity and its origins. That article sheds a little light on the questions I had earlier about Udacity’s business model.
So, Units 3 and 4 are now done with the CS101 course. The focus of Unit 3 was mostly on the concept of the list in Python, along with FOR loops and an emphasis on computer memory. Unit 4 was a bit of a left turn into a discussion of computer networks, with an emphasis on the basics of the Internet and the concepts of latency and bandwidth. So, just from this description, you can see one of the things I particularly like about CS101: It’s not just about Python. This is a class that is actually about computer science in general with Python as a tool for understanding it. Maybe that’s one of the reasons I find it easy to stick with CS101 when I’ve always ended up dropping previous attempts to learn Python. Context is a really good motivator. (The current Unit 5 is continuing this holistic trend by delving into algorithm analysis, which happens to be the same thing I’m teaching in my Discrete Structures class now.)
Unit 3 was rough. There were over 40 videos to watch, and two of the homework assignments that had to do with refining the fledgling web crawler program we are writing were just completely over my head. I also realized that I fall into the same trap as my students do: I procrastinate rather than budget my time. What I should have done was sit down for the first two evenings after the unit was released and plow through 20 videos at a time, then spend the remaining 5 days working on 1-2 homework problems a night. What I did was wait until 3 days before the homework was due to start on the videos. The good news is that I got 100% on all the homework I submitted. The bad news is that I only attempts 3/4 of the problems. So it was rough primarily because it reminds me that I’m just like any other student in terms of my tendency not to use time wisely. I’m hoping that can be converted into something positive.
Unit 4 was better. It was shorter, for one thing, and the material was new and interesting for me. “Learn more about computer networks” has been on my Someday/Maybe list for I don’t know how long, and I have finally actually learned more about them. The discussion of data structures was useful too, because I’m learning Python partially to write some software to help study columnar transposition ciphers, and the question of what’s the right data structure in Python to represent permutations of finite sets has come up with me before. As I mentioned before, having a specific project in mind when you learn something is a powerful way to stay engaged when learning it.
I’m slowly starting not to suck as a programmer, I think. I’m still a newbie, and my Discrete Structures students would probably crack up laughing at my attempts at coding. But when we had to write a program in Unit 3 to check the validity of a Sudoku problem -- a “three gold star” problem, meaning extra-high difficulty level -- and I managed to put together a procedure that works and does so in a nice, clean, organized way, I began to feel that this whole Udacity idea is actually working.
Image: http://www.flickr.com/photos/marcoro/