I've been programming as an amateur for 10 years. I'm completely self taught and have experience mostly on C, Python and Java. Lately i entered an association in my city that has 19 individual clubs of various activities (unrelated with programming). So i talked with the president and proposed him to create a new club where i could teach programming to people that have no idea about it. He agreed and now i try to figure out which language should i teach (at least first).
Should i teach Python? Python is very easy, quite portable and they can create many types of projects (games, networking, web development etc.).
Should i teach them C? It's the mother of the languages and even if they will never use it learning C they will learn many things about programming that no other language will teach them.
Should i teach them Processing? It's very easy, visual and funny but it's something that they won't use again after passing the "beginner's" level.
Should i get a bunch of Arduino's and breadboards and start making some fun projects from the first day?
I'm unable to decide. On one hand i know that they have to see some results quickly before they feel bored and dissapointed. On the other hand if they try to do anything after having experience with the "obscurities" of C everything else will seem so simple.
I'm not too keen on just "teaching people programming". I think some kind of goal would be useful -- "After these people have learned this species of programming, they should be able to do this interesting/useful thing." And yes, as you say it's a good idea to have interesting/useful feedback fairly early on in the process.
Given that, the Arduino idea works best for me. After all back in the Dark Ages (let's say 1960's) a lot of people got their hands on small and cheap hardware with very simple operating software and had a great time messing with them.
Thank you for your replays and ideas!
I decided on the first meeting to play a little with Python and maybe creating a command line Hangman game (without expecting them to understand the code) so that they'll have an idea of a complete program's development. And talking with them i'll try to guess what everyone expects from the team and what fits them so i'll THEN decide which language to teach. Although i'm almost sure i'll start with Python.
Why not be language agnostic, that is don't focus on any particular language or technology. For the simple reason that once you introduce a particular language at the start then it become a matter of teaching that languages syntax. I just feel that you could achieve more if you concentrated on the principals of programming/software development. You could introduce a subject, and then give examples in a particular language(s).
Try 100 things. 2 will work out, but you will never know in advance which 2. This tiny ad might be one:
Devious Experiments for a Truly Passive Greenhouse!