views:

192

answers:

3

(See end for summary of updated question.)

I want to convey to groups of people (kids or adults) how a computer program written in a high-level language works, and what the relationship is of that program to the computer as a consumer device as they know it (a TV-like box that "does" typing and "internet").

I want to do it without computers. Not because I don't have them, but because I want a fun, physical activity that involves people the way acting, dance, music, sports, and capture-the-flag are fun.

I have read Teaching beginner programming, without computers here on stackoverflow; its reference to Computer Science Unplugged comes closest, but most of the activities there are either too complex, require too many props, or focus on specific computer science concepts.

I have also read Games that teach Programming Fundamentals but almost nothing matched my description in my first paragraph above.

And just for good measure, I have read Should functional programming be taught before imperative programming? so I am open to activities to teach either of those.

Keep in mind these requirements, some of which are subjective:

  • physical
  • no props (or very few)
  • fun
  • involves as many of the senses as possible
  • simulates the experience of writing a program and running it on a computer
  • no computers anywhere in the picture
  • is a game (competitive or cooperative)

==

It occurs to me that one source of material might be those team-building games that companies send you on. But those are designed for team-building, not teaching what writing and running a computer program is. But maybe you get the idea. Another way of looking at this question is to suggest what search terms I should use to find more answers -- though I usually can pick good search terms, an implicit "or" of "computers" and "games" will not find what I want because that combination is reserved for something totally different.

Update:

  • Thanks for responses so far!
  • I have now clarified that I'm interested in simulating the operation of a high-level-language program rather than either how the machine operates (1's and 0's) or specific concepts
  • With that clarification, you will be able to say specifically whether your game suggestion or game found teaches about functional or about imperative programming
  • With that clarification, please also respond to the part about games to teach the relationship of a computer program to the computer. What needs to be taught is that other consumer devices that physically look similar do not have "programs" -- why?
  • Your direct answers are much appreciated; if you can also find more ready-to-use sources beyond Computer Science Unplugged][2] that will be great too
  • See my comments on answers so far, all of which are made in the spirit of thanks for what you've written, and not meant to be critical in any way.
+2  A: 

You could demonstrate thread locking by having two teams competing to get two halves of a key that opens the door to some reward (sweets for kids etc.). Each team grabs half the key each and then neither can open the door. If they cooperate then they both get the reward.

This might be a bit advanced - not sure now having re-read it.

ChrisF
See my update. Much appreciated but indeed this topic is too advanced and single-concept. If I do word-association about using computers with novice users, none of them will say "thread locking", nor will they say any popular synonym for that concept. I do like the teams, the grabbing, and opening a door. Maybe you can consider the operation of a simple program in a high-level language, and then offer an activity with the same active flavor about that?
talkaboutquality
+3  A: 

Fundamentally, computers only do a few, very simple things:

  1. They can do basic math,
  2. They can move data from one place to another,
  3. They can loop, and
  4. They can make simple decisions.

The power of computers lies in the fact that they can do these simple things millions of times per second.

At the physical game level, I believe this is about all you can teach. Beyond that, I believe computer simulations and/or multimedia presentations are required (or, at the very least, a whiteboard).

Robert Harvey
See my update. This 4-point summary is a great simplification of what computers do at the machine level. But, as I've clarified my question, I'm more interested in simulating a simple high-level-language program, where I think that only points 3 and 4 are in focus, and, in place of the "brute force of speed" power, the "can do long, repetitive tasks reliably" power is important. Can you think of, or find, any physical games that focus there?
talkaboutquality
You can model a computer's operation at any level using these four points. Example: Graphics Programming. Point 1: Math allows you to manipulate color. Point 2: Pixels are placed on the screen. Point 3: Pixels are placed on the screen from left to right, and then from top to bottom. Point 4: Colors can be manipulated based on screen location e.g. creating a border.
Robert Harvey
Example 2: Managing Loan Payments. Point 1: Math allows you to calculate the loan payment. Point 2: Money is a number that is moved from one account to another (credits and debits). Point 3: An Amortization Table is created. Point 4: Late payments are added if overdue.
Robert Harvey
Perhaps the game is seeing how to apply these four rules to everyday problems.
Robert Harvey
You've convinced me. It's most important to have the right concepts in mind, and indeed they are applicable at any level. Thanks also to zedoo below for giving one image of how such a game would actually look, without a whiteboard or other props.
talkaboutquality
+1  A: 

It really was fun in CS Class: The Living Turing Machine.

You need:

  • Some place to place the formal rules of the machine, in the beginning it's pure chaos :-D

  • Humans:

a. A bunch of people that stand in line and simulate the linear memory, you just need a way to distinguish between 'ones' and 'zeros'. We did this by standing in the foreground or in the background, but I could also imagine other ways...

b. One person for every state of the machine

c. A 'reading head' which moves left or right on the memory.

Now you just need sample programs, start simply, for example with inverting a pattern. Then go on to more complex programs like increment/decrement.

zedoo
See my update. The minimalism of this answer comes closest so far to what I'm looking for. It does the job, but it does it by starting from the bottom up -- from simulating the hardware. I would really like the same kind of activity, but simulating the operation of a simple program written in a high-level language. Can you come back with something like that? (Keep the text of this answer -- add to it with a separate section with any additional answer.)
talkaboutquality
To emphasize, definitely keep this answer and add another answer if you can. Re-reading this answer, I realize that, while it doesn't focus on high-level programs that I had in mind (but you couldn't have known before my clarification) it does teach the basic concepts (the "why" and "where" and "how") of writing a program and of the computer's reaction to a program.So if can go further re high-level language, great. In any case, I will be tempted to mark this answer the accepted answer unless something significantly better is offered by someone else.Thanks again.
talkaboutquality
I picked Robert Harvey's answer above as "the" answer, for the concise outline of the concepts. But you've given me an image of how to do such activities without props. If you have more examples, happy to see them!
talkaboutquality