Here is a summary of my observations over the years. I have more experience with some languages than others so the comments will be a biased from that time of exposure. The evaluations below are strongly based on my ability to teach the language. A good teacher with lots of experience in Java can probably make a language like Java an interesting experience for a beginner. Some languages are just easy, and fun, to teach with, I will stick with those. With the advanced kids (my programming “nerds”) the language they use is much less relevant. They are able to shift gears between languages pretty quickly. The biggest thing they have learned is the ability to read documentation and problem solving. My goal is not to graduate outstanding programmers in language X, but graduate students that have the background to learn language X quickly.
Alice – I did it for a semester with a class of 7th grade boys and have had several Programming I classes play with in for a couple of months. They enjoyed it but there were some issues. It crashed, regularly, taking with it any work since the last save. It needs a large monitor due to all the windows on the screen. A lot of the programs were not programs; they were animations to make a character move in a pattern. It is hard to follow a larger program’s logic because a lot of the code cannot be seen at once. Very attractive to beginners.
Scratch – Presently being used in our elementary school to introduce some very basic programming concepts. I really like it with young kids because they can write their own simple games quickly. Again, like Alice, it is difficult to follow a larger program. Like Alice, the drag-and-drop is nice for young kids.
VB – I have the most experience with teaching VB so I do like it quite a bit. The IDE is nice for beginners and it is also nice for experts. I think sometimes the IDE is a bit too much for beginners, too many things to keep track of; properties, windows, code, etc. I like it as a second language.
RobotC – The Lego robot really attracts kids. This language requires no motivation to get the kids into it. It does have some documentation issues. I use this language in almost all my classes for a part of the semester. Writing a program then seeing the robot execute it is much more exciting that writing the average program that only does some action on the screen. K-12 love that little robot. RobotC is a C-based language which some programming teachers seem to object to but the code needed to motivate the robot is very simple to learn and transfers to other languages nicely.
NXT-G – Not good. This is written by Lego for their robot. The wire thing to pass data is just bad. Being able to write a program in this may teach programming logic but nothing else transfers. This language is a royal pain and all the kids hated it. Trying to follow the logic in a long one of these programs is not pleasant.
Small Basic – I love this language for beginners. It fits all my criteria nicely and the kids really enjoy working with it. Of course it does have some issues. It would be nice if it used parameter passing and local variables. Overall I think it does everything a beginner needs to learn the basics of programming. With this as a foundation it is not too difficult to step up to a more advanced language.
C#, Java, Python – I have tinkered with all of them and think they simply require too much knowledge initially to be a beginners language. I think C# and Java are great for a more advanced course, C# because I think it will be a future powerhouse, Java because a lot of university’s have it as their primary intro programming language. I feel that these three have about the same learning curve and if you can learn one you can learn the other.
In my last couple of intro courses I started with some simple Small Basic programs, then went to RobotC for some robot fun and finished with VB so the kids can see a commonly use commercial IDE. Interest and retention for a second semester has been good. I may have some of this batch hooked for a third semester next year. Maybe I will try some Win7 Phone programming with this class next year? Sounds like fun that may involve learning.