tags:

views:

566

answers:

13

I realise that this question may be similar to many other such beginner programming questions, but with one caveat - the lack of computers.

I'm interested in teaching a bunch of high-school kids how to programme. My purpose for doing so is to build interest in computers and also to ensure that they learn something right about computers (by learning how computers actually work).

I know that the basics of CS can be taught without any computer usage. However, I'm hoping to get these kids more involved. I think that a dry CS-like theoretica approach may turn-off most high-school kids.

While I can be quite sure that these kids all have home PCs (who doesn't nowadays), this particular school hasn't got a computer lab. One solution would obviously be to get some funds/donations and set up a computer lab for the school.

Another solution may be to exploit these kids' computers at home. I could teach them stuff in school and assign them homework problems that they can try out at home. In this case, I would need to supply them with an entire tool-chain and build environment (maybe eclipse + cdt + gcc) on a stick. I can probably fund that out of my own pocket.

However, I'm interested in any possible solutions.

UPDATE: I forgot to add that any solutions should be 'low-cost' since I would probably have to pay for it myself - including buying any Lego kits.

A: 

This is quite a difficult task to do, as learning from example is great for teaching beginners. Do they have access to graphing calculators such as the TI-83? That has TI-basic, which is great for teaching beginners how to program, especially since you have no computers on hand.

AlbertoPL
Nope - just dumb ole calculators.
sybreon
+1  A: 

Lego Mindstorm is a good idea. If you have particularly smart kids, you could try to let them create a simple computer out of batteries, lamps and switches, after teaching them the binary system and the logic gates, of course. It's not really "programming" in the traditional sense, but you can get them interested in the basic understanding of how a computer works.

Stefano Borini
may be useful for illustrating basic logic.
sybreon
A: 

Well if you are interested in teaching them about programming specifically you can always go over concepts in class (on a black/white board). There are many examples that you can run through to explain the concept of Object-oriented design as well as general data structures.

You should take a survey of the students and figure out their options. If they all have access to a computer then assigning some homework questions to complete in an IDE wouldn't be such a bad idea.

Another option you could do is JavaBat, I recent stumbled onto this site and it seems to provide a free service to test you code writing knowledge with basic program creation. There is a teacher/student option as well, which could be useful in your case.

Blitz Bolt
+5  A: 

Flowcharting. Get whole chunks of cardboard and glue and different shapes and build logical black-boxes. By assembling inputs and outputs, you can demonstrate to students where assumptions cause flaws bugs and get them to think "outside the box".

Plus, it's cheap, it keeps them occupied, and if you have different groups building different types of logic maps, they get some teamwork as well.

Chris Kaminski
+1: very interesting idea.
Stefano Borini
+1 for interesting idea.
sybreon
+2  A: 

Invent a simple assembly type language and have them write things out on paper.

You could also do graphical Turing machines with states and arcs. see http://www.turinginaflash.com/

SP
just like Knuth!
sybreon
A: 

The Schemer's Guide is pretty awesome and uses red and black pens.

Joel Hooks
+10  A: 

Can you bring a laptop to class? If you can do that, you can do 'group' programming in the class, and then they can go home & try it at home, with whatever language you give them.

Memorable computer-less lessons from my education included role-playing logic circuits by assigning logic gates to individuals (Sam is a NAND, Greg's an OR, Kate's an AND, etc), hooking them up with bits of string (creating a circuit) and pushing 1s and 0s through the 'circuit', and getting the students to see what came out the other end.

A similar exercise involved emulating a simple CPU by again assigning roles (Greg's the ALU, Sam's a clock, n-others are registers) and getting the class to execute something along the lines of 'count 1-30 in 3s'.

lukef
role-playing logic circuits sound fun as hell! +1
Zerofiz
+1 for role-playing.
sybreon
+2  A: 

If learning a specific language isn't the goal, then trying to emulate something simple like a microcontroller on paper would be one option. Then, write some programs in assembly for that microcontroller, and figure out by hand how the instructions will be executed.

Considering that most microcontrollers have very simple instruction sets with only a few registers that keep the state. You could also probably design a simplified architecture if an existing architecture sound too complicated.

The nice part about this approach is that it will look at computers at a very low level that many beginner programmers are not exposed to -- how the CPU executes code at a low level.

The extra bonus is that pencil and paper isn't very expensive.

coobird
A: 

What about having them design a board game of sorts, where moving your piece involves "running" a piece of code. Maybe it could be some sort of basic role playing game, where the kids can create "code blocks" that represent the "abilities" of their characters?

It's really basic, but it might give you an opportunity to talk about variables (state of character), methods, loops, etc...

Good luck! This is quite a challenge.

Ben Gotow
+5  A: 

You might find this site interesting:

There are many really nice activities that can help you to teach a variety of topics from binary numbers, search and sorting algorithms, basic data structures, programming languages and more...

CMS
+2  A: 

You might take a look at what was done in the '60s: the CARDIAC paper computer. Here is how to make your own CARDIAC computer.

Chas. Owens
+1 - this idea just occurred to me too!
sybreon
A: 

Maybe you can try those web-based programming environment (if internet connection is not a concern for your kids). The following http://www.popfly.com/ would be one of those. This is simple, and it actually require NO actual coding and could make kids focus mainly on logic (if they master those, they can still code). I think for fundamental programming, and without practical computer in front of them, the biggest hurdle to overcome would be the syntax and it is helpless for beginners to tackle those.

xandy
+2  A: 

That depends on the age group a bit.

Our local school has had great success in attempting to develop a language which can be used to program the students themselves.

Basically, the students are taught a language and shown how stupid computers really are. This is done by letting part of the class write the programs and the other part run them (as mindless automata).

Programs can vary from a simple collision avoidance strategy of 10 students wandering around the classroom (and outside if the code isn't written well) to full-on (non-contact, if you're smart) battle simulations, although I do remember one slightly disturbing individual trying to code up a subroutine that would send his automaton to the gardening shed for a chainsaw :-)

They do actually have computers in the classrooms but nothing shows how picky and finicky and totally reliable (in a "do what I said" manner rather than "do what I meant") computers can be than an obstinate child running your code.

The idea is to introduce a bit of fun into the education process that the state's education department seems to have sucked the life out of. Then, fully armed with the knowledge that computers will do exactly what you say, they are, in my opinion, better thinkers.

It also meets your "el cheapo" requirement since it can be done with fairly cheap office supplies and the wetware is already available for free.

paxdiablo