

Teaching Computer Science to Kids - drblast

I face a dilemma that I have a gut feeling about, and I'd like some of your opinions to keep my ego in check.<p>I have an opportunity to teach computer science to a number of children at our local homeschool co-op.  The age range is 9-12, and the class is voluntary, so the students are a self-selected group.<p>The trend in teaching seems to be focused on making computer science more engaging and fun.  Usually there is some sort of point-and-click interface to let students easily create multimedia presentations and movies without having to type a single line of code.  See www.alice.org, or MIT's Scratch.<p>My gut tells me that although this method would be extremely popular and engaging, it's mostly a waste of time for those who <i>really</i> want to learn the science, and that those students who don't care to begin with probably won't progress much further after you take the fun tool away.  It really feels to me like a dumbing-down.<p>At the opposite end of the spectrum is my idea, which is to develop an extremely simple virtual computer environment where you can see all parts of the computer in a GUI.  You can drill down into individual bytes in RAM and set them (and immediate see the result in the case of video memory), you can see the CPU registers change as you step through code, etc.  The machine has 64k of RAM and a very simple CPU instruction set.<p>I'd like to teach using a bottom-up approach in parallel with a history of computing, so the students learn things in essentially the same order as they were discovered.  They'll see initially how difficult it is to write machine code, but they'll see for themselves how a simple program calls functions and jumps around in memory, and gain an understanding of binary numbers and arithmetic.  They would then progress to simple interpreted and compiled languages.<p>This is pretty much the way I learned at that age, without much help.<p>The middle road would be to start with some interpreted language like BASIC or LOGO and teach from there.  I think this has the same weaknesses as the newer approaches without any of the strengths.<p>So am I crazy to want to teach machine language (albeit a simple one) to 10 year olds?
======
zeligzelig
My 2 cents. Kids want to have fun, and it would be awesome if they learned
something on the way. I don't think 10 year kids need to know assembly. Might
be better to plant a seed of "thinking like a computer scientist" and showing
them the concepts of programming than teaching them binary. (I was taught
binary at 10, and never touched it again until college...when I had forgotten
it all). What if students find your history of computers and computers 101
class too diffucult and not engaging...then you've turned those kids away from
ever becoming really interested in Computer Science.

Do kids really care about "really" learning the science? And it's true that a
bunch of kids won't ever progress further than making some fun presentations,
but what's wrong with that? Not all those kids are going to go on to become
computer scientists. For those kids who are really interesting in programming
and computers, they'll continue with it.

Creating things is a important part of learning. If kids make fun
presentations that they show off to parents and friends, they're gonna work
hard on it. Stepping through a program on a virtual computer enviroment
doesn't really allow for that.

The class you're proposing sounds like a class I took in college. You're
teaching 10 year old kids, my suggestion is to "dumb it down."

