Howard Lewis-Ship has blogged about the [recommendation of Java as a First Language](http://tapestryjava.blogspot.com/2007/08/blindness-of-james-gosling-java-as.html). This is a topic that has been exercising me for a couple of years (although I no longer teach an introductory programming course). Howard is right when he states that: > Java is extremely monolithic: in order to understand how to run a simple Hello World program, you’ll be exposed to: > > > - Classes > - Java packages > - Static vs. instance methods > - Source files vs. compiled classes > - Editing vs. Execution > - Using a compiler or an IDE > - Method return types and method parameter types > - The magic (for newbies) that is “System.out.println()”
For a while I was content to go along with the [BlueJ](http://www.bluej.org) “[objects first](http://www.bluej.org/objects-first/)” approach which seeks to hide some of these details behind a graphical user interface. But having observed the experiences of students who find it difficult when they need to graduate from the “training wheels” of interactive objects on the screen to raw unadorned, *textual*, Java code, I’ve been having doubts. Howard himself advocates [ruby](http://www.ruby-lang.org/en/), and interestingly the [inform](http://inform-fiction.org/I7/Welcome.html) language (that seems to be designed for creating virtual worlds). This year, I am supervising a student project evaluating [python](http://www.python.org/) so expect more on this topic.
Powered by [ScribeFire](http://scribefire.com/).