James Gosling: on the Java Road

« Good Night, and Good... | Main | Java on OS X »

20051114 Monday November 14, 2005


Kids & Java

We've been having lots of fun at home with my favorite "other" Java IDE: BlueJ. It's an IDE specifically designed around teaching programming. It's used extensively in Universities, High Schools and Middle Schools. It takes the rather unusual tack of teaching programming by not starting off with programming: instead they start with objects and have a visual way to enable students to manipulate them directly. This develops intuitions about the nature of objects. They also have a great textbook that goes with it.

My wife (who was a programmer aeons ago, but in Fortran) has been teaching herself and our 7 year old how to program using BlueJ. They've been real happy with it. The 7 year old's biggest problem is that her reading isn't quite good enough. Gotta work on that.

When I was a kid, I was considered a freak, starting to program when I was 13. These days, it's normal. Coolness...

(Mon Nov 14 09:01:16 PST 2005)
Permalink Comments [4]

Comments:

Your timing is impeccable - I started teaching my 12-year old son (another James ;-) to program in Java over the weekend. We'd tried Logo previously, but after drawing a few boxes he soon got bored - as he put it he wanted to 'Do something that was useful'. I decided we'd try jumping straight into Java. However, as the Why BlueJ page accurately points out it is easy to get so tied up with the mechanics of editing, compiling and running code that the actual point of what you are trying to do gets lost. To try to avoid that I used NetBeans as a fancy editor, about the only other functionality we used was F6 to run the code. To my surprise he grasped all the main OO concepts pretty easily - perhaps because I didn't tell him it was supposed to be difficult!

However for him NetBeans is really overkill and something simpler would be more appropriate. I've pulled a copy of BlueJ and it looks pretty ideal from my 10 minute play. The only hiccough was the menu item to start the web browser didn't work but all that was required was an edit of lib/bluej.defs to change 'Mozilla' to 'Firefox'.

Thanks!

Posted by Alan Burlison on November 14, 2005 at 03:18 PM PST #

Hello, I am from china and not good at English. I am not sure where I am. OK, I have just learned the 'import static' new feather in Java 5.0 and have some personal opnions about it.
1. First, Simple is beauty and speed is power. Never forget it.</br>
2. Why did you add this feather? it's just you 'core Java team's thinking, Or the feedback of all java developers around the world?</br>
3. About this feather: Does it make java beauty or power? NO. First, a developer should not define static fields and methods in an interface, If he has to or like to. For example, Define an interface 'Light'. I think 'Light.Speed' is better than 'Speed'. Second, if a developer complains it's complex to type(although I think it's few and not good). the problem should be resolved in IDE, NOT IN JAVA, JAVA IS THE BASE BUILT.</br>
4. Add a feather is easy(People likes change or new, but change or new isn't always invent or developing.), but remove it is difficult. You should be more and more cautions to add the new feathers</br>

Posted by lihaiyang on November 14, 2005 at 08:08 PM PST #

Very cool! Thanks for highlighting this. I have been teaching Java and OO-think to beginners and non-beginner-programmers for about 8 or 10 years now (a sideline activity - I am still practising developer).

The last few years I have been teaching beginners at high-school level, and thought I was just the odd-one-out by teaching Objects First, and the conventional "structured" stuff as incidental to getting objects working.

The approach was first suggested by watching my son teach himself Java at about 12-years old (he's now 21, and a very-in-demand Java developer). One day, after he had been writing all sorts of little programs for about 18 months, he came to me with the question, <strong>"Dad, where are the methods for ints documented?"</strong> The implications of his question stunned me. I was delighted, but had to face the (sticky) task of explaining to him that "some things in Java are not objects". He was floored! He went very quiet for a few days while he processed this new concept, until he grokked it. (Incidentally, to this day using reflection comes more naturally to him than using arrays.)

Over the years I have experimented with various takes on the "Objects First" approach, with varying levels of success (due to my own inattentions and limitations). Final confirmation was this year: I buckled to pressure from other parties to teach the new CS schoolkids using a conventional approach - first simple sequential logic, then some gentle flow-control, then arrays, etc.

It's been a dismal disaster! This year's batch of kids are at least 6-months retarded in their development as programmers compared to the previous-year's kids. They are still struggling with the elementary OO concepts. This is a stark contrast to the previous-years kids who "just get it". (My star pupil has just implemented a multi-user client-server chat app with almost no help from me! He has not yet been programming for 2 years.) Never again will anybody persuade me to follow the conventional approach.

The problem, though, has always been tools. As one previous poster has mentioned, Netbeans is way too heavyweight for a beginner. Most of the other options are just crappy. So! Thank you again for providing a much-needed pointer to BlueJ, and thereby also helping me confirm my thinking on teaching programming "correctly".

Posted by Mike Morris on November 15, 2005 at 06:00 AM PST #

It's pretty easy to write extensions for it, too; I just did a BlueJ PMD extension (screenshot included) and found the documentation clear and the bluej-discuss list quite helpful.

Posted by Tom Copeland on November 21, 2005 at 06:57 AM PST #

Post a Comment:

Comments are closed for this entry.