Hello,
I have followed this thread now for a while, and cannot resist to add a
few
words. (Background: Freelance Programmer/Sysadmin with quite some
experience
in teaching ‘Something about Computers’, including various programming
languages. No LISP or Scheme, though.)
Jeremy T. wrote:
On 11-Jun-06, at 12:55 PM, Nicholas E. wrote:
[Ruby or Scheme as programming language?
If you can teach someone to program, learning a new language isn’t going
to be a big problem. Your decision should be less about the language and
more about the concepts you need to be teaching.
I have to support and stress that point. The biggest mistake in a lot of
courses seems to be that the instructor mixes up ‘How to program’ with
‘learning a specific programming language’. The most basic concepts
(calculations, conditions, operators) can be taught with the help of a
multitude of languages. The ‘not-so-basic-anymore’ stuff (for example
variables, functions/procedures, assignment …) will exclude a handful
from
the set, but there’s still enough left.
But all of these things can be presented even without the use of any
language.
These concepts should be like templates or blueprints: (Almost) every
language
has/needs those, and the only difference for the programmer is the
syntax.
Especially for a non-technical person, approaches that use metaphors and
‘real-life examples’ are easier to understand and realize.
It really doesn’t matter which tools you use to visualize and exemplify
those
concepts. The real focus in this phase should be the ease of access to
the
tools of choice for the student. In this case, a scripting language has
immense advantages over every compiled language: no wait for success.
But I
digress.
The more advanced topics will sometimes be bound to the use of a certain
language, but what good does that? Knowing about specifics of a
programming
language does as little for programming skills as knowing (only) about
MySQL
(or dBase, or BDB) teaches about databases. With good basics, though,
one can
come far.
All in all, an understanding is much more productive and helpful than
mechanical repetitions and ‘cookbook recipes’.
So, given all of that, I have two questions for ya, list. One, do you
think there’s any merit from teaching pretty non-technical sophomores
in highschool Ruby over Scheme?
For me, it’s all about the question ‘Which tools will enable the student
to
learn without being sidetracked or even hindered?’
AFAIK, DrScheme or Smalltalk have a clear advantage there. Knowing only
the
latter, I dare to simplify: the IDE is the VM is the IDE. Now, my
personal
preference is still Ruby.
First reason: Because I can – without having to specify anything –
leave the
choice of the most important tool, the editor, to the students whose
interests
are deep enough for making that kind of choice, and show the other
simple yet
powerful alternatives (my own choice doesn’t count, as I personally
prefer
vim, but wouldn’t try to force anyone to make use of all the builtin
goodness).
The second reason is the ultimate blackboard, the try-and-error
playground
which is built in: irb. Readline support, even completion is available,
and
the success for the most basic things is immediately visible, which is
invaluable for overall success and progress.
In the end, it’s all about personal preference. If you feel more
comfortable
with Ruby, stick with it. If any other programming languages feels more
natural to you, and you manage to explain the most basic concepts to
someone
new to programming with the help those, stick with that.
No, I don’t. Keep the language simple, teach them how to program; those
who continue on with programming will find languages that they wish to
pursue, and will learn those when the time is appropriate.
This is the second statement I want to support with all emphasis. The
/concepts/ are more important than any specific language skill at the
end of
the day. There is no need to teach every possible way (as mentioned
somewhere
else in this thread): the skillful will find the way, the less skillfull
will
work with what has been given to them.
Now, I want to freely comment on some other statements within this
thread:
It seems that sometimes ‘learning how to program’ is confused with ‘not
having
fun’ or even ‘no pain - no gain’. I had the mixed blessing to learn
various
things (not only programming) from very different people. The things I
remember best and that helped me most were those where learning was
coupled
with ‘having fun’. And nowadays, where we have (as instructors) the
freedom of
choice of tools, why should we still transfer ‘our’ pain of the past
onto the
back of our poor students?
Or maybe it’s just elitism, and the creepy feeling that these days
‘hackerdom’
isn’t as removed from ‘the masses’ as it has been?
On another note: if a certain concept doesn’t exist in a certain
language, and
the concept is too important to be skipped, why sticking to one language
all
the time? If it’s really that necessary to teach it, there’s ways
around the
‘restrictions’ we put on ourselves. I do not preach babylonic confusion,
but
eclectic picking of choices.
Yes, the signature is random, no, I didn’t pick it. Neat fit, though.
I’ll leave it at that.
t.