[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Beginner to programming. References to understand terms.
- From: Hisham <h@...>
- Date: Wed, 26 Apr 2017 18:08:04 -0300
On 25 April 2017 at 10:48, Roberto Ierusalimschy <email@example.com> wrote:
>> BASIC on the Apple II was in many ways the ideal beginner's language.
> Dijkstra famously said:
> It is practically impossible to teach good programming to students
> that have had a prior exposure to BASIC: as potential programmers
> they are mentally mutilated beyond hope of regeneration.
> I am fully convinced that this citation did (and still does) a huge
> disservice to the teaching of programming.
I don't dispute that, but as someone who started programming with
BASIC myself (on the Apple II, no less!) I can attest that this
citation has at least some grain of truth. To this day I think very
concretely — but take into consideration that I learned that x=2 is a
stateful variable assignment _years_ before I learned that x=2 is a
mathematical equation (yes, I learned programming before elementary
school algebra). In general I was able to overcome it — I was still an
A-student in math in elementary school and I don't recall getting
confused, but to this day I have a major problem with the shortcuts of
more advanced mathematical notation. I realized that I parse math like
a computer, so to me a lot of the stuff that math teachers write in
their blackboards are full of (what today I know how to call) type
errors. In fact, my mind thinks so mechanically that I remember one
instance where I turned in an assignment to you in Semantics class and
you asked me if it was done using proof-assistant software, because
every single step was spelled out no matter how trivial it was. :)
I do remember one occasion in which this
mechanical-imperative-interpretation kind of thinking caused me
trouble, though. The first database I learned was dBASE during high
school, in which you always had to iterate tables using WHILE loops.
When I got to the Databases class in college I had the _hardest_ time
learning SQL, because my brain simply could not accept the magic that
was going on in queries. Since I couldn't produce a mental model for
executing those queries efficiently myself, my brain couldn't produce
solutions that involved nested projections, selections and joins
without being mind-boggled by all the gigantic intermediate tables
that conceptually exist in the naive explanation of the model. I kept
approaching problems in that class as "which table should I loop over
first and where do I store this data". Since then, I got better at
abstraction, but I think imperative interpretation will always be my
most natural way of thinking.