CP4E was Re: Deitel and Deitel Book...

Geoff Gerrietts geoff at gerrietts.net
Wed Mar 6 19:32:20 CET 2002

Quoting Ramkumar Kashyap (rkashyap at sympatico.ca):
> This is extremely non-intuitive to most people.  Most 5,6,7 year olds 
> can speak fluently in their native languages, but how many of them could 
> tell you about vowels, consonants, nouns, verbs, adjectives.  In fact 
> quite a few of them speak multiple languages, can easily differentiate 
> sentence structures in those languages, but would be hard-pressed to 
> give defintions of the above.
> So how come in programming, we ALWAYS jump into the constructs of a 
> language, rather than just doing, gaining proficiency and then 
> understanding how it is put together?

I think the analogy here is interesting and useful, and bears
consideration. I think that what you're asking for -- a reexamination
of the pedagogy surrounding computer programming -- is useful.

I would hesitate to suggest that your methodology is exactly
appropriate, though. Here's why:

- Go speak to a five or six year old child for a few hours. Engage
  them in any conversation you like, but make them talk, make them use
  the language for an expressive purpose. Their facility with the
  language is reasonable at this age, but far from mastery. Only the
  mentally disabled standardize at this level; even the stupid
  standardize at grade 5 or older.

- Observe a two or three year old. Engage this child in conversation.
  It won't last long, but try it.

For the space of around three years, a child is immersed almost
constantly, from waking to sleep, and even sometimes while asleep, in
language. For those first three years, the child is almost completely
incapable of making him or herself understood.

Some of this is the challenge of spoken language, the challenge of
making your voice modulate to form the right sounds. Much research
exists to show how young children can learn to sign long before they
can learn to speak; if you eliminate the difficulty of speaking, you
might get it down to age 2 or so. That's still 2 years in which the
child can barely be understood if at all, and another three before the
most basic constructs are reliably produced.

People don't get smarter as they get older, they just have a better
foundation for building on. It would be just as difficult for someone
to learn programming through reading or transcribing lots of text as
it would be for someone to learn French by riding the Metro all day

People don't get "smarter" as they get older, though they do develop
strategies for learning that enable them to learn things more quickly.
Most of those strategies revolve around identifying patterns early,
and spending most of the learning time exploring the "borderline
behavior" that describes the limits of the pattern.

That's why we go into constructs early, because those are the
patterns. The next step for the educated learner is to explore the
limits of these patterns -- what they can and can't do. This is where
a great deal of practice can be immensely useful.

A heavily practice-based pedagogy could be a very good thing,
especially if the practical applications were designed to explore
recently-introduced concepts to show when the pattern applies, and
when it does not.

My belief is that most people find computer programming to be
difficult because logic is not the natural way people think; it is a
forced mode. People tend to think intuitively, using "gut feelings"
and good guesswork. That's the way we tend to summarize the knowledge
of our experiences: as gut feelings.

Expressing things in a purely logical fashion is consequently
difficult for people, and very few ever receive formal training in
logic. What's worse is that trying to teach logic at the fundamental
level doesn't immediately apply. Logic itself is a tool that a person
must learn to use, and could easily fill several courses by itself.

Geoff Gerrietts             "Punctuality is the virtue of the bored." 
<geoff at gerrietts net>                               --Evelyn Waugh

More information about the Python-list mailing list