Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am a teacher of informatics and programming on high school. But programming isn't very popular among students. So I ask you, can you give me some tips and tricks, how make classwork more interesting? Maybe some competitions or graphics things like Logo etc. Now I teach them C and later C++.

share|improve this question

closed as too broad by gnat, GlenH7, MichaelT, Jim G., Doc Brown Sep 29 '13 at 21:24

There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
Small nitpick, in English, 'computer science' is the preferred term over 'informatics'. It's a common error when translating from European languages (particularly from French). –  smithco Feb 18 '11 at 17:19
3  
I believe that there is nothing wrong with en.wikipedia.org/wiki/Informatics. It is just a not so commonly used synonym. We say "computer science" but "bioinformatics"? There are many other examples: selfishness (common) - egoism (not so common) ... cannot think of others yet. Notice the pattern: one word is close to Latin; another is local and was created much later. Such translation is not an error; it just looks strange to someone who speaks American English and did not have to take a verbal GRE test. –  Job Feb 18 '11 at 18:05

7 Answers 7

Use XNA game studio and teach them to make simple video games.

A lot of young programmers I see want to program so they can make video games. They like the idea that they could create a video game that is bigger/better than something else they've played and would fix all the things they hate about video games

As a side note, I always wondered why they didn't teach math using video game examples. It's far more interesting planning a fireball trajectory within an enclosed dungeon than it is to figure out angles and triangles.

share|improve this answer

I think the following languages could be attractive and fun for students:

  • Processing: Its a language created at MIT Media Lab for graphic expression. So easy to start painting and visualizing things. Easy to setup and there is even a web version (Sketchpad) where many people can collaborate toghether.

  • Arduino: Based on processing this is a language to program the Arduino Board. it will be fun for the students to create their own automations. leds and toys. not so hard to learn either.

    • Scratch: Another language created at MIT Media lab. It's programming by blocks so no lines of code required and they can create their own interactive stories, games and art.

    • Android App Inventor: Based on Scratch. It is the same block programming but to create Android phone applications . it could be fun for the students to create applications that they could easily run on their phones.

share|improve this answer

Make it fun and give them purpose.

  • purpose: let them know how the stuff do learn is applied in real life. If you have a problem defining purpose you might need to reconsider the subjects that you are trying to teach and the programming language you are teaching.

  • fun:

    • for most people doing is fun, listening not so much.
    • look at the answers for these questions for puzzles. Programming Puzzles and Alternatives to Project Euler? let them do some of these puzzles and present there results to the group. (presenting and conveying solutions is an important skill)
    • put together project groups and let the create/contribute to open source projects so that what they create is used.
    • most things graphical or game related is fun
    • play the solve the bug game. Give the a program a current behaviour description and a desired behaviour description, make the solve it.
    • Make the things you don't want to teach easy. E.g. when you don't want them to learn how to setup the environment, make setting up the environment easy. There is nothing more annoying than getting things to work that should have been just working. That kills the fun.
share|improve this answer
    
I don't think the "solve the bug" game is fun for most students (or even professionals, from what I've seen). –  FrustratedWithFormsDesigner Feb 18 '11 at 19:08
    
@FrustratedWithFormsDesigner it depends on the bug and on the level of the student. You need to orchestrate the bug :) Also when the student isn't very advanced in a language this is learning easier than starting from scratch yourself. And maybe not everybody loves solving a bug but everybody loves it when they have solved a bug. –  KeesDijk Feb 18 '11 at 19:21
    
Ok, I see the point. If it's orchestrated though, I'd probably call it a "Sovle this puzzle" game more than "solve the bug"... To me "bug" implies it was accidental (not orchestrated). –  FrustratedWithFormsDesigner Feb 18 '11 at 19:24

If you have the budget, you could try getting some Lego Mindstorm sets. A family member of mine attempted this for his class, and got enormous response due to the immediate and very visible feedback. You could e.g. pit a few teams against each other, making their robots compete in tasks like "Finding the door", "Blocking each other", "Drawing the polygon defined by this file".

share|improve this answer

Another good choice for an introductory course is to teach a scripting language like Python, Ruby, or JavaScript. This results in more reward for less effort, no matter what they are interested in.

But no matter what you do, you should be aware that most people don't seem to enjoy programming. For example one consistent finding of UI research is that over half the population (including most educated people) simply Don't Get the idea that files exist in a directory tree with a structure that can be arbitrarily nested. People who have trouble with that sort of thing are going to have a lot of trouble writing any interesting programs. So I'd suggest aiming to fire up the 10% that are likely to enjoy the topic, and accept that most won't like it no matter what you do.

share|improve this answer

The easiest way to engage the current generation of high-schoolers with programming might be to let them code to and consume some of the many social networking APIs . Young peeps (and many older ones too) love that stuff and being able to create little custom apps to do "cool" stuff with their social networking accounts could surely excite many of them.

The biggest problem though, IMO, lies that you're starting with C/C++. There are some complex topics to learn before you get to the fun stuff. Real geeks won't have a problem with C/C++ and will work to overcome the learning curve and even enjoy it but if you're looking to attract a more casual student a better option, IMO, would be Java or a .NET language which lower the barrier to entry, especially for some of the fun stuff.

Also, maybe doing some iPhone/Pad/Android dev would excite some of your youngsters as well. Play to their interests.

share|improve this answer

For an introductory course, use a LOGO interpreter. It's an excellent tool for demonstrating how a program works and the students will have fun producing graphical outputs. To balance that out, interweave the LOGO with old-fashioned math problems and logic in binary: learning to think in binary isn't fun, but it well engage their minds.

share|improve this answer