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=-1.9 required=5.0 tests=BAYES_00 autolearn=ham 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: 103376,97188312486d4578 X-Google-Attributes: gid103376,public X-Google-Thread: 1014db,6154de2e240de72a X-Google-Attributes: gid1014db,public From: huang@mnsinc.com (Szu-Wen Huang) Subject: Re: What's the best language to start with? [was: Re: Should I learn C or Pascal?] Date: 1996/08/08 Message-ID: <4ud8m5$ka5@news1.mnsinc.com> X-Deja-AN: 172945633 distribution: inet references: <4uaqqg$203@mulga.cs.mu.OZ.AU> <01bb84b4$75304ce0$87ee6fce@timpent.airshields.com> <4ubnhr$714@news1.mnsinc.com> <01bb8536$892ee260$87ee6fce@timpent.airshields.com> followup-to: comp.lang.c,comp.lang.c++,comp.unix.programmer,comp.lang.ada organization: Monumental Network Systems newsgroups: comp.lang.c,comp.lang.c++,comp.unix.programmer,comp.lang.ada Date: 1996-08-08T00:00:00+00:00 List-Id: Tim Behrendsen (tim@airshields.com) wrote: : Szu-Wen Huang wrote in article : <4ubnhr$714@news1.mnsinc.com>... : > 1. Being able to write algorithm X in assembly doesn't make you : > understand the algorithm better. It makes you understand whatever : > platform du jour your school uses better. : > 2. Vaguely understanding 5 algorithms is far better than understanding : > one or two fully. The primary objective of algorithms courses is : > to produce students that can *choose* which algorithm to use, : > not to produce students who can memorize one or two algorithms. : > In fact, there's rarely a programmer more dangerous than one that : > has no broad knowledge of algorithms. : My point is someone who has "vaguely" learned five algorithms has : simply memorized them, and learned nothing about the general : principles of how algorithms are created. No, your point was writing an algorithm in assembly helps to understand it fully. I'll be my own case in point. I remember most sorting algorithms vaguely, and I probably could not implement all of them off the top of my head. Does that hamper me? No, because I know which book to look them up in, and that's exactly what books are for. The important thing, however, is that I remember that O(n^2) is bad for a sorting algorithm, and O(n lg n) is pretty good. Now, what about your student that knows *one* algorithm? : Someone who has "the feel" for two algorithms very strongly are : more likely to be able to extend that knowledge to creating new : algorithms. Uhm, theoretically. Somebody with only in-depth knowledge of run- length encoding is not very likely to come up spontaneously with Huffman or arithmetic compression. : Computer Science is one of the few, if not only, sciences where a : student can derive all of it just by thinking. Assuming the student doesn't have a deadline and all day to think for 40 years. Many algorithms are obvious. Insertion sort, for example, is what a human would do (if somewhat parallelized). Quicksort, on the other hand, is nowhere near intuitive. Be realistic. : > [snip] : > If you think software engineering is easily learned, you obviously : > haven't been in the real world. : I live lame software engineering every day, believe me I : understand the level of general ignorance. You can always : fix someone's style, but you must plant the seed of thought : early on. Are you asserting that teaching software engineering instead of assembly language will somehow make the student unable to think? Assembly language is a powerful tool best used by experts, not beginners. Beginners do not have the knowledge to use them properly, and tend to get caught in details and miss the big picture. If you give an assignment of "implement quicksort in PC assembly", how much effort is spent in: 1. the algorithm 2. I/O 3. OS/platform intricacies 4. debugging ? I would imagine your goal would be to maximize #1, which is why a HLL is better for the purpose. : > I thought you just said it was better to "truly understand one or : > two algorithms"? Make up your mind. General knowledge, or specific : > knowledge? : Truly understanding two algorithms is better than memorizing five : algorithms, because that is what *gives" the fundamental : understanding. Fundamental understanding of RLE has little, if not nothing, to do with Huffman compression. Fundamental understanding of quicksort has nothing to do with heapsort either. : > Teach a man an algorithm and some I/O routines to enter the input : > and display the output, then some routines to set up the stack, : > then some routines to initialize data, : Yes, and wouldn't they truly understand I/O routines and stacks : after that? They would, but would they understand the algorithm? : > then some reasons why : > instruction X cannot follow instruction Y, then some reasons why : > a small memory model isn't enough, and you confuse the man for : > life. : Yes, if your model is the brain-damaged 8086 model. I personally : would use a 68000 to teach on because it's a nice straight-forward : orthogonal instruction set. It doesn't matter. You are burdening beginners with details that you could've avoided by using an HLL. My school was contemplating teaching one freshman class Prolog as a first language and another Pascal, then switch in their second year to observe which was more effective. It's too bad the experiment has practical problems, because it would be interesting to see if it's easier for a "recursive- minded" student to study iteration or the reverse. In any case, you want to train students in problem solving, not why the OS requires value X in register Y.