On Tue, 3 Jan 2012, Toby Thain wrote:
Of course, I meant to qualify this as: "for a
beginner", which is the
point here.
It is, indeed.
Since modelling and abstraction are far more important
parts of
"programming" than syntax, BASIC fails completely:
- full of irrelevant lexical bullshit and limitations (line numbers?
what good is this to a beginner?);
- numbers, strings, fixed length arrays? that's it? How do I build
anything else? Oh right. I can't.
- most BASICs lack structured programming primitives, so even as an
IMPERATIVE language it fails to teach important patterns from the 1980s
(which might explain some of the code I see around the place);
- lacks named functions & procedures (yeah, some BASICs have a
crippled hack for this; see lexical bullshit above) - a fundamental
abstracting/factoring tool.
- etc, etc.
Now with Scheme,
- you start with a syntax that is not pedagogically toxic;
- you have the breath of a hope of constructing useful data structures
without artificial limitations which can only frustrate;
- there is the opportunity to introduce more theoretical load, which
is good. The door is always unlocked to go beyond where one already is.
There is nothing here that cannot be taught to a high school age student.
Just wait until you try teaching the same things to ADULTS!
You need to get some of them to the point of understanding that they need
to set the values of the variavbles BEFORE they do calculations based on
them. Yes, I am talking about otherwise fully functional intelligent
adults, not college administrators.
The conclusion YOU come to is that Scheme isn't
relevant to programming.
But in fact the opposite is true: A good part of what you have been
indoctrinated with, from BASIC onwards, *obscures* what is really going
on when you program. Programs are not "sequences of instructions" except
at the absolute bottom-most level.
"abstraction"
<sigh>
We do not need *another* generation of programmers for
whom recursion
and higher-order functions are alien concepts. Worse: Not given proper
tools, mental and literal, for modelling and abstraction. Abstraction,
it can be argued, is the single most important idea to learn as a
computer programmer.
baby duck syndrome.
I too learned with assembler, BASIC, Pascal, C, and so
on; but I didn't
really learn anything except how to navigate limitations. Ugh. If only I
had picked up Scheme when I picked up C.
I think that it is just dandy as SECOND language.
Seriously,
most people are not very smart. BASIC has a fairly low
entry level - the learning curve is modest. The reason that most of
the other "teaching languages" designed to replace it haven't worked
out on anything like the same scale. (E.g. Logo, Scheme)
Concepts such as local versus global variables, scope, recursion and
so on are complex, difficult stuff unless someone is both very very
Actually none
of these are more difficult than the artificial hurdles
BASIC puts in front of you. Once again you speak from your confessed
"imperative place".
all of the hurdles are important to learn.
But NOT until one has had a successful experience of putting their own
name on the screen.
Now imagine that you had learned Scheme first. Would
you say recursion
was hard? How will you program effectively in 2030 without dealing with
higher order functions, continuations, immutable state? (How can one do
it today, for that matter; only because in software Things Move So Damn
Slowly.)
baby duck syndrome
Kids being educated for a career in software starting
today deserve
something better than BASIC. Things are bad enough already.
"They should start with SOLDER!"