From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: *** X-Spam-Status: No, score=3.8 required=5.0 tests=BAYES_00,INVALID_MSGID, RATWARE_MS_HASH,RATWARE_OUTLOOK_NONAME autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,97188312486d4578 X-Google-Attributes: gid103376,public X-Google-Thread: 109fba,baaf5f793d03d420 X-Google-Attributes: gid109fba,public X-Google-Thread: fc89c,97188312486d4578 X-Google-Attributes: gidfc89c,public X-Google-Thread: 1014db,6154de2e240de72a X-Google-Attributes: gid1014db,public X-Google-Thread: 10db24,4cf070091283b555 X-Google-Attributes: gid10db24,public From: "Tim Behrendsen" Subject: Re: What's the best language to learn? [was Re: Should I learn C or Pascal?] Date: 1996/08/14 Message-ID: <01bb89f1$31be4f60$87ee6fce@timpent.airshields.com>#1/1 X-Deja-AN: 174140843 references: <4u7hi6$s2b@nntp.seflin.lib.fl.us> <4uo74j$95p@ns.broadvision.com> <01bb8950$2c8dcc60$87ee6fce@timpent.airshields.com> <4urmvu$dfp@solutions.solon.com> content-type: text/plain; charset=ISO-8859-1 organization: A-SIS mime-version: 1.0 newsgroups: comp.edu,comp.lang.ada,comp.lang.c,comp.lang.c++,comp.unix.programmer Date: 1996-08-14T00:00:00+00:00 List-Id: Peter Seebach wrote in article <4urmvu$dfp@solutions.solon.com>... > In article <01bb8950$2c8dcc60$87ee6fce@timpent.airshields.com>, > Tim Behrendsen wrote: > >This is a perfect example of how students are being graduated > >without fully understanding what programming is all about. The > >phrasing is perfect: "I learned it..., but didn't understand it." > > >*This is how it happens!* > > We have absolutely no mechanism here, of course. > > >I interpret this to mean that he was struggling with all the > >abstractions while trying to master the concept of "thinking > >like a programmer". Meanwhile, they are packing algorithm after > >algorithm into his head when he is not prepared to understand > >what they are packing. > > I am not sure I buy your interpretation. Thinking like a programmer is > largely a matter of learning to find useful abstractions. How do you write > code to test whether a number is even? Well, you do it by looking at what > evenness is, and looking for what characteristics it has that would help you. But at some point you have to sit down and prepare an implementation, and that's when you know whether the problem is truly understood or not. Solving a problem is not an "abstraction" question, it's a question of breaking it down into fundamental steps of data transformations. Testing a number as even is transforming a number into a bit based on its evenness property. > >Now, what if they had started ol' Darin off with some very > >simple concepts in assembly, really showed him the procedural > >nature of the computer, data flow, data transformations, etc., > >and *then* moved on to algorithms such as Quicksort. You > >just plain can't fail to understand what's going on! > > But he would have been completely unprepared for whole families of computer > languages. So what? You can always learn languages, but you only have one shot at teaching someone to think like a programmer. *Programming is not languages*. Programming is breaking problems down into fundamental steps to achieve a desired result. The way the steps are described is not relevent to the general question of a solution. When we are talking about teaching a student, the less extraneous issues such as languages and the more experience we can given them of the fundamental procedural nature of the computer, the better. > If they'd started him off with explaining, in his native language, how to sort > things, and given him sample sets of cards to sort, while following each of a > set of descriptions *in his native language*, he would have understood > quicksort. > > You keep using assembly as an example of what the basics of computing are > like. Please explain how this is a better model *of the problem domain* than > lisp or C. Why should students try to learn machine-level and program-level > at the same time? If you want them to start with architectures, don't start > them on algorithms, start them on trivial data manipulation in assembly. It's a better model because it's real. C and all languages are artificial constructions intended for the maintainance of large projects. What gets missed in all this is that *computers are simple*! All they do in the fundamental sense is take a very simple instruction, execute it, and repeat very, very fast. If this is presented the first day, the student can't help but realize the simple nature of the computer, and it loses its mystery. Look at ol' Darin; if he didn't have enough brainpower left to focus on the algorithm at hand, what was he being confused by? I think it was by all the language and abstraction, which is not what programming is. If he had been given a solid foundation of the simple nature of the computer, I think he would always have a "comfort zone" he could return to whenever he didn't understand something, because it's *always* implemented in the fundamental terms. -- Tim Behrendsen (tim@airshields.com)