Programming by Platonic Ideal

I am teaching a programming class on Data Structures: lists, arrays, trees, heaps, stacks, queues, and other fun things. This is my first time teaching at this particular university, and I’ve had to successively ratchet down my expectations of the students as it became clear that their preparation was not, well, adequate for the topics this course covers. Or rather, they do well catching on to the concepts, but struggle mightily when it comes to implementing them in code. I’ve been somewhat puzzled by this, since even students who have the prerequisite course under their belts seem to be having trouble.

Today, I got my first glimpse into why.

I scheduled a brief post-midterm conference with each student, to give them feedback on their current progress and to answer privately any concerns they might have about the course. One student today launched into a description of what that prerequisite course was like.

“I don’t want to say anything bad about the professor, but I don’t think I learned much. He just showed PowerPoint slides, and never ran any of the code, and we never had to write any code. He said it was more important to know the concepts, and he didn’t want us to write code because then we might get too used to the syntax of one language. You know, each language is different.”

I was flabbergasted, but tried to hide it. Sure, programming languages differ. And it’s great to get to a point where you have a solid grasp of the abstract ideal of an iterative loop, or a recursive method, or, heck, a list or an array or a tree or… all the stuff we’re covering–without being tied to one language’s syntax. But it’s staggeringly unfair to expect a student to get to that point without having worked in any languages at all.

It’s possible that this student’s view of his professor’s pedagogical opinions has been filtered or changed from what the professor actually intended; we don’t always communicate effectively. But the sad fact is that many of these students lack basic programming skills in the language in which these courses are taught, and that leaves them handicapped when facing all of the rest of the courses in the department. I can hope that they’ve gained some skill from the battery of assignments I’ve given them (and knowing what I know now, if I started the course over, I’d reduce the volume of that battery significantly), but any skills have been gained at quite a cost. I continue to be impressed at the amazing amount of energy and hours these students invest to keep up with what I give them.

Interestingly enough, six students (one from my current class) have already signed up for the class I will teach starting in January (Machine Learning!). You’d think they’d be sick of me by now. :)

5 Comments
3 of 3 people learned something from this entry.

  1. jim said,

    November 1, 2007 at 11:39 pm

    (Learned something new!)

    The documentation intern we had over the summer exhibited near-continuous difficulty in applying the concepts she learned in school to the practicalities of the workplace. The most egregious was not using a spelling checker, causing her to incur the wrath of our resident Apostrophe Nazi. We gave soon gave up hope of her being productive, relegating her to her rote tasks to bide time until she went back to school in September to work on her graduate degree…. in “technical communication.”

    This is indirect way of saying I hope your students truly appreciate the effort you’re making to right the wrong from their previous instructors. Though it’s more effort now, it will reap dividends later.

  2. stough said,

    November 2, 2007 at 4:52 pm

    (Learned something new!)

    Wow, programming without the programming. This must be the “New Math” approach. Well, the students are safe from being biased by the syntax. Heck, they’re are safe from really knowing any syntax. People learn by repetition and the compiler is really good at reinforcing syntax. If you don’t ever learn how to apply one syntax and work though syntax errors and such, you’ll never be comfortable writing real code.

    While I think that there is a large “Platonic Ideal” portion of programming knowledge, I’m pretty certain that you need to master at least one syntax before you go about learning others. You can’t claim to know how to program if you can’t do it competently in any language.

    Good job beating these few souls into shape. If they ever use their skills, they’ll thank you for it. In one intro programming class I taught, we commonly had students come back after internships and tell us that the skills we taught served them well. That is a great feeling!

    Cheers.

  3. LearningNerd said,

    November 3, 2007 at 7:47 am

    (Learned something new!)

    Hey, you’re teaching a class! That sounds like fun. Do you ever learn from your students, like that saying goes? (Actually, I’m not sure it’s a saying. I just hear teachers say it a lot.)

    Unfortunately, I’m not surprised about that professor. Way too many classes focus on just those “important concepts” and don’t show anything practical. =/ I commend you for aiming to fix that. Teach that professor a thing or two!

  4. Kiri said,

    November 3, 2007 at 9:02 am

    Oh, undoubtedly I have been learning from my students. I think that must happen whenever you’re forced to see something through someone else’s eyes, as revealed through questions or comments (or even mistakes) that the students make. It’s fascinating. And I learn a lot just through the act of teaching, in which I have to organize my thoughts on a subject to present it in a lecture. The subject matter gets turned over and over each time I re-explain it, and sometimes I see new aspects I otherwise wouldn’t have considered.

  5. Russ Abbott said,

    January 4, 2008 at 3:31 pm

    I hope I didn’t learn something — which would have been that our instructors don’t assign programming homework in our programming courses. It’s possible, though. We used to have one like that.

    Have you talked to Raj about that instructor? If you haven’t, please do.

    Good luck with CS 461. I love that material, although I find it hard to teach. The most interesting stuff (from my perspective) is the most philosophical. Attempting to teach it just doesn’t work. So in the past I’ve focussed on agent-based modeling and genetic algorithms. Here’s my two page very condensed version of some of the philosophical stuff. “Bits don’t have error bars.”

Post a Comment

I knew this already. I learned something new!