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