On Tue, 2008-01-15 at 13:45 +0000, Walter Milner wrote:
> Here are a few assertions, all with no evidence

> 6. References are bizarre vaque wooly mysteries unless you know what
> pointers are. The idea of having no exposed pointers  is good, since it
> means programmers cannot write this common type of bug. But that does
> not mean that we should 'not tell the children' that pointers exist, and
> expose them to doing a little pointer arithmetic so they have some
> experience to hang their understanding on.

I think this assertion is fundamentally false.  It is perfectly sensible
to discuss Java references without having to understand C/C++ pointers.
The only problem is trying to explain the label of NullPointerException.

> 7. 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.

GUI programming is a huge motivator.  It is down to curriculum and
pedagogy to harness that motivation and make sure that other material is
covered properly.

> 8. " Java, instead of exposing this beauty, encourages the programmer to
> approach problem-solving like a plumber in a hardware store: by
> rummaging through a multitude of drawers (i.e. packages) we will end up
> finding some gadget (i.e. class) that does roughly what we want. ".
> Well, its not very sensible for busy plumbers to make their own pipes
> and taps and washers and things from scratch every time. But a student
> plumber needs to understand what these gadgets are, what they do, and
> how they were made, and learn how to make them if the need arises. Eg
> when I'm programming in C I'd use the qsort() library routine - 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.

How many plumbers can make pipes.  How many plumbers can make blow
torches.  How many plumbers can make the paper on which the hyper
inflated invoices are written.  How many of them even understand the
first thing about how any of them are made.  Of course the analogy is
poor since programming is not a craft or trade per se.  Nor is it
engineering per se.  It is something like graphic design mixed with
potting and structural engineering.

This is again an issue of curriculum and pedagogy, and making it
appropriate for the audience.  The bottom up approach to programming
techniques founded in a coverage of history just doesn't cut it any
more.  Sorting algorithms is a third year topic where the algorithmic
complexity and language feature complexity can be handled properly.  I
agree that all CS graduates should understand linked lists.  They should
also understand chained hash tables, red-black trees, etc., but not in a
first programming course.  If computing and programming is really about
abstraction and using the right tool for the job then it is crucially
important to use good abstractions and the right tools for the job in
the first programming course.  Teaching people about algorithms,
implementation of algorithms, assertions, testing and debugging are
surely the primary content.

Despite "Developing Java Software, third edition", I am increasingly of
the view that Java is the wrong language for a first course in
programming, even at university.  I am increasingly of the view that
Groovy and Python are far better languages for that initial course and
then students, especially CS students, must be exposed (forcibly if
necessary) to Java, C++, Prolog, Haskell (or ML?), and C.  

-- 
Russel.
====================================================
Dr Russel Winder                       t: +44 20 7585 2200
41 Buckmaster Road               m: +44 7770 465 077
London SW11 1EN, UK              w: http://www.russel.org.uk/

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to