Path: utzoo!utgpu!water!watmath!clyde!rutgers!cmcl2!nrl-cmf!ames!sdcsvax!ucsdhub!hp-sdd!hplabs!hpda!hpesoc1!hpcllla!hpclisp!hpclskh!skh From: skh@hpclskh.HP.COM Newsgroups: comp.lang.misc Subject: Re: Languages and learning (was: Philosophy of C) Message-ID: <960004@hpclskh.HP.COM> Date: 25 Jan 88 17:44:49 GMT References: <3473@ihlpf.ATT.COM> Organization: HP ITG/ISO Computer Language Lab Lines: 74 >>In article <11348@brl-adm.ARPA> dsill@NSWC-OAS.arpa (Dave Sill) writes: >>In article <4186@eagle.ukc.ac.uk> "H.A.Shaw" writes: >>>I wholeheartedly agree, and hope I write better C >>>programs now for three years of BASIC/PASCAL/FORTRAN/FORTH first. >>>They did teach [C] to third year Computer Scientists sometimes. >> >>This is much too late. Computer education should proceed from a >>hardware overview to machine language to assembler language to low- >>level compiled languages on up to high-level compiled languages. >>Teaching BASIC/Pascal/FORTRAN/Forth/etc first is like teaching algebra >>before arithmetic. > >Unless you have a >higher level concept of what things like lists, queues, and stacks are, >programming in assembler is extremely tough. There are no data structures in >assembler, and this makes it tough to do any kind of non-trivial programming. >HLLs are much better at learning the fundamentals of data structures and >thinking abstractly. You are completely correct, as far as I am concerned. The whole process of software engineering (the fancy name for programming) really takes place at a *MUCH* higher level than the machine. To write a really large product (which is NOT done in any class) requires machine knowledge only after you get down to the gritty details of how the product works. And it is designing the PRODUCT, not the implementation, where so many people fail. A thorough knowledge of programming constructs and data structures allows one to concentrate on the task, knowing that one can program the thing without worrying about too much detail (i.e. the basis of top-down programming). > >>BASIC is a bad joke. The bad habits that it imparts on students are >>particularly hard to unlearn (first impressions are lasting >>impressions). It oversimplifies the hardware-software interface to >>the point where it seems, to the student, to be performing magic. > >Unfortunately, the many of the bad habits one picks up in BASIC one also picks >up in assembler. One of the major habits is un-structured programming. That >is why people have a hard time going from BASIC to Pascal (for instance); the >same problem would happen going from assembler to Pascal. How to start an argument...defend BASIC. (No flames if you can help it) First, I will admit to being on a team which implemented a BASIC interpreter and compiler. Second, this is no "ordinary" BASIC...it is an operating system unto itself, built on top of a larger system (i.e. it's not for PC's). Third, like many others, I learned BASIC first and had to unlearn the bad stuff. BUT...there are now several powerful, structured BASIC languages in existance. Some of these have interpreters, some have record structures and pointers. I think it is a shame that these languages exist only on larger machines. They would make very good first languages. WHY? (you ask laughingly :-) Think how easy BASIC was to use when you learned it...there were lots of silly details you could ignore (like declaring everything under the sun). Why should you care about that? It's just an artifact of computer languages to a beginner. (But not to a compiler, and not to those of us who have learned more :-) If the BASIC has structured statements, GOTO is not needed, and need not be taught (just as most instructors fail to mention that PASCAL has a GOTO). And if an interpreter is available, the beginner can REALLY see how a program works! (NOTE: By interpreter, I *DO NOT* mean one in which you can trace and change variables. I *DO* mean one which allows program changes on the fly, plus all the tracing. The less power the interpreter has, the more difficult and useless it becomes. My own opinion is that interpreters are great for development, but have a compiler to get the speed.) In my own experience, people who have not programmed before can grasp the simple concepts that BASIC can present. and they can see the results. I have found that LISP, and compile-only languages, take longer to learn, and force the student to concentrate not on the problem to be solved, but the syntax and semantics of the language. If one intends to teach a LANGUAGE course, concentrate on the language. If one intends to teach a BEGINNING programming course, find an easy language. BASIC qualifies...though if I were teaching, it would have to be structured. "'nuff said" skh