What about computers or software would you teach to urban 3rd graders?
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.