I’m taking CS50x through edX this year, along with some local ladies. My goal for myself is to get through the projects a little faster than one per month (yes, they’re called “weeks” in the courseware, but there are 12 of them, with everything due on December 31), 1) so I’m not scrambling in December, and 2) so I can actually help, in the unlikely case that anyone in the local cohort needs it. (Both people I’m meeting up with are smart cookies! But this stuff is hard when it’s new, so I want to be ready, just in case.)
Anyway, aside from the refresher on some basic CS concepts (mostly, I’m in this for the data structures refresher and the added muscle memory/confidence from writing a bunch of small programs and one big one in a few different languages), I’m also taking this to see what modern CS education looks like and for ideas/methodologies that might enhance my teaching for Anchorage Programming Workshop and any library technology classes I take on. I’ve liked many aspects of the class so far, but found a couple of others mildly troubling. That said, overall, there’s far more good than bad, as you’ll see.
I love that this course starts with Scratch! It’s a programming language done entirely visually, with logical blocks you can drag around, to control “sprites” on a screen. It’s genius, because students have the chance to learn programming concepts—and build something!—without really having to learn syntax, yet. It’s very empowering. If you haven’t tried Scratch, you can play with a simplified version of it in the Hour of Code, or just go try the full thing. (They have some tutorials.) I made Pong in a couple of hours. (After spending some time really acquainting myself with how Scratch works. Pong wasn’t my first project, just my first that I wanted to finish and turn in. ;))
I also love how unintimidating they try to make this course—which is a major hurdle for any CS class! The pre-course intro video and first session spend a fair bit of time making sure students realize that most of the class has no CS background. Because these are recorded on-campus lectures, the professor emphasizes Harvard’s option for students who want to take a class without getting a grade (kind of like pass/fail), in case some of the students want to try it but are worried about their GPAs. Another perk for Harvard students is that they are broken out into sections based on their comfort level/previous experience, and I believe the grading curves are also separate? And, finally, in the second week, as the course moves into syntax (for C, in this case), the professor works hard to be reassuring, explaining how various C statements “look nonsensical at first” (close paraphrase) and comparing them to their Scratch equivalents. That makes it all feel very approachable.
The professor, David Malan, is very energetic and engaging, which I found uncommon in my CS classes, back in the day; maybe it’s more the norm now? I was amused that he included an intro sequence with a muppet rushing around Harvard’s campus, for the first lecture. I also like that he regularly invites students on stage to help with demonstrations—and those students look typical for Harvard and the population at large, rather than the standard CS stereotypes. He also shows previous students’ work (with permission, I’m sure), in a way that I think is more inspiring than intimidating. (I’d be interested to know how students newer to programming feel about that.)
I think it’s fascinating that this course has so much infrastructure around it. The videos all have transcriptions (which you can use to sync to a specific part of the video); there is a hackathon for on-campus students; there’s hardware (like Google Glass) for the on-campus students to borrow for final projects; there are the smaller breakout sections I mentioned before, for on-campus students; there are lunches and office hours at various cafeterias/dorms(?); and they’ve built a whole slew of sub-pages, in several different languages, for all sorts of little pieces of the class. For those of us taking it online, there’s a Facebook group, a Twitter hashtag, a sub-Reddit, and probably some standard discussion boards; and I know Malan follows them, at least sporadically. (I stick to FB & Twitter, myself, also sporadically.) And—this is really interesting—there’s an “appliance” for the class. It’s a virtual machine running Linux, with a development environment on it. It has at least one custom C library, which I’ll talk about more in a moment.
The demonstrations have been very good—lamps turned on and off to explain bits, a milk crate with paper dropped into it to represent functions with inputs (and a TA hidden under a table, making things appear on a SmartBoard behind him, to represent the functions’ outputs). Clearly, a lot of thought has gone into how to make these concepts understandable, and I often find myself really impressed by Malan’s approach to teaching.
The appliance and the custom C library: I’m a little torn on this. One of my complaints about my undergraduate education is that I only learned to compile C++ in Visual Studio. For years, I felt like not understanding how to do it on the command line was a failure, and I was therefore a crappy programmer. (Yes, yes, impostor syndrome and stuff, I know.) Now, they teach command-line compilation as part of using this appliance, so that’s more or less taken care of (although I find some of the generated errors suspiciously helpful); but I also am torn on whether or not teaching students in custom libraries is good practice or not. It’s a really nice abstraction, this early on, to be able to call GetString() or GetInt() and have it take a string or an integer from the console. But it means some basic and important stuff one needs, to be a C programmer out in the world, is missing. Now, the implication has been made that we might lose this crutch later in the semester, so I reserve judgment. And even if not, this is a 101-level class; abstracting away some hard/annoying stuff isn’t a bad idea. I mean, I’m on record as saying everyone’s first language (besides Scratch, I now add) should probably be Python, or something with an equivalent level of friendliness/abstraction; so it’s probably a little hypocritical of me to worry about this custom library. Probably, this is a very good call, on the part of the course staff.
And I suppose no matter what development environment you learn in, you’ll probably have to learn other ones on your own. So I think I’m fine with that aspect of the appliance, too.
I also think this might be a strength, but I would also be interested to know whether it’s helpful for a teacher to repeatedly make [deliberate] newbie mistakes, to remind students what those look like. I think doing it once, so they have a sense of familiarity with the errors, is (or should be) a given. But I wonder if most students found it more distracting or more helpful to see him “forget” to run make on his files a few times. I honestly don’t know, one way or the other, but it’s something I want to think about. (I found it distracting, but would I have, if I were newer?)
This is going to read like little stupid stuff, especially to anyone who looks like a typical programmer, but I ask you to bear with me. (What do I mean by that? Philip Guo will fill you in, from the perspective of someone who does look “typical” for programming.) I do not look like a typical programmer, and I spend a lot of time thinking about (and working on) increasing women’s and minorities’ participation in tech. So these things stick out to me like a sore thumb—to the point that I can’t understand how they slipped by.
First, the name of the default user on the appliance is “John Harvard,” and students are exhorted not to change it, unless they feel they absolutely must. This is going to—forgive the language—piss me off every single time I fire up the machine. It’s so unnecessary. Just make it “J. Harvard” or “J Harvard” or “Jo Harvard” or, hell, let’s get out of the J’s and go with “Sydney Harvard” or any one of the many gender-neutral names available. Why make female students feel more like they don’t belong? (If you doubt that that’s a problem, here’s some reading. It might be faster and more effective to read Unlocking the Clubhouse than all those papers, though.) How on earth did it not occur to anyone that it’s cruel to remind us, every single time we sit down to do an assignment, that women are a minority in CS? I mean, I realize that’s not the intent; they were trying to be cute, naming it after the founder of the school. But I posit that it’s offensive and alienating and should really be reconsidered.
Similarly—and maybe this is nitpicking—there was a video in the second week of class, about the Mark 1. The video was a product of its time, showing a bunch of men running it. (I mean, it was a Navy thing, so, fine. No big deal; don’t scrap the video, because it’s cool. However…) It would have taken ten seconds out of the hour long class to mention that not everyone who worked on it was male, or at least, when Malan mentioned the word “bug” and its origin (with a picture of the Mark II bug), add that Mark 1′s co-creator, a woman, popularized the term. But, no, the [admittedly] subtle reminder that computing was once a man’s field and is still wildly gender disparate happened, without comment. (Yes, I know that photo is UNIVAC, not Mark 1, but I really like it.)
(I should say, the head TF is female, so that’s something. But all the others are male. We had a better ratio than that in my CS 101 class, 14 years ago.)
Like I said, I think those two complaints might not read as important, but for a class to have gone to such great lengths to be welcoming and inclusive, but to drop the ball on such easy and obvious stuff, was surprising to me. (And upsetting, clearly.)
I’m working on problem set 1 (like any good CS class, they start their count at “0″ instead of “1″), and I think it’s a reasonable second assignment. Hopefully, after a couple more “weeks,” I’ll have more observations/commentary on the class. Look for that in March or April, probably, unless my local cohort has a lot to say.