D in the ix magazine about "programming today"
Nick Sabalausky
a at a.a
Sun Dec 27 09:55:42 PST 2009
"bearophile" <bearophileHUGS at lycos.com> wrote in message
news:hh76ur$1thp$1 at digitalmars.com...
> Georg Wrede:
>> - It has to be compiled to genuine executable code.
>
> This is a very interesting topic, but I don't agree with some of your
> ideas.
>
> I think that today there are no languages really fit as first language.
> Every language has downsides if you use for that purpose. And the sad
> thing is, if you design a language for teaching, it probably comes out as
> a toy language that no one wants to use anyway.
>
> Said that, a teacher has to choose a language anyway. In my opinion the
> best languages for such purpose are Python, D1 and Java. Other
> alternatives are StarLogo (And its variants, like NetLogo), Processing,
> the Logo that can be used to control Lego, and few others.
>
Java can be ok *only* if you start from an imperative standpoint and not an
OO standpoint. Years ago, I spent some time as a CS 101 tutor, and the
school (a Java school) had two CS 101 instructors: one (teacher "A") started
with imperative programming and taught flow-of-execution and flow control
and then functions, etc, (and glossed-over the "class MyApp{ static final
void Main() {} }" boilerplate) and only moved on to OO once the students had
a good grasp of the imperative stuff. The other teacher ("B") started
straight into OO, and only moved on to flow-of-execution late in the
semester.
I got a number of students from both teachers, but noticed an interesting
pattern: Every single one of the students I got from "A" already had a solid
grasp of the material. Their work was already completed and they had only
come to me to have it double-checked. I don't remember any of their work
ever being wrong. There were a few cases where I'd gave an extra little tip,
but they clearly knew what they were doing.
By contrast, every single student I got from class B was completely
bewildered, couldn't make head or tails of any of it, and essentially needed
to be completely taught again from the beginning. A number of them I had to
refer back to their teacher because they were so confused about it that the
only way I could have helped would be to develop a full CS 101 lesson plan
of my own, and #1, I felt that would be overstepping my bounds, and #2, at
minimum wage, that wasn't my f*ing job (actually, my real job there was
"computer lab monitor", but the CS dept noticed that I knew what I was doing
with code, so they asked me to help tutor while I was there. Of course, why
a private non-party college with high entrance standards felt that they
needed a hired babysitter was, and still is, completely beyond me, but hey,
I was more than happy to take their money while I did homework, after all,
they sure as hell were taking a fuckload of my money, and providing jack-all
in return.).
But, I'm not convinced that professional languages (not that I consider Java
professional in any way) should be used as a day-1 starting point. They
absolutely should be taught relatively early, and any advanced programming
concepts should be taught using them (or with psudo-code and implemented
directly in a real language). But for most beginners, those languages are
way too dry (and I don't mean "don't repeat yourself" DRY, I just
mean....dry.).
For most people, programming is like math, it's a bunch of boring abstract
formalities. To prevent people from being turned away right at the
beginning, I think it's best to start with something that has a very high
degree of immediate *and interesting* feedback, and with minimal effort and
trip-ups. In other words, something like BlitzBASIC or DarkBASIC, that do
very easy pictures, sounds, and games (But not flash, because #1,
ActionScript and the Flash IDE are absolute fucking messes in any version
and that's only going to serve to confuse them, plus, since Flash is,
unfortunately, used frequently for real-world-work, it's unlikely they'll
ever come to understand why Flash and ActionScript are pure shit). The other
nice thing about that sort of language is that there's a lot they're not
suited for, so it'll be easier to ween them off when the time comes to move
to a professional language (which should be done *while* explaining in
simple terms why certain things are harder or more work than what they'd
been doing before, and what that's ok, or even desirable). You don't start
cooking with blowtorches, gas burners, and double-boilers, you start with a
toaster and a microwave, *then* learn the how's and the why's of the
trickier-but-better tools.
A lot of people would probably disagree with much of the above because "You
can't unlearn something", but I've always felt that's a complete load of
bullshit. Of course you can, and painlessly too. I've done it plenty of
times. In kindergarten, I spelled "of" U-V. Obviously I unlearned that,
along with the bullshit claim about what sounds the letters O and F "always"
make in the english language. Anytime you've ever been corrected on
something, or corrected yourself on something - guess what? You've
unlearned!
Example:
First grade teacher: "You can't subtract a bigger number from a smaller one,
2-5 can't be done."
Student's internal knowledge: "Bigger numbers can't be subtracted from
smaller ones, 2-5 can't be done."
Fifth grade teacher: "Your first grade teacher was a liar: There are
negative numbers: 2-5 = -3"
Pop quiz, assuming there's no retardation involved (and I mean that word in
the clinical sense...which reminds me: "PC" police can kiss my ass) what's
the student's internal knowledge now?
A: "Bigger numbers can't be subtracted from smaller ones, 2-5 can't be done.
My teacher keeps saying 'blah blah blah blah blah' and his words are
nonsensical gibberish."
or
B: "I was mistaken, I *can* do subtraction like 2-5, the result is just
negative."
So to any programmer, engineer or scientist who's ever been taught in grade
school that subtraction of a greater number from a lesser one is impossible
(see, there's another thing successfully unlearned - values are "greater"
and "lesser", not "bigger" and "smaller"), don't ever try to tell me that
unlearning is difficult or impossible.
More information about the Digitalmars-d-announce
mailing list