

Ask HN: What about computers or software would you teach to urban 3rd graders? - derwiki

I've been joking about coming in and teaching them hash tables (using something like filing cabinets). I think they could grasp it, but I don't think it's interesting enough to grasp the students.
======
abossy
I see a few suggestions for languages. I would avoid languages; instead, go
with something like the Scratch project if you want to demonstrate concepts
programmatically: <http://scratch.mit.edu/>

I recently researched languages for a programming curriculum that was to be
taught to Latino high school students, and concluded that Scratch was the best
choice. My reasoning is that most students you teach at such a young age will
never pursue programming again, and bombarding them with the syntax that
'practical' languages use quickly leads to frustration. I'm sure a lot of
people here will say, "I learned such-and-such at such age," but this is a
self-selecting group for interest and natural ability in programming. Given a
choice between high-level languages, you can choose Alice, Greenfoot,
Stagecast, Lego Mindstorms, etc. but Scratch is the clear winner.

In terms of high-level concepts, I think understanding the logic behind
software third graders use every day is important. Talk about how Internet
requests are routed and returned; how social networking software interacts
with a database; how cell phone calls are made; how keyboards poll for input.
Understanding these algorithmically requires no programming expertise and not
even a lot of expertise on your part to explain. It's simply a matter of
breaking down the problem and thinking about it systematically. Your example
explaining hash tables with filing cabinets is fantastic. Sorting can also be
explained with filing cabinets. There's also the classic "how to teach a robot
to make a PB&J sandwich," of course, to get their thoughts flowing.

~~~
derwiki
Good suggestions! I think "how social networking software interacts with a
database" might be a little over their heads -- most of them don't have
computers at home and are too young to be using social networking software
anyway.

------
conesus
Third graders are 7-8 year olds. They are probably reading Beverly Cleary's
Ralph and the Motorcycle. Their ability to comprehend negative numbers does
not yet exist (for the vast majority of them).

At this age, children learn best with a story. They can follow a clear linear
path from beginning (statement of characters), through their problem, and unto
conclusion. If you want to have an impact beyond having everything go over
their heads, make a show and tell (everybody loves pictures and something to
look at), and if you want to wow them, show them something they haven't seen
before. That part won't be hard. Let them touch it, if you bring something in.

Explaining anything more abstract than locations will probably fly over their
heads. Sure, some are precocious and will grasp a hash table, but any
collection of children, especially urban kids, is bound to be difficult to get
them to understand anything more complicated than a toaster.

My suggestion is to start with something physical, like a breadboard if you
have one, and show how changing wires can influence the lighting of LEDs.

Doing this will be far easier to capture their attention than something like
decomposing the web stack in a console (which is fascinating if you have the
background to appreciate it).

------
Timothee
I think I would approach that with a game or something very visual (see
Processing?), and work with them in defining what things they want to see
happen in terms of instructions or pseudo-code.

For example, you could start with the idea of a game like a simplified OutRun
and brainstorm about what should happen. Well, you want to be able to change
lanes, right? You would want to have cars coming your way, the speed increases
as you go, etc. so that you end up with a list of things to happen that can be
translated into code that does what they wanted to do.

I'm not sure this is a great example, but in principle, it would be to make
them walk through the idea of defining what should happen in a program. To me,
I don't think that the language matters, I don't even think that they really
have to interact with the language at all or a very simple and specific
language. What's important is to understand the process of: this happens ("I
press the left arrow") so that happens ("the car moves to the left"), from
which you can introduce conditions, loops and more.

As a starting point, you could also ask them about what software they use
often and see if you can build something very simple around the same core
concept.

------
mattj
Start out with a simple game, like hangman or something else w/ clearly
defined rules and gameplay that mostly depends on guessing. Have people play
it a few times, and then have everyone come up with and write down the rules.
Emphasize the writing things down formally part, since that's the most basic
type of programming. Have them play the game again, but this time using the
rules they defined. You could give out awards for the kids who find errors in
the rules. Try a different game (tic-tac-toe? rock paper scissors?) and repeat
the exercise.

Once they've figured out that, give them a bare-bones vocabulary (eg something
like python, but don't tell them it's a programming language) to write the
rules in.

------
TallGuyShort
That's about how old I was when I learned BASIC. You probably don't want to
teach them something really specific - but something like a simple example of
programming would pique the interest of any student that was so-inclined.
That's my recommendation. Maybe a little Ruby or something?

------
tiffani
Teach them how to make a game of some sort. Something really simple like
hangman in BASIC would teach them a few different things all at once and still
have a fun result.

~~~
derwiki
Would you really recommend BASIC? That's what I learned in, but I really feel
like Python is just as intuitive -- and if they stuck with it, useful.

~~~
bkbleikamp
Why not JavaScript? It requires no command line knowledge and runs in any
modern browser. They can create games, easily install libraries or frameworks
by including another JS file, etc.

