On 16/01/2008, at 2:30 AM, Luke Church wrote:

There is an interesting question here, which is why do we teach students how
to write linked-lists, stacks etc anyway?

I can think of two good reasons.

Firstly, if we want our students to get good at programming, they're going to need practice. Implementing these data structures is one way to practice. It also gives you an opportunity to discuss abstract data types, code reusability, encapsulation and abstraction, and so forth. As such, it's not a bad exercise for training programmers. I'm not claiming that it's the *best* exercise, but if done properly it can certainly provide opportunities for teachable moments.

Secondly, if we are teaching Computer Science as opposed to training programmers, then our students actually need to come out understanding about space and time complexity. That's going to require at least some understanding of what's going on down in the guts. (Knuth makes this point in TAoCP. It's the reason he gives his algorithms in a pseudo-assembler.)

I think that a lot of the arguments I read on PPIG stem from nomenclature: many institutions have only one IT-related course, and it often seems to be called "Computer Science" but serving the needs of vocational training. Most of your remarks are spot-on if one is only considering the student who's only after a programming job with perhaps a transition into management down the track. It seems a misnomer to me to call such a course "Computer Science".

I have to say here that although I'm speaking from the CS side of the fence, I'm not knocking vocational programming. It's an academic specialty in its own right, with a different skillset to CS. Besides, we need a heck of a lot more programmers than computer scientists.


People who are not interested in programming for its' own sake drop out and
do something else. This is something of a tragedy is it not?

I don't think so. Why sign up to spend the next forty years doing something that does not interest you? A student who detests programming per se but is interested in using computers or working elsewhere in IT has plenty of other options. He or she should probably not sign up for a vocational programming course, and is unlikely to enjoy computer science as very few degree programs adopt a purely theoretical approach, but might well enjoy a course in IT Management or Information Systems. IT is a broad church.

It is true, though, that course advice for incoming first years is generally pretty dreadful. Many of the students in my first-year Computer Science classes don't seem to know what to expect.


So as a collective, we're simultaneously arguing that people should be
taught to think computationally, and also, that if they aren't interested in
the computer for its own sake, well then, they should go away.

People *should* be taught to think computationally ("algorithmically", perhaps). Current computer literacy classes are inadequate in that way, since they seem to concentrate on negotiating a UI. The take-home message for computer literacy ought to be, "the damn things do exactly as they're told, whether it's what you want them to or not -- and it's mostly the programmers doing the telling". I don't think it's necessary to teach industry-grade programming in order to get that message across. People who don't want to learn to program really *shouldn't* have to.


Perhaps we should teach programming as a tool, and mathematical theory as
mathematical theory and acknowledge that they're really increasingly
separate disciplines? Perhaps we might allow people to choose?

Precisely. But I think what you call "mathematical theory" might be what I call "computer science".



----------------------------------------------------------------------
PPIG Discuss List (discuss@ppig.org)
Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss
Announce admin: http://limitlessmail.net/mailman/listinfo/announce
PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/

Reply via email to