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=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: fc89c,97188312486d4578 X-Google-Attributes: gidfc89c,public X-Google-Thread: 109fba,baaf5f793d03d420 X-Google-Attributes: gid109fba,public X-Google-Thread: 1014db,6154de2e240de72a X-Google-Attributes: gid1014db,public X-Google-Thread: 103376,97188312486d4578 X-Google-Attributes: gid103376,public From: seebs@solutions.solon.com (Peter Seebach) Subject: Re: What's the best language to start with? [was: Re: Should I learn C or Pascal?] Date: 1996/08/08 Message-ID: <4udbin$7tj@solutions.solon.com>#1/1 X-Deja-AN: 172993629 references: <01bb846c$e51df220$87ee6fce@timpent.airshields.com> <4uahfe$bao@solutions.solon.com> <01bb853c$be3b2620$87ee6fce@timpent.airshields.com> organization: Usenet Fact Police (Undercover) reply-to: seebs@solon.com newsgroups: comp.lang.c,comp.lang.c++,comp.unix.programmer,comp.lang.ada Date: 1996-08-08T00:00:00+00:00 List-Id: In article <01bb853c$be3b2620$87ee6fce@timpent.airshields.com>, Tim Behrendsen wrote: >Peter Seebach wrote in article ><4uahfe$bao@solutions.solon.com>... >> Huh? >> The basics of algorithms are hidden from them, when they are sitting >> around counting bytes and remembering the mnemonics for operations. >> Assembly has more syntax per operation done than anything else. >But the syntax is very straight forward and direct. There are >very few operations in assembly that need to be learned. Fine. Use scheme or lisp. Or C. I betcha C has fewer operators, keywords, and standard library functions than most processors have instructions. :) Sure, you don't need all of the instructions. You also don't need about 80% of C for most teaching work. >> C will teach you at least as much about quicksort as writing it in >assembly. >Yes, but will it teach you as much about *computers*? The reality >is that the computer does not execute C. No, nor does it execute assembly. It executes machine code. One does not learn C, or any other language, to learn about computers. If you want to learn about computers also, this is a good thing, and may well help you. Learning C is, IMHO, a better way to learn about computers than assembly. It shows you the operations, rather than the noise. >Algorithmic >> analysis cannot be more important than abstractions, because it's a >subset of >> abstractions. >That is simply not true! That is like saying that thought is >a subset of language. Thoughts are expressed in language, >but they are not dependent on a particular language. Not all thoughts are expressed in language. If they were, thoughts would be a kind of language, distinguished from other kinds by some set of traits. All algorithmic analysis analyzes the *principles* of algorithms, not the details of specific real implementations. >I don't know about anybody else, but when I think about an >algorithm, I have a visualization of the data moving around >and going through transformations. I get a feel for the >efficiency by thinking about how much work is involved in doing >the movement/transformations. I want students learning these >concepts for the first time to get this same feel, without >vaguely memorizing algorithms, which is what I think happens >now. I haven't memorized an algorithm in my life. If I want to do something, I either think about how it would be done, or I copy it from a likely source and ignore it. Frequently, an understanding of the algorithm is not necessary to what I need it to do. I also don't understand the file system structures used by any of my computers, nor do I understand the scheduling algorithms used by any of them particularly well. I tend to agree with you on this. I just don't think that assembly is the best way to teach these visualizations. >I think one of the reasons algorithms get memorized rather >than learned is that they are protected too much by the >abstraction of arrays, rather than the reality of memory. Memory is not a reality, it's an implementation. A student's comprehension of data had *better* not depend on memory, or that student will choke badly on trying to implement merge sort on tapes. Arrays are *one kind* of data structure. The belief that data is always conveniently available in some sort of table or memory is dangerous, too. (For that matter, an elegant and efficient way to sort an array fails miserably on a linked list, even though both may be stored in memory.) -s -- Peter Seebach - seebs@solon.com - Copyright 1996 - http://www.solon.com/~seebs Unix/C Wizard - send mail for help, or send money for consulting! The *other* C FAQ, the hacker FAQ, et al. See web page above. Unsolicited email (junk mail and ads) is unwelcome, and will be billed for.