On Mon, 2009-04-06 at 10:55 +0100, Walter Milner wrote:
> I agree - not C++.

I think there is general agreement on that one.

> I think it depends whether or not you take the 'objects first' route. If
> you do, and you reject C++, you are only left with Java.
> However I think objects-first is not a good idea, and there is a small
> amount of evidence to support that, relating to understanding main() and
> the dynamics of execution. My concern is that a student cannot write a
> method unless they know about primitive types, loops, conditionals and
> arrays. And there is an enormous amount of evidence to show that many
> students find those ideas very challenging.

I have never understood this quasi-religious debate about "objects
first", "objects early", "objects late", and in particular the various
claims that one is better than the other.  The principal driver is not
really the material but the trainer/educator and the quality of the
support materials.  Having tried, and seen other try, traditional
bottom-up, top-down, middle-out, etc., etc. all of them work if the
curriculum is well structured and the examples and explanations well
organized and motivating.

I would agree though that writing methods requires a lot of precursor
material to make it sensible.

> Therefore start with C, using a debugger that allows students to step
> through code and see how variable values change. Start with a concrete
> understanding, about bits and bytes - abstraction can come later. Look
> (briefly) at compiled C to see how it relates to machine code. Use
> pointers. Without pointers the idea of references in Java seems
> completely mysterious. Use structs. Then it's just a little step to
> classes.

I don't agree with the deduction/inference.  I do not agree that not
starting with full object oriented Java or C++ means you have to start
with procedural C.  Unless you are studying operating system writing, or
hardware control / embedded systems, it is hard to find fun motivating
examples of code that really work with C.  It is just too low level,
with too little easily accessible, sophisticated functionality.

The problem is that the implementation details of creating interesting
applications in standard C get in the way of design issues.  One way
round this is to have a support library that offers lots of interesting
support, but this is then not standard C.

I do not agree that abstraction must come later in a constructivist
bottom up approach.  Whilst students need to have a basis set of types,
using bits and bytes is too low level for computer scientists, it is
more the electronic engineers and computer architecture people that need
this level as a start point.  Programming is based on a simple type set
of integer, float, character, string (or whatever the representation is
in the chosen language) which can be taken as axiomatic.  They are types
which can represent a bounded set of values -- almost simple set
theoretic approach.  Then immediately into doing things with them, and
building selection, iteration, and functions/procedures.

Pointers and references are for a second course in programming.

> There is a lot of pressure to use Java because it is 'modern' and you
> can get a job with it. But I think employers want developers who
> understand properly what they are doing. And this is just a first
> language - they should learn others anyway, so C followed by Java seems
> a good route. 

Certainly there is a lot of pressure to use Java, much of it based on
hype, fashion and peer pressure.  However the fact that it is based on a
virtual machine and so works the same on all platforms is a great bonus
-- OK let's not get into the details of the problems of portability and
the stupidity of the WORA claim, at the level of first programming
course these really don't matter.

Employers are a strange breed who rarely know what they really want, and
rarely get what they actually need.

I think one thing we are all going to agree on is the absolutely
essential need for students to learn at least three languages of
different computational models during their time as students.

One of the single biggest problems in the programming shops I have had
association with has been "mono culture".  There are two aspects to this
one is the stupidity of monoculture as a corporate strategy, the more
important for this list is that students who have been taught and done
all their work in one language are generally very poorly educated and
extremely ill prepared for what they will find in the world of work.

On another list I am on there is a current debate (amongst people just
interviewing looking to employ) about the dearth of quality programmers
just now (Java, C++, C and C#) and how dreadful all of them who know
only one language really are.

Dr Russel Winder      t: +44 20 7585 2200      voip:  
41 Buckmaster Road    m: +44 7770 465 077      xmpp: rus...@russel.org.uk
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