(This is not a criticism of the authors of specific quotes I use, but rather
what I believe is a somewhat widely held opinion)

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

It seems to some degree that statements like 'but I know how a quicksort
works, and if I were writing in a different language I could write it
myself. Otherwise I don't know how to program.' Have become sufficiently
accepted to no longer need justification.

There are a few things which give me cause for concern:

A. This argument seems to reflect a form of dishonesty on the part of
computer science.

- If abstractions and implementation hiding worked properly, then you'd
never have to know how a sorting function worked, unless you needed to
implement one. How many people need to implement one?
Primarily (perhaps exclusively?), framework developers. So are we saying
that if you can't write a framework, you're not a programmer?

I don't know how many framework programmers there are outside academia, it
would be an interesting question to ask. I suspect very few. (I've now seen
several companies doing things that you would think might need a framework,
like high security embedded systems development. But they just used an
available one)

- The alternative view, is that abstractions don't work properly, and we
need to peer inside them every now and again to understand why something
isn't working, or something is going slowly, or indeed to achieve security.

I can remember the first time I looked inside something that implemented one
of the algorithms that I had to learn, 'to be a programmer', it was a very
unpleasant shock. I couldn't understand what on earth the code was doing.

The reason I suggest being that the internals of algorithm libraries are one
of the places, where companies can spend money to get high performance
implementations without making life very hard for their 'consumer
programmers'. Consequently they look nothing like the nice theoretical,
psudeo-mathematical descriptions. In my, somewhat limited, experience,
they're full of nasty sensitive threading models and scarey CPU + Compiler
optimizations.

So what are we teaching:

-> We're not teaching what's practically relevant. Very few people write
sorting algorithms. When people have to peer inside the abstractions, they
need a set of intellectual skills which I believ may be somewhat disjoint
for being able to create a simple linked list in C.

-> We're not teaching concentrating on theoretical value. The requirement to
make people 'implement them' means that they have to be able to express
something which is comparatively simple to describe in pseudo-code in a
somewhat tedious notation. This indeed seems to put many people off. During
my algorithms course, we were encouraged to implement the things that we
were being taught, I did for the first couple of times, but rapidly stopped
because the time to implement was so much higher than the time to
understand. 

Further, as suggested above, the theoretical knowledge is only weakly
transferable, I couldn't go and implement quicksort in any manner which
competed with a real implementation despite knowing what the algorithm is. 

If what we're doing is teaching a set of techniques for analysis of
algorithms, that's fine, but isn't that rather different to saying 'if you
can't write quicksort you're not a programmer?'? 

-------------

B. What are the side effects of mandating that people have to learn, and
implement things like quicksort? I believe the statement below precisely the
effect: 

'If students must do GUI programming or they will find programming 'boring'
- well, they should drop out now. More sensibly, they should not have been
enrolled to start with.'

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? 

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.

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?

Just some musings....

Luke


                
___________________________________________________________ 
Try the all-new Yahoo! Mail. "The New Version is radically easier to use" – The 
Wall Street Journal 
http://uk.docs.yahoo.com/nowyoucan.html
 
----------------------------------------------------------------------
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