On 07/01/12 11:38 AM, Liam Proven wrote:
...
And also, what sort of programming the majority of them actually do.
Whether it is scripting or relatively simple system automation, or
macro programming in apps, or actual full-on application development,
or what?
Is there, I wonder, a line as to where simple tools and simple tuition
for nonspecialists might be appropriate - e.g. BASIC for schoolkids -
versus serious techniques and methods for those expected to be
professional developers - e.g. Scheme for CS undergrads?
One doesn't need to get very far into "scripting", web front-ends, etc
to benefit from *actually learning programming.* Even simple bash, PHP,
or JavaScript, and certainly SQL, benefit from a proper education. And
that means a good part of the curriculum of "The Structure and
Interpretation of Computer Programs". Sure, boil down the material into
simpler texts. That's been done; many citations were posted recently.
The idea that "oh, lots of people can get by doing this stuff without
education" only goes so far. It is not a problem for the highly
motivated, self-taught group who will eventually cover the same ground
themselves. But it can't save the rest. This fantasy, "I don't need to
learn more", seems to lead directly to the regrettable status quo.
On the earlier question of teaching kids, Joshua Bloch has this to say
in "Coders At Work":
Joshua Bloch
------------
... There's a certain precision of thinking that comes with doing math.
I coached a Math Olympiad team for fourth and fifth graders. This is
just the age at which some kids are starting to understand, at some
level, the notion of a proof---that a proposition can be demonstrably,
unequivocally true rather than just "I think it's true because here are
a few examples were it seems to work."
In order to understand the notion of an invariant, you have to
understand the notion of a proof. Unfortunately, there are plenty of
adults who don't. And it's a style of thinking that's typically taught
in mathematics classes.
Seibel
------
You almost wonder if maybe the better forum to teach that kind of
thinking would be in programming. If you just taught programming as
being about invariants---
Bloch
-----
To a certain extent I agree, but you can go too far in that direction.
Then we're back to Dijkstra. ... Dijkstra says you shouldn't even let
students even touch a computer until they've manipulated symbols,
stripped of their true meaning, for a semester. That's crazy! There's a
joy in telling the computer to do something, and watching it do it. I
would not deprive students of that joy. And furthermore, I wouldn't
assume that I could---computers are everywhere. Ten-year-olds are
programming.
...
[ snip anecdote about a difficult bug in a C program where stack and
thread local storage were being silently smashed ]
This is an example of why you need safe languages. This is just not
something that anyone should ever have to cope with. I was talking to
someone recently at a university who asked me what I thought about the
fact that his university wanted to teach C and C++ first and then Java,
because they thought that programmers should understand the system "all
the way down."
I think the premise is right but the conclusion is wrong. Yes,
students should learn low-level languages. In fact, they should learn
assembly language, and even chip architecture. ... they'll be much
better high-level language programmers if they understand what's going
on in the lower layers of the system.
So yes, I think it's important that you learn all this stuff. But do
I think you should start with a low-level language like C? No! Students
should not have to deal with buffer overruns, manual memory allocation,
and the like in their first exposure to programming.
---------
--Toby