Hello fellow Rubyists,
I’ve just come back from a trip home* and was surprised to find my
sister
very enthusiastic about programming and wanting to continue our lessons.
- Yes, a trip home. I spend most of my life in the dorms of the Israeli
Institute of Technology (BTW, I’ve heard of other Rubyists there. Would
a
RUG be appropriate?)
To those not familiar with the story (previously discussed here), I’ve
tried
teaching my 13-year-old sister programming more than twice. At first, I
used
C and tried to get her to create text adventure games as a way to
interest
her. It simply didn’t work.
Her English isn’t perfect and combined with the C syntax and extra
commands
needed to invoke an editor, gcc and the program, it was too much for her
to
remember at once and she just didn’t like it.
After two or three times I gave up, but lately I gave it one more try,
this
time not touching a computer:
I took a sheet of A4 squared paper and an orange pen (and a ruler,
although I later found no use for it) and taught her turtle graphics in
HEBREW, serving myself as a substitute for an interpreter.
It took about half an hour for her to grasp variables, loops and
control
structures.
We started to talk about programming theory, now that she had enough
theory, and I was amazed to hear her suggesting the abstraction of
functions.
She had to sleep and I had to leave.
A month later, I come back home and find her enthusiastic to learn more.
But now I’m confused over my head with the dilemma of what to teach her
next:
- C has proven to be a no-go, although it’s what I myself wish I’d
have
learned first. - Pascal, C++/Java are crossed out for personal opinion.
- Lisp would be a great environment in which to build on the idea of
functions as the universal abstraction (and a very very simple syntax is
a
huge pro), but reverse-polish is yet one more thing to confuse her with,
and
I’m not sure what environment to use within Lisp (some GUI library? a
turtle-graphics environment? pure text?) and what libraries exist to
support
these in ways that would be easy for her to learn. - Squeak seems like a really great thing to teach, and Smalltalk a
great
language (simple syntax and ideas), but I can’t seem to do useful things
in
Squeak myself (perhaps I didn’t find the good resources? If so, could
someone point me to them?) - Other languages people seem to love and I don’t know might include
one
more befitting (perhaps Haskell? ML?) - I can’t find any advantage to Python over Ruby
- I’m considering LOGO, esp. after browsing through this text:
http://www.cs.berkeley.edu/~bh/v1-toc2.html
My only problem is with interaction-with-the-outside-world. - I love Ruby and it is the language I would LIKE to teach, but I have
a
few doubts:Discoverability would be greatly diminished by her beginners’
English
Ruby has a LOT of syntax, which would confuse her
Lisp and Smalltalk have very simple models underlying code
interpretation, which make it very easy to grasp how programs are
executed.
Lisp has the same model I’ve already explained to her, and Smalltalk’s
would
be really simple to explain. Ruby has a very complicated model (well,
everything is an object or a message, but each certain thing maps to an
object or a message in a different way to make it the most convenient to
use.More to the point, not everything LOOKS like an object or a message,
and
most things are intentionally disguised to look more like Algol. M-Exps,
anyone?) that it would be REALLY hard for me to explain to her.
Thus,
I’m afraid, I won’t be able to teach her ALL of Ruby (e.g. how to
metaprogram, how to read code that uses metaprogramming) and she will be
left knowing only half a language (When I learned Ruby I’ve had
familiarity
with how computers execute code on all levels, and thus intuitively
understanding how ruby code is interpreted was simple, but when I think
about it, it’s very complicated for someone who isn’t used to think like
a
computer)
Ruby culture, I think, is a lot about making things a programmer
already knows easier to use (e.g. _why’s Camping or Rails, both of which
let
you write Ruby code that translates almost linearly to many other
languages
and protocols used in Web D.)
I’m posting this to the Ruby list, of all lists, for a few reasons:
- I really hope to get responses that convince me to use Ruby
- Ruby guys know their stuff and aren’t too religious
- I just like this list
- This can spawn an interesting discussion on teaching programming to
beginners, esp. those who aren’t fluent in English
So, what do you think? What language should I teach her, and what should
I
teach her to do with it first?
I guess I should state my intentions first, so here they are:
- I want it to always stay interesting and intellectually stimulating
for
her. I want her to want to discover new things and be able to (this also
speaks of documentation. QBASIC, my first language, had the best
documentation-in-IDE I’ve ever used, since it was so small and F1 would
get
you to what you wanted, always, with examples. But QBASIC had an
advantage
that what I teach will not have: it didn’t need to interact with the
outside
world) - I want her to be able to continue on her own as quick as possible
- I want her to emphasize on abstraction as a means of solving problems
- I want her to be able to interact with the outside world
Can’t wait to hear back,
Aur S.