"Oh goodie, a holy war :-)" [seen on usenet] Well, this is a long
thread (and yes, I've read it all) and I feel like replying at almost
every point so I'll reply in one piece ;).

I've learnt mainly Pascal for my 5 points bagrut.  Now that I think of
it, the most characterizing thing about this is that in all 3 years I
don't remember ever hearing the word "library"!  If I didn't know
programming from books by then, what kind of perverted view of it one
must get from such education?!?  Now this is perfectly in-line with
Pascal's philosophy: it's a language created for writing dicosnnected
pieces of algorithms, no longer than 20-30 lines, on a blackboard.
Originally it didn't even have I/O.  Without the concept of libraries,
it's completely disconnected from any real programming.

I strongly believe that before learning how to sort an array, one
should get the slightest idea of the big picture of programming:

- Why the first reaction to "here the problem and here are your
  tools" should be "these you call tools?!" ;-) and why every
  real-world problem is better handled by many layers of tools.

- Why do we keep building ever higher abstractions.

- How we combine code into bigger programs.

- Why we seek simple, well-defined interfaces and how they create
  various paradigms for composing our programs - functions, libraries,
  pipes, processes, client/server, objects, etc.

- Why every second thing in computers is a tree that can be nested
  arbitararily, why every array must be resized one day and why we
  turned to virtual memory instead of hand-managing overlays.  The
  "zero, one, infinity" rule.

- Why we document our programs, how hard is it to debug and maintain
  them and what can we do to ease it.  "Programs must be written for
  people to read, and only incidentally for machines to execute."

No, none of these things can be mastered by somebody who doesn't know
to sort an array.  But he should be told about them from day one, and
showed how they occur in each and every exercise he does.  By teaching
me on programs that fit into a single file, use only the language's
primites and end with a period, my school lied to me about the essence
of programming.

These things are not only essential to understanding what it's all
about, they translate to essential skills for programmers: not only
good "software engineering" but also the abilities to read other's
code, to find the things one needs in a libraries, to tell good tools
from bad ones quickly, to learn new languages, to cooperate with other
programmers, to write good documentation, to use version control tools
well, etc.  OK, I show some pro-FOSS-development bias but he who
masters such development will be a good commercial programmer too.
I've yet to see commercial programs that are up to GNU software
quality standards.

And while all these are hard to test on, I believe they must be
included in school education.  I think a teaching program encompassing
these things would be more beneficial than any particular language,
kernel or paradigm.  It takes a lot of wisdom to create such a
teaching program.  But a lot of it is availiable (which reminds me
that on <http://www.education.gov.il/scitech/toch.htm>, IT is the
*only* subject with no learning materials availiable!).  Not all free
but what do schools have libraries for???

- `Structure and Interpretation of Computer Programs`__ and `How
  to Design Programs`__ which *are* actually used (or at least
  recommended) for teaching of Functional Programming in Israel.
  Too bad it's not widespread enough.

  __ http://mitpress.mit.edu/sicp/
  __ http://www.htdp.org/

- `The Art of Unix Programming`__ has all the wisdom long
  attributed to `The Unix Programming Environment`__  (and more).

  __ http://www.catb.org/~esr/writings/taoup/
  __ http://cm.bell-labs.com/cm/cs/upe/

- `The Jargon File`__ captures the spirit of hacking.  How would
  you teach one recursion if not by saying "see Recursion"?

- "The Mythical Man Month" is a must.  `The Cathedral and the
  Bazaar`__ captures the best known way to battle its predictions.

  __ http://www.catb.org/~esr/writings/cathedral-bazaar/

- Paul Graham's articles__ have a lot to teach.

  __ http://www.paulgraham.com/articles.html

- A good point for more of these is http://c2.com/cgi/wiki?BookList

But there is one more resource, at least as valuable: free code!
There is a lot of beautiful code that has been read and polished by a
huge number of good programmers out there, er, here - in FOSS.  I
think the MoE could use a teaching program were for a change real code
is shown to students, in big quantities.

-- 
Beni Cherniavsky <[EMAIL PROTECTED]>

An Anti-Idiotarian Manifesto:  http://www.catb.org/~esr/aim/

=================================================================
To unsubscribe, send mail to [EMAIL PROTECTED] with
the word "unsubscribe" in the message body, e.g., run the command
echo unsubscribe | mail [EMAIL PROTECTED]

Reply via email to