Path: utzoo!utgpu!watserv1!watmath!att!tut.cis.ohio-state.edu!cs.utexas.edu!uunet!ogicse!cs.uoregon.edu!idiotix!lth From: lth@idiotix.cs.uoregon.edu (Lars Thomas Hansen) Newsgroups: comp.lang.misc Subject: Re: introductory language Summary: Teaching assembly language first...? Message-ID: <1990Apr14.041313.720@cs.uoregon.edu> Date: 14 Apr 90 04:13:13 GMT References: <4147@ethz.UUCP> <12594@goofy.megatest.UUCP> Sender: news@cs.uoregon.edu (Netnews Owner) Reply-To: lth@idiotix.cs.uoregon.edu (Lars Thomas Hansen) Organization: University of Oregon Computer Science Dept. Lines: 49 In article <12594@goofy.megatest.UUCP> djones@megatest.UUCP (Dave Jones) writes: >In article <7300008@ux1.cso.uiuc.edu> cs290ac@ux1.cso.uiuc.edu writes: >> >>I'm looking for opinions on what languages people think should >>be taught as introduction to programming for both CS majors and >>non-CS majors. My initial opinions are C for CS majors because >>of its popularity, and its low-level programming characteristics. > >[...] > >After much reflection on the subject, if I had it to do again, I would >fight long and hard against using Pascal. I would start with a "toy" >assembly language, following that with C, and then C++ with a good >class-library. Introduce stacks and structures in the assembler phase. >That will be the stepping-stone to C. Introduce information-hiding, >encapsulation, etc. in C, then move to C++. > >[Some reasonable justification deleted] This seems to imply that you consider programming to be the skill of implementing specifications. I have to disagree with you. In the end we all have to get the code working, but I believe that a programmer is someone who is creative, inventive, and works mostly with conceptual structures. To program is to be creative; we need tools (languages!) that let us quickly and easily implement our high-level designs so that we can test them and refine them further. I am _not_ advocating that the students be taught that the computer works by magic, rather that their primary effort should be spent on solving the problems that need solving, not on learning which register is suitable for what on an 8086 (or whatever processor). Your approach is to let the students discover the utility of HLLs because they are simpler to use and offer more power than assemly language; my approach is to let the students discover the utility of LLLs (low-level languages, that is) because they offer more control and performance than HLLs. The basic idea, however, is that there is an idea to explore, a problem to solve, not a technology barrier to overcome. For these reasons, I am convinced that a "clean" HLL (like Scheme) is ideally suited to introduce students to computer programming. This applies to CS and non-CS types alike; in fact, the latter group is likely to benefit at least as much as the former, since they will most likely end up using some VHLL or 4GL in any job they might get. (Would anybody out there hire an assembly language programmer with 4 months' training?) To educate programmers as implementers and nothing else is a shame. --lars