marick@ccvaxa.UUCP (09/10/86)
I recently spent some time learning how to use and customize GNU Emacs, a version of the Emacs editor written (mainly) by Richard Stallman. GNU Emacs is a two-layer editor: the parts that must be fast or are otherwise primitive are written in C; the rest is written in Lisp. (GNU Emacs contains a built-in Lisp interpreter.) I think GNU Emacs would be a wonderful vehicle for teaching software engineering. In addition to the usual content of a such a course, students would be given assignments of the form: "Add the ability to run multiple shell sessions under Emacs." (It's already possible to run a single shell session, so the hard work is done.) That is, this flavor of software engineering would be what software engineering usually is: maintenance of and enhancements to existing software. While I am almost completely in sympathy with those who believe Universities should not cater to the immediate needs of industry, I don't think that's what this course would be about. This course would be about teaching people skillful problem solving, which is a big part of the traditional goal of a liberal arts education: learning how to learn. GNU Emacs is a good choice because it's (for the most part) very well written software that is designed to be changed. Thus, the lessons to be learned wouldn't be buried underneath a mound of ugly static detail (as they are when you look at most large, easily available programs). I think some of the lessons that GNU Emacs makes obvious (if you are inclined in these directions or if an instructor emphasizes them) are the importance of 1. planning for change (including planning for being wrong or for changing your mind), 2. of building mental/notational tools first *and* also abstracting them later, 3. of building systems (not just computational systems) that can be used to examine/check themselves, and 4. of understanding the culture that builds up around systems (not just computational systems). Traditional software engineering courses -- also many other forums for teaching -- teach ways of determining what an end is to be, not how one achieves one's ends. The latter, viewing engineering as a process worthy in itself, is as important as the former. Brian Marick, Wombat Consort Gould Computer Systems -- Urbana && University of Illinois ...ihnp4!uiucdcs!ccvaxa!marick ARPA: Marick@GSWD-VMS
liberte@uiucdcsb.CS.UIUC.EDU (09/10/86)
I like Brian's ideas for a more practical software engineering course. And GNU Emacs does provide an all-in-one environment for learning such concepts. Now we need to find sympathetic teachers. GNU Emacs, which is customized with a full LISP language, has been used successfully in a Programming Languages class for the segment on LISP. It is a very friendly environment for new (and old) lisp programmers allowing incremental recompilation and immediate evaluation, but it could use a better debugger. Dan LaLiberte liberte@b.cs.uiuc.edu liberte@uiuc.csnet ihnp4!uiucdcs!liberte