[net.cse] Teaching software engineering

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