On Fri, Feb 01, 2008 at 09:31:21AM +0900, Michael Bevilacqua-Linn wrote:
> 
> Java, C# and VB.NET are  horrible teaching languages.  You're neither close
> enough to the machine to learn much about how a computer actually works, nor
> at a high enough level to learn a lot of the fancy, abstract ways of
> thinking that seem to help make good programmers.

I'm mystified at the notion that Java, C#, or VB.NET would be good as a
teaching language.  The only thing I think they're good for, in terms of
teaching, is teaching how to use those languages in particular.  The
complexity of their use gets in the way of learning good programming
practice, problem solving, and algorithm development early on, and their
levels of abstraction from the underlying technology (as you point out)
introduces problems as well.

Probably even worse, though, they're *discouraging*.  The last thing you
want when trying to teach something is to use a teaching aid that
discourages students.  Use something that encourages curiosity,
experimentation, and wonder -- not something that is bureaucratic and
frustrating for a beginner.


> 
> Ruby and Python are pretty decent choices, I think.

To the list of high-level dynamic languages for teaching programming, I'd
add Logo (specifically UCBLogo), Perl, and probably DrScheme.

Depending on your needs with regard to subject matter, I think for static
languages a good lineup might include Assembly, C, OCaml, and Pascal.  C
and especially Assembly might be pushing it for an initial introduction
to programming, but some people subscribe to a "learn the hard stuff
first" philosophy, and both of these languages would at least present a
lot more interesting learning opportunity than something like Java or
VB.NET, in my opinion.

Just one man's opinion, based on experience.

-- 
CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
Marvin Minsky: "It's just incredible that a trillion-synapse computer could
actually spend Saturday afternoon watching a football game."