views:

459

answers:

15

I am planning to host a "summer-holiday-programming-club" in my school. There I want to teach other students (age 12-17) something about programming and give them a little insight into stuff. Most of them won't have any experiences concerning programming since in our country computer classes are unfortunately very rare.

Besides general questions concerning organisation I have to consider a programming language (a single one - due to limited time) that on the one hand is very easy for beginners but on the other hand provides elements that allow the students to create applications appearing rich to them. That means they have to see stuff and at best create something with a benefit.

I thought about either Java, C# or Python. Each of them has its own advantages and disadvantages but what do you think? Do see alternatives that might even suit better?


Update:

Considering all your posts (which I am very thankful for) I made up my mind and decided to use Python. Due to limited time I have to use a language that is very easy to understand and to use. And since in Python you don't have to deal with compilers, data-types etc. too much I think it is going to allow a very smooth introduction into programming. Also the pygame library will allow easy development of applications that provide some benefit.

But for those who are/get very interested I will also recommend C# as something they can learn in their free time too.

Thank you once again for your posts, you helped me quite a lot :)

A: 

Most of them won't have any experiences concerning programming since in our country computer classes are unfortunately very rare.

C/C++

NinethSense
Can you explain why? Don't you think C++ might be a bit too complex and dangerous for complete newbies?
Kevin D.
C also there. Well, if you think they are extreme beginners, take a look at SmallBasic - http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx
NinethSense
Holy cow, no way! Absolutely no C++, and no C either. These will frighten them to death with all these #includes, memory management, typing issues, general low-levelness, freakiness of language design (this applies exclusively to C++), etc.
Anton Gogolev
C or C++ is good for a starter in my openion. Do not get in to complex parts. First start with 'Hello World'.
NinethSense
C++ was the standard language for all introductory programming classes at my university and it was assumed that students had no previous knowledge when they entered the class. I think it would do better to teach them the basic fundamentals of programming instead of something like VB.NET which many like to view as a beginner's language. I would prefer C++ over VB.NET for learning just because a greater number of languages follow the C style syntax instead of a verbose VB style. Might as well get used to it early.
TheTXI
Anton: I don't think you need to be worrying about teaching them the complexities of the language from the beginning. There's a reason why those are typically considered advanced topics.
TheTXI
Surely c#/Java are just as valid choices if you're going to make the C style syntax argument. Syntax is not the be all and end all of programming
RobV
This is a light and fun summer class for kids!
Aardvark
TheTXI: You cannot write a reasonably complex program without diving into dirty little language details. This is all accidental complexity, which must be avoided for the sake of learning. Kids should deal with essential complexity only, and they should be able to do so in a very rapid manner, thus no time for lenghty compiles.
Anton Gogolev
@Nineth Sense: I had a look at the Small Basic website and will have a closer look on the IDE although I personally don't like basic (and its relatives).
Kevin D.
+8  A: 

I'd suggest Python. Installation is easy, Windows integration is good (if that's important). The language has much less syntax overhead than Java or C#. There are some good graphical libraries around if you want to go that way (Panda3D comes to mind as something that might be fun), but you can get a long way just with what's built in.

Python has a nice interactive mode (via IDLE or the command-line) that makes getting started very, very easy.
S.Lott
There is a book called Hello World! http://www.manning.com/sande/ that might be handy
Miau
Thank you, I will have a closer look on Panda3D as it seemed quite interesting at first sight.
Kevin D.
+4  A: 

Out of that list, I'd go for Python.

The nice part about Python is that it comes with an GUI interpreter that is a great place to experiment with the language. There's no need to compile then run -- just type in:

print 'Hello World'

and press Enter!

coobird
Yes, you're absolutely right with that. In fact that's exactly what made me put Python on my list. I like the simplicity (positively) that it comes with.
Kevin D.
I would imagine it is encouraging for beginners when they get to see their code perform an action immediately, right in front of their eyes :)
coobird
A: 

C# wouldn't be a bad start.

The IDE forces you to write sensible code, it's object oriented and you can download the Express editions for free.

Hooloovoo
I like C# a lot, but is it really appropriate for a first exposure to programming? I think the OO concepts can be a stumbling block for beginners - less so once you get the basics of assignment and basic operations, programming flow and logic.
flatline
You don't HAVE to follow object orient concepts with C# to a great extent. You can build a console app that simply saysSub Main() console.writeline("Hello World");End SubYou can than go down the route of building more and more complex applications, from console apps, windows apps, services, DLLs, web service and web applications.
Hooloovoo
I would rather tend to agreeing with Brian. To my mind the GUI bulding tools are a plus for C# as they help saving time and provide the base for simple but appealing applications.
Kevin D.
David
I've got to be honest, I do most of my development in VB.Net, and while I find it easy to develop in, I also find it offers a lot of shortcuts which aren't necessarily good practice (option strict being off by default is one of the things I override except when I'm developing an Excel Interop class, but that's another post!)I was also thinking along the lines that there are tons of C# jobs out there rather than VB, but there's also a lot of Java jobs. It does come down to personal preference, though. Kevin, what are you used to developing with?
Hooloovoo
Well when I started "programming" I first did PHP, then Java. I also learned C and C++ but don't use them often for real projects (only if runtime is critical). These days I'm kind of switching from Java to C# (which by the way is quite comfortable) and I'm doing a bit Delphi. The latest thing I've learned / am learning is Python which is really a great piece of fun.
Kevin D.
+3  A: 

Taken from my comment in NinethSense's answer:

C++ was the standard language for all introductory programming classes at my university and it was assumed that students had no previous knowledge when they entered the class. I think it would do better to teach them the basic fundamentals of programming instead of something like VB.NET which many like to view as a beginner's language. I would prefer C++ over VB.NET for learning just because a greater number of languages follow the C style syntax instead of a verbose VB style. Might as well get used to it early.

My basic choices for the language of choice in this order would be:

  1. C#
  2. Java
  3. Python
  4. C++
  5. VB.NET

The reason I ranked them as such was because C# and Java are much more popular right now and you can find plenty of online guides and tutorials. Python is also a very popular language to learn early on. VB.NET is last not because of anything wrong with the language itself, but mostly just due to its verbosity and how it will not prepare you well for the syntax styles of other languages.

TheTXI
Thank you for your answer, I absolutely agree with you especially when it comes to VB (and related).
Kevin D.
That's good to hear. And this is coming from someone who works all day every day in VB.NET since that is what our shop specializes in. I have no problem with the language itself and personally I prefer it over C#, but I wouldn't encourage it to newcomers because it has the tendency to teach bad habits.
TheTXI
It's not a language that teaches bad habits - teachers either teach bad habits or fail to teach good ones. I've seen awful code in every language I've been exposed to. Now that "line numbers" are a thing of the past, it would seem that "bad habits" are more architectural than syntactical in nature.
David
+5  A: 

Scheme is pretty easy to learn (at least the basics), there are even some ready-made teaching materials like http://world.cs.brown.edu/, the PLT IDE is pretty cool, and overall a lot of fun. Otherwise, from that list, I'd say go with Python.

flatline
+1  A: 

I'd definitely recommend Python. It's much easier to get up and running quickly than either C# or Java, and can be used to get something fairly impressive quite quickly.

In particular, for that age group you could look into:

  • Pygame, a framework for creating graphical games;
  • Django, a web framework
Daniel Roseman
Thank you for your answer :) Since I do not want to teach them web-related programming Django is unfortunately dismissed right from the start :(. But Pygame definitely is worth a closer look.
Kevin D.
A: 

Why not also consider something like PHP? It sounds to me like one of your main requirements is that your students see something tangible from their efforts. You could teach them Jave, C#, or PHP to accomplish this. I would stay away from the object oriented aspects of these languages and just teach the functional parts since you are limited to a few months in the summer.

Mark
Although I have done PHP for years and already tought it in a club once, in this project I tend to not teach web-related programming which unfortunately dismisses PHP right from the start :(
Kevin D.
@Kevin D - Let me play devil's advocate. PHP has a console mode and a GTK+ mode now.
Jason Baker
OK, just a thought on PHP and the web stuff. Now that I have thought about it more I remember having to create a Go Fish card game in one of my early programing classes. Maybe that is something you could teach them to cover both teaching programming as well as the students getting to see something for their efforts
Mark
+1  A: 

Take a look at Alice: http://www.alice.org/

The programming language is Java, but that's not the important part. It provides a rich 3D graphics environment in which to see the results of the programs you write. It kind of encourages the writing of games or stories, things that most non-programmers would find fun.

coombez
I don't like Alice. Menu-driven development looks like a bad idea to me.
Svante
I had to use Alice 2 in college and I absolutely hated it. The graphics are from the 80s, and you can't even write any code for crying out loud. Having to drag and drop _everything_ drove me crazy.
MiseryIndex
+1  A: 

I'd rather look into Ruby and the Rails framework, that will allow to easily/quickly build some nice apps. Plus you're getting good habits by using MVC by default.

Take a look at the these screencasts and see for yourself.

Billy
+7  A: 

How about Squeak? It was designed for teaching programming to children. It comes with Etoys, a direct manipulation programming environment. That's why it's included with the OLPC laptop. Check out http://squeak.org and http://squeakland.org. You can also look at Scratch. It's built on top of squeak.

mamboking
Thank you for your reply :) I once had a look on scratch and although the concept seems quite good it doesn't appeal to me (subjectively). Nevertheless Squeak seems interesting and I will have a closer look on it.
Kevin D.
A: 

how about ruby?

  • irb, to code interactively
  • rails, sinatra, can give your students quick results & motivation by easily building real world apps
  • tryruby.hobix.com, a web based tutorial AND interactive console that requires no installation
  • no memory management nightmares
  • no syntax nonsense
  • allows you to teach procedural or object oriented programming
  • lets advanced students easily familiarize with stuff like functional programming and metaprogramming
  • hackety hack

I think it's better for people to learn to implement algorithms with as much freedom as possible first, and let concerns like fine-grained optimization, memory management, and other implementation burdens like those for later.

Maximiliano Guzman
Thank you for your answer. I had a look on the ruby interactive only tutorial due to another reply on this question. It seems quite interesting to me and I will have a closer look on it.
Kevin D.
+2  A: 

Go with APL..... Actuallly that might be considered Child Abuse.....

Althoug it didn't really help me, I give you +1 for being funny.
Kevin D.
+1  A: 

The clear choice is Scheme, not so much because of the language but because of the software support from the TeachScheme project and the excellent free book How to Design Programs. These works are the fruit of many years of hard labor learning how best to teach programming to beginning students. And the DrScheme IDE is very nice and fun to use!

Norman Ramsey
:/ I really disagree, it might be good for teaching CS students programming theory, but are you suggesting teaching Scheme to 12 year-old children..?
dbr
Absolutely yes. There's nice graphics, good tools. And everything is very simple and regular. They won't learn lambda, but then they won't need to.
Norman Ramsey
A: 

Don't think about languages, think what you want them to create..

Basically, when their parents ask them "So, what did you learn?", I think the answer should be "How to [create a website/make my own video game/control a robot]!", rather than "I learned [Python/Java/C#/PHP/...]!"

Robots?

Perhaps a bunch of LEGO Mindstorms kits (how I first got interested in programming)? Or the BASIC Stamp based Boe-bot?

Both possibly a bit expensive, but it's the best way to get kids to care about programming - instead of making it display Hello $name in a boring terminal, they get to make little robots move around, obeying their every command!

This is how MIT are teaching their electrical engineering and computer science courses now, since it more mimics real-world development - badly documented APIs, and machines that never quite do what they're supposed to, meaning lots of experimentation and debugging (the Stackoverflow podcast #55 or #56 explained it better, but the transcript doesn't cover that part yet)

One good thing about "robots" are they are pretty simple.. Once you teach them the basic commands (forward, turn left/right and wait x seconds) you can quickly set up competitions and challenges (like navigate this simple maze, or be able to avoid obstacles)

There's software equivalents, things like LOGO (there's a LOGO-like Python module called "Trutle"), and more advanced 3D ~games where you program robots - although it's not quite the same as seeing a physical machine move around like you just told it to.. but may be more practical.

Games?

Potentially more complicated. There is plenty of frameworks around, but to get to a point where something is fun can require a lot of time and prior knowledge.

For example, PyGame requires a reasonable knowledge of Python, if you have to teach that first the kids may get bored before you can let them create anything interesting (Whereas with the robots, once you teach them the commands to move it forwards/turn, and a delay, you can do a lot)

Something like The 3D Game Maker, or DarkBasic or Torque may be better, as it could provide more immediate feedback

Websites?

Rails, or Django or something might be "best", but if you start out teaching that, you have to explain loads of other stuff, like using a terminal to create a new rails app, how to generate controllers (and what a controller is), edit HTML (and explain what HTML is..), how the page magically gets generated from those random files everywhere..

I would say teach them HTML (not CSS, at least initially). Things like how to format text, how to change the page title, how to use tables.

When they can make reasonable websites, show them how to add basic PHP to the page, say have an "Enter your name" form, then print "Hello $name" in the title. Then perhaps something with MySQL, say a guestbook type thing? If you serve their code via a central web-server they could leave each other messages. When that is done, show them how to break their own website (using XSS and SQL injections), and show them things like mysql_escape() and htmlentities(). There's lots of ways of progress, say with CSS for better design, Javascript for interactivity, more advanced PHP (for example, authentication? Interacting with third-party APIs, like.. Twitter? Google search?)

Desktop Applications?

I'm not sure what sort of application you'd have them create.. You could maybe combine this with another project, say making a guestbook in PHP, and having a desktop application to post to it?

I would suggest using Shoes, or Visual BASIC (or Visual C#, which really isn't all that more complicated to learn), as they all give good immediate feedback.

dbr