Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!hplabs!hpfcdc!hpldola!hp-lsd!tbc From: tbc@hp-lsd.HP.COM (Tim Chambers) Newsgroups: comp.edu Subject: Re: models (was Which language to teach first?) Message-ID: <7870002@hp-lsd.HP.COM> Date: 31 Jul 89 15:52:22 GMT References: <8514@batcomputer.tn.cornell.edu> Organization: HP Logic Systems Division - ColoSpgs, CO Lines: 47 Having learned Lisp as my first language under the instruction of Sussman, I agree with the points made by manis@grads.cs.ubc.ca. The language should be irrelevant. I won't try to speak about the current MIT environment, but during my enrollment (1980-84), one was hard-pressed to find any course that taught a language. I was immersed in the philosophy that the theoretical material (data abstraction, automata, algorithm design, etc.) should be taught during the class and that programming languages should be given no more attention by the instructor than was necessary to make it possible to accomplish the lab work. We were given a reference manual and sent off to do the assignments. Examples during class were limited to discussion about the concepts, and Lisp syntax was freely used, but minimal attention paid to Lisp semantics. I do not understand what Mr. Manis implies by the following, though. |There is, however, the non-major population, who clearly neither want |nor need Abelson and Sussman. With this group, programming is clearly |not the major issue, and Pascal is quite suitable. If programming is *not* the major issue, why force them to study the theories using Pascal? If you want to teach abstract concepts, what better vehicle than a language that requires thinking in terms of a few fundamental concepts -- atoms, lists (ordered sequences), and recursion? Sussman stressed that we were using Lisp because it was a simple, yet powerful language to practice the concepts being taught. Arrays, structures, vectors, complex numbers -- all were introduced to us in their abstract form and then we practiced manipulating the abstract types by representing them with lists. I learned Pascal on-the-job during a summer internship after learning Lisp and CLU in school. The semester I returned, I confronted my software engineering professor about why I had to learn CLU to do my labs instead of using an "industrial" language like Pascal or C. He reinforced the school's philosophy that precious class time should not be wasted teaching language particulars; rather, if we had learned a basis for software design, we could apply those principles to *any* language we might encounter. (Indeed, CLU was a "pet" language of the department, but it was *tuned* for teaching good object-oriented design techniques before Ada or, I believe, C++ and Objective-C, were available.) After five years in the "real world" I can attest to the wisdom of that approach. I have seen the merits of Pascal, Gosling's Mock-lisp, C, Ada, Objective-C, C++, Smalltalk, Prolog, and assembly language debated during my career. My education allowed me to adapt to whatever language my employer has required me apply. Please, teach the concepts *first* with *minimal* attention to the language representation. Then introduce languages as *examples* (some better than others, of course :-) of the concepts of data abstraction and algorithm design.