A couple of months ago, I’ve wrote about how impressed I was with Harvard University’s OpenCourseWare, namely the Computer Science 50 online materials. Back then I had just started watching a few videos of the lectures; now I feel as if I just completed the course — which I could, since you can be graded for a (expensive) fee. I watched the lectures (fastforwarding through the web programming and the silly parts) and completed almost all problem sets (again, skipping the PHP exercises): during the last couple of months, as per the exercises’ specifications, I wrote simple games such as a Sudoku with a rudimentary text-based UI, manipulated the raw data of BMP images, extracted JPEGs off a ‘formatted’ memory card, and implemented a command line spell-checker using some byzantine (at least for a newbie) data structures. All in good, old-fashioned C.
There’s something in the concept of video lectures that addresses both my instinct for self-learning and the inevitable need for some sort of formal training in technical subjects. Programming-wise, my learning process has been quite a mess, and my only formal training on the subject was a quick course in Visual Basic back in 1999, and a Web Technologies course during my Master’s, which may have filled some gaps in my knowledge of stuff such as HTML, PHP or SQL, but in the end didn’t add much to subjects I have been learning on my own since years earlier. Perhaps I could have dived into something more genuinely ‘computer-sciencey’ such as C as well, but these were matters I always found too arcane when read about. On top of that, I’d hear people referring to C++, perhaps because of its weird name (we all obvously missing the joke), as the ultimate in unnatainable programming-fu (which it is definitely not — unnatainable or ultimate in any way), and as my life took me to other places I just lost interest in learning more programming.
Slowly I came around as my plunge into web programming brought a few nagging questions I felt related to a lack of some basic insights. And in that process I noticed that indeed there are some matters that seem much easier and attainable if you listen to a verbal explanation instead of just reading a manual; and that is why I found video lectures the perfect balance between formal training (without the formalities of schedules or not wearing pajamas to class, etc) and self-teaching (without the dryness and the sudden inferences of readers’ knowledge found in most programming books*). And two particular insights are worth mentioning:
Firstly, C isn’t complicated: what it is is really basic, in a way that forces you to write everything. After learning about memory management in C, never again will I mumble when PHP forces me to type array(…) to get a hashtable — other languages may have prettier syntax, but I take PHP’s gladly over implementing the hashtable myself. Anyway, now I feel I able to take on learning any new language with more confidence. Perhaps I’ll have a go at some LISP, through the Abelson and Sussman MIT lectures. Or perhaps I’ll try the printed page again and Seven Languages in Seven Weeks.
Second, I found new respect for the command line. Like many who endured the MS-DOS prompt in order to get the right memory settings to play Dune II, I had a deep-set dislike of command line interfaces. But while learning C I started to get the Unix command line a lot better, moving a bit beyond a handful of often used commands or the incantations copied and pasted from help forums. Being used to the Windows desktop for my work, a decent Unix-like CLI like Cygwin quickly became an important part of it. I’m too old and wary of fetishism to engage in the h4x0r pretense command lines are the Only True Way, or to believe ordinary computer users are somehow ‘lusers’ **. I say go for what you need to do, and go for you want to do, the most confortable way. I found the CLI indeed more confortable for many tasks.
At the moment, I actually don’t intend to do much with my new knowledge in C. I might cross the short bridge into C++ in order to do stuff with OpenFrameworks, but don’t feel compelled just now. I wasn’t, after all, specifically motivated to learn C. What I wanted was to know more, and I got it.
* Which is why I found Daniel Schiffman’s Learning Processing such an incredibly refreshing exception.
** Something must be said of some communities’ pathological need to generate unintuitive jargon and drive towards user-unfriendliness (and quite often despite pleasing-looking websites). Look at the Unix man(ual) pages for (some) contrast, or PHP’s thorough and easy to read documentation, which I believe to be the reason for the runaway success of a language often derided as a ‘verbose monstruosity’.
I’ve been ‘attending’ Harvard University’s free online Computer Science class, and I wholeheartedly recommend it. I hope to plug some holes in my CS understanding, left from sometimes inadequate self-teaching and an academic background too focused on the end-user understanding of computers. Having had almost no direct contact with a foreign academic systems (except for a couple of University of Texas workshops and seminars held here in Porto), let alone Ivy League, here are some remarks after ‘attending’ the first couple of weeks (meaning watching four videotaped lectures and doing a couple of ‘problem sets’):
- Organization: it’s mentioned 700 people are taking the CS class in-site, but I have no idea how many more are taking it online (for a [obviously high] fee you can actually get graded). Dozens of staff provide service to just that one class. Plus all the extra seminars people can attend (or freely download videos of), such as A Crash Course in Java or Using the Vim Text Editor. Comparison to my own experience as academic instructor — all alone with sixty students in a small room — is headspinning.
- Dress-code: the utter lack thereof. Students come on stage wearing shots and flip-flops, exactly the kind of clothing items a high-profile portuguese university attempted to ban while soliciting students to denounce colleagues. Only shows that what University should be all about is knowledge, ideas, and creativity; not suits. Rigorous dress-codes send the very wrong idea presentation is more important (I haven’t seen any portuguese college soliciting students to rat out plagiarists — which would still be wrong). Presentation has a certain amount of importance, of course, (I often find myself wearing a polo shirt just to look a bit different from most students — ‘more teacherly’, if you will), but very tiny indeed — if it’s hot outside, by all means skip the socks.
- Colloquialisms and rhythm: the instructors’ speech is very free-flowing, sometimes even low-level curse words pass by. But that doesn’t mean the teaching is by any means dumbed-down, by the contrary, the rhythm at which new information is passed on to the students is much more unrelentless than anything in my own academic experience.
- Notes: the lectures’ notes are provided to the students so they don’t spend their time writing down stuff instead of paying attention. In my teaching, I’ve often interrputed students writing down stuff I say, an habit so embedded in some students they often don’t even look to something I’m showing. I always give out some links that I hope work as notes, but perhaps I should systematize this.
- Giving (Free / open-source) software in a virtual appliance, such as a VirtualBox VM: what a great idea! Not really practical in my video editing classes, but a good way to ensure students do their exercises in the ‘same’ computer in Multimedia Lab, for instance (of which usage of some open-source tools is part of the syllabus).
So yeah, I’m enjoying it.