"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]
