Jules Richardson wrote:
So the boy (9yr. old) was asking last night about how computers work...
any recommendations for good books for learning the basics from? I think
I started out with a Sinclair Spectrum and its BASIC manual, but I
really don't recall now where I found out about the fundamental building
blocks of [typical] computers and how a CPU worked. There must be a good
'classic' "how computers work" type of book which avoids going on about
PCs and Xboxen...
I figure I should find him one of those kids electronics projects kits
too (I think that was where I got my first exposure to logic gates from
at about the same age) and also some old 8-bit machine to play with.
It seems like you want to teach a number of different things. Although
they interact, I think the learning of each is separable.
There is the electronics aspect ...
then there is the low level machine code and binary aspect ...
then there is the higher level programming language aspect
Which end to you want to start from? If you toss it in together all at
once the task is much bigger to teach, and I think more confusing to learn.
I'd say let it be dictated by your son's interest. Is he more
interested in wires, batteries and lights? Or is he mathematically
inclined and would get a kick out of learning binary? Or does he want
the fastest path towards getting interesting feedback (in which case
start with the higher level language).
People frown on BASIC and hold their noses, but I think it isn't so bad
as a first language; use a dialect that allows long variable names, has
subroutines with local variables, etc, and it will be fine. If the
machine has color graphics accessible from BASIC, you can very quickly
get exciting visual feedback with short programs.
Teaching C or PASCAL as a first language would test the patience of the
typical 9 year old, what with having to declare everything before using
it and having sophisticated but subtle syntax. If he takes a shine to
programming, then introduce the cleaner, more powerful languages.
Actually Python might fit the bill for both cases ... don't worry about
the OO stuff and just use it as a simple language at first.
If he wants to learn machine language ... you might consider the
classic, CARDIAC, originally produced by Bell Labs. I don't know if it
is still accurate, but just googled and as of 1998, you could still buy
them new. The following page has some pictures of the unit and a
description of using it, along with an address of where to buy it.
http://www.larkfarm.com/cardiac_answers.htm
It is a machine language, but decimal, so you can decouple learning
binary from the concept of machine language.
java cardiac simulator (I haven't tried it):
http://sourceforge.net/projects/cinc
My kids are a little bit too young for all of this (just turned eight),
but I'd love to hear others' opinions for in a year or two it will be my
turn.