Path: utzoo!utgpu!news-server.csri.toronto.edu!mailrus!ncar!midway!msuinfo!ss8.cps.msu.edu!enbody From: enbody@ss8.cps.msu.edu (Dr Richard Enbody) Newsgroups: comp.edu Subject: Re: SEEKING SUGGESTIONS FOR TEACHING A LANGUAGES COURSE Message-ID: <1990Aug21.134744.15139@msuinfo.cl.msu.edu> Date: 21 Aug 90 13:47:44 GMT References: <6717.26c20a9a@vax1.tcd.ie> <1990Aug14.123438.9207@cs.hope.edu> <6776.26cdc9f8@vax1.tcd.ie> Sender: news@msuinfo.cl.msu.edu Reply-To: enbody@ss8.cps.msu.edu (Dr Richard Enbody) Organization: Computer Science, Michigan State University, E. Lansing Lines: 44 I teach a Programming Languages course using Pratt as a text, but skip most of the sections on specific languages. The course is a 10-week "quarter" course meeting 4 times per week. I handle the conflict of "languages tutorial vs. concepts" by teaching concepts in the class and by having the students learn two languages which are significantly different from the procedural languages which they are familiar with - Lisp and Prolog. Lisp is taught by handing out the "Little Lisper". It isn't modern Lisp, but covers the part of Lisp that is most different from Pascal. That book is completely self teaching - no class time is spent on Lisp (except for what comes naturally under the "concepts" part of the class). A similar technique is used for Prolog with the "Prolog Primer" book, but I find that one class is necessary for Prolog. Four programming assignments are given: exercises from the "LittleLisper", a Lisp Lexical Scanner (requires a Lisp "DO" loop), a Prolog "family tree" problem, and a Prolog Expression Parser. The assignments together are worth about 10% of the class grade, i.e. very little. The reason for teaching the languages is so the students can appreciate that there are other ways of programming than procedural programming. After playing with these languages they can appreciate some of the unique approaches to programming languages and can begin to appreciate what procedural and nonprocedural programming is all about. Time is also spent discussing Lisp machine architecture. The final two weeks are a compact compiler course built around a Simple Precedence parser with a quick overview of a few of the most important optimization techniques and some simple code generation. So what do they learn? They learn why languages look they way they do and what they are capable of. They know why FORTRAN is still around and which parts of it will never change. They can begin to appreciate nonprocedural programming - most find the "Little Lisper" to be fun and the _five line_ Prolog Parser really knocks them over. In addition, they learn the basic parts of a compiler. This is a tough course, but I find that the students enjoy it. Most interesting is that I have not had a single complaint about having them learn Lisp and Prolog on their own. I have taught it twice, and will teach it again this Fall. -rich enbody@cps.msu.edu