Noah (angelbob) wrote,

Musings on teaching and learning...

I realized an interesting parallel recently. To explain it, I'll have to mention some stuff about teaching computer programming and how CMU does it.

CMU (Carnegie Mellon University), circa 1992, had some introductory programming courses that didn't teach much and didn't test much, but you'd do a bit of it. Then they had 15-211, which was very much the weed-out course and was referred to as such. It didn't require any intro classes as prerequisites, and they pretty much just handed you the book on the C programming language and an assignment and said, "you've got two weeks. Move it."

About a third of the class dropped out after the first project. Learning the language that quickly is hard. If you're missing the basic concepts of imperative programming you're just not going to be able to accomplish anything useful in two weeks. It wasn't a class that taught programming - it was a class that *tested* programming. You'd either figure it out or not. They only offered to judge whether you had. If you weren't in the "I get it" category, you should drop the class.

That's why I say things like, "we're at a completely barbaric level when it comes to teaching programming." The sink-or-swim method is how the *good* schools do it -- bad schools are even worse. It's also why, when people ask me about learning to program, I don't recommend college classes or any other kind of classes. Classes will not move you from the "can't program" camp to the "can program" camp. They will only grade you and light a fire under your ass to make the attempt. The actual "getting it" is entirely up to you. The biggest service CMU does you, other than being merciless, is providing a very *short* deadline so you really feel like you need to work.

I like CMU. I recommend them highly, at least for people who already know what they want to do. So if I can look at *that* and call it a good University, how can I bitch about local dance classes?

Because I don't call what CMU does teaching. I don't recommend it to beginners. I tell rank novices to do the same thing on their own -- find out if you've got the basic understanding for imperative programming *before* you study Comp Sci at a University. If you don't know it, they won't teach you. If you're stubborn then you should keep practicing on your own and maybe you'll get it. If you're not stubborn, you probably shouldn't put more effort into becoming a programmer.

In some of my old bitterness about learning dance (reference), apparently it sounded like I was accusing dance folk of being a secret cabal with some secret learning method they wouldn't share. Not what I meant at all, though I can see how somebody would get that impression. Here's what I complain about with dance classes: I don't know of a beginner class that will take you from "I don't know how to dance" to "I know how to dance". Here's what I say about CMU's computer programming classes: none of them will take you from "I don't know how to program" to "I know how to program". Here's the difference in my mind: I do *not* recommend CMU's computer programming curriculum to people who don't already know they want to program, and aren't already sure they can. If you want to program, I recommend you pick up a copy of K&R, read it, and go write a bunch of code. That's exactly what they used to do in 15-211 at CMU.

I will *only* recommend the CMU classes to somebody who needs a fire lit under their ass to get up and try. That is the big benefit they provide. If somebody asks for a class to learn *how* to program, I will say, "as far as I know, no such thing exists. I do know some halfway-decent books."

(Disclaimer: CMU's current approach isn't quite the same as this. I don't know if it's more effective or not. There's still large amounts of sink-or-swim philosophy in their teaching, but 15-211 isn't the completely abrupt transition it once was.)

(Second disclaimer: Computer Science classes can teach you technique and the specifics of a new computer language. Really good ones can teach you new *kinds* of computer language, though that's quite rare. I'm not saying the classes teach nothing. I'm saying they don't teach you to program if you don't already know.)

I run the risk of further offending people any time I touch this topic, so I'm gonna stop now. Enough damage for one day and all that.
  • Post a new comment


    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.