It’s been a while since I’ve posted on this site, partly because I have been travelling, and partly because I have been focused on finishing up the last assignments for Stanford’s CS 106A— and I am finally done!!! Can’t begin to describe how great of a relief it has been; I am a bit amazed that I motivated myself through all of the assignments. Given that every assignment took up close to 10 hours, it was always a life-sucking black hole whenever I embark on one. With that behind me, I think it’s a good time to reflect on the course itself and the little more that I have learned about learning to code.
An uniform language of instruction — Java vs. Python vs. multi-languages
When I first decided to take the course, Java as the instruction language was actually one of the minor turn-off’s. With the (questionable) exception of Android development, Java really seems rather outdated and unnecessarily complex for today’s web-dominated development needs. I am obviously pretty naive on that front– but I had just learned a bit of Python and really wanted to cruise along their forgiving syntaxes.
I am rather grateful now though that I was forced to learn (a sheltered version– see the next point) of Java. It exposed me to some of the rigor and basic concepts about programming that I think would be hard for me to pick up in an even higher-level/more dynamic language. Either way, thanks to it I definitely, at the very least, feel a little less intimidated by curly braces.
This may seem like a given, but I think it’s imperative that an introductory course sticks with one language throughout. Even Karel the Robot was essentially in Java. It’s all about that tipping point of getting familiar and comfortable and feeling like you know the language well enough to create something. Some courses, like Harvard’s CS50, seem to take the multi-language route (and teach PHP! yuck). I have never experienced this first hand but I am not sure how effective this would be. However, that said, I am a strong believer in the benefit of learning several languages throughout your programming career.
Use of ACM libraries, “covering up the hood” vs. building something interesting
I think the best thing about CS 106A is that it gets you to build some pretty interesting things very quickly– making your pursuit feel pseudo substantial/meaningful. All of this, though, is only made possible by the crutches provided by the ACM libraries. I didn’t quite grasp this till lecture 26 (out of a total of 28) when they “lifted up the hood” for us– and i remember feeling a slight sense of disappointment like a kid realizing I had been riding my bike on training wheels. The principles that were taught and practiced were nevertheless transferrable— you just have to be prepared to deal with more icky syntaxes for the real world. You do feel slightly duped afterwards, but it’s worth it to get you fired up over awesome exercises like Breakout and Hangman. I would say that feeling of accomplishment is critical to a programming novice to keep them going.
Emphasis on methodology
The course was all about doing and not so much about complicated principles and terminologies, which I do think is the way that it should be. The only problem is sometimes you don’t quite realize the ‘scientific’ terms of what you are learning until much later when they are referenced casually– it is never explicitly taught as an example of so and so (well, I guess a little bit, depending on how closely you pay attention to the professor). Personally I think this is great and that much of teaching programming in its early stages should be about doing and doing and doing and doing. You somehow reach your own tipping point only through the countless failed experimentations. In that vein, it’s much more important to have interesting exercises designed to hook you in than tons of jargon thrown at you.
As a sidenote, this works for CS106A because the next course in their sequence is supposed to emphasize more on these icky (just joking) technical parts. It’s really interesting to see how each college chooses to sequence and design their CS courses. You see what each college chooses to emphasize in and how they try to gradually piece together the whole picture regardless– you also see a lot of the college’s philosophy in what they believe to be 1) important to learn 2) critical to keep people coming back to programming in what they choose to put in their intro CS class. In Stanford, it is definitely emphasized on building something, and giving you a taste of the creative possibilities through your own practice.
Quality of video
By far the number 1 complaint on the videos in ITunes U is the quality. In a way, I love that it’s so low-budget– kind of makes it feel intimate and very spontaneous, as if you are part of the classroom experience– nothing pretentious. I like that it is shot in actual classroom settings rather than the “one-on-one” context like Udacity and Coursera. However, that said! The quality really does suck unbelievably sometimes. The only time that matters is when you can’t even clearly decipher what the code is on the video. That is a bit unforgivable (especially when it’s not on a corresponding handout to be downloaded!). But other than that, I infinitely prefer the pseudo classroom experience to the 1-1 guy talking @ me.
* * *
I have started CS 106B a couple of days ago– so far it’s a bit hard going for me (learning about containers in C++ puts me to sleep without fail), especially since I still need to figure out how to get XCode since I don’t have an upgraded OS X. But we will see how it goes! I am still a pretty excited dork.