[comp.software-eng] Cynic's Guide to Software Engineering, part 4

neff@Shasta.STANFORD.EDU (Randy Neff) (04/15/88)

------		The Cynic's Guide to Software Engineering		------
------ an invitation to dialogue, starting with the personal view of	------
------		    Randall Neff @ sierra.stanford.edu			------
------	        	April 13, 1988   	part 4			------
------------------------------------------------------------------------------
		Software Engineering Education

The basic problem is that collectively, we do not know how to solve the
"Software Engineering Crisis". Quoting Fred Brooks, "There is no Silver Bullet"
So we really don't know what to teach (or how).   This is my overall
impression of the book _Software_Engineering_Education:_The_Educational_Needs_
of_the_Software_Community edited by Norman Gibbs and Richard Fairley, which
was the report of a conference at the Software Engineering Institute in 
Feb, 1986.  

I feel that a Software Engineering program needs both a masters degree and
Ph.D degrees along with a very large component of research into the problems
and possible solutions, since we currently don't have a Silver Bullet. One 
major problem is finding qualified faculty;  SE is not a dignified topic at
some CS departments and faculty should have had several industry
programming jobs.  (Can you believe that at some schools, individuals are 
teaching how to program that have never been outside of academia or written
a program used by other folks!)  Ask your Software Engineering Education
expert: "How many lines of delivered code did you personally write last year?"

The key focus of a Masters program of software engineering should be an 
apprenticeship working on a real, large software project, in all phases of
the lifecycle myth.  I suggest that a complete software engineering programming
environment be the continuous project for all of the students over the years.   
It would be designed to be portable, run on several different hardware /os 
platforms and would be given away to anyone asking.  It would go with every
graduating student.  It would be treated just like a real software product from
a real company, including support, new releases, bug fixes, manuals, training.
The system would start out small, say just the database/configuration/version
management; then be expanded with syntax directed editors, graphic editors,
regression testing, reuse libraries, application generators, whatever the 
current fad happens to be.

Students would enter the school at the support end, working on maintenance;
then move into minor enhancements, then major ones;  finally, as a team 
propose, specify, design, construct, integrate and test a new or replacement
subsystem.   Students (and lots of outsiders) would really be using the
system, it is not thrown away; it gets better every year and teaches 
everything.   The whole point is that the system will greatly enhance the 
programming productivity of the students along with being a teaching and 
research vehicle.

Classes:  basically there are two things that you need to teach.  Enhanced
vocational skills and the foundation for future advances.  The foundation
is typically mathematical and formal, with perhaps some crystal balls visions.

History:   (The Mythical Man Month and more)
   of computers and programming languages
   famous horror stories
   early attempts at SE

State_of_the_Practice  (what allegedly goes on now)
   contemporary mythology of software development, lifecycle, costing models
   version control/configuration management
   integration/testing
   top down design
   twenty five different design methodologies
   reuse, application generators
   batch compilers and tools

Languages
   Fortran, Cobol, Simula, Apl, Snobol
   Algol 60, Pascal, Modula-2, C, C++
   Ada, Concurrent C
   Common Lisp, Prolog,  latest functional programming fad
   Smalltalk, object oriented

State_of_the_Art   (what is happening in universities)
   Highly interactive user interfaces
   Incremental compilation, loading, debugging, interpretors
   Formal languages and methods, specification analysis, incremental program
       proving, tasking specification and monitoring
   Syntax directed editors

State_of_the_Future   (problems and possible solutions)
   Standardization, why, how to, validation of, leverage, portability
   Distributed environments
   Parallel programming 
   Super programmer tools  (ie a correct Pascal compiler in eight hours)
   Professionalism, responsibility, licensing
   Future architectures for checking correct program execution
   New paradigms of software development
   The next generation of programming languages/environments
   Programming without languages

gerhart@donner.SW.MCC.COM (Susan Gerhart) (04/15/88)

In article <2677@Shasta.STANFORD.EDU>, neff@Shasta.STANFORD.EDU (Randy Neff) writes:
> ------		The Cynic's Guide to Software Engineering		------
> ------ an invitation to dialogue, starting with the personal view of	------
> ------		    Randall Neff @ sierra.stanford.edu			------
> ------	        	April 13, 1988   	part 4			------
> ------------------------------------------------------------------------------
> 		Software Engineering Education

Many facets of your software engineering education plea are incorporated
in Professor Walt Scacchi's System Factory project at the University
of Southern California.  In the SF, large groups of students work cooperatively
for several months to redo components of a software engineering environment
taking advantage of new technology or extending the environment's capabilities.
A massive amount of software has been generated, including some novel
approaches to maintaining software documents in hypertext and to module
interconnection languages. 

Articles have appeared in: IEEE TSE, March 1987; 1986 Hawaii Systems Conference;
the SoftFair proceedings, 1985; Education and Computing, 1987; just to
cite a few. A technology transfer perspective appears in MCC TR STP-309-87.
Scacchi's net address is SCACCHI@vaxa.isi.edu.


  +-------------------------------------------------------------+
  |  Susan Gerhart, MCC, 9390 Research Blvd., Austin TX 78759   |
  |             (512)338-3492       gerhart@mcc.com             |
  |{gatech,harvard,pyramid,seismo}!ut-sally!im4u!milano!gerhart |
  +-------------------------------------------------------------+

johnson@c10sd1.StPaul.NCR.COM (Wayne D. T. Johnson) (04/16/88)

In article <2677@Shasta.STANFORD.EDU> neff@Shasta.stanford.edu (Randall Neff) writes:
>
>Languages
>   Fortran, Cobol, Simula, Apl, Snobol
>   Algol 60, Pascal, Modula-2, C, C++
>   Ada, Concurrent C
>   Common Lisp, Prolog,  latest functional programming fad
>   Smalltalk, object oriented
>

I noticed a lack of any Assembly language in there.  I feel a good 
understanding of the hardware of ANY machine (hopefully a somwhat industry
standard one) and its associated object/assembly code is very useful.  I've
seen too many SEs who know nothing of the machine code, trying to fix their
software by "twiddeling"* when the simple answer is staring them in the face
if only they knew how to read a dump.

* twiddeling - making small changes to code to see if that might fix it.
This includes adding occasional chicken tracks (print/printf/write etc.
statments that mark the trail the software took).

-- 
Wayne Johnson                 (voice) 612-638-7665
NCR Comten, Inc.           (internet) johnson@ncrcce.StPaul.NCR.COM or
Roseville MN 55113                    johnson@c10sd1.StPaul.NCR.COM
The comments stated here do not reflect the policy of NCR Comten.

karenc@amadeus.TEK.COM (Karen Cate;6291502;92-734;LP=A;60sC) (04/16/88)

In article <2677@Shasta.STANFORD.EDU> neff@Shasta.stanford.edu (Randall Neff) writes:
>
>The key focus of a Masters program of software engineering should be an 
>apprenticeship working on a real, large software project, in all phases of
>the lifecycle myth.  I suggest that a complete software engineering programming
>environment be the continuous project for all of the students over the years.  
...
>It would be designed to be portable, run on several different hardware /os 
>platforms and would be given away to anyone asking.  It would go with every
>graduating student.  It would be treated just like a real software product from
>a real company, including support, new releases, bug fixes, manuals, training.
>The system would start out small, say just the database/configuration/version
>management; then be expanded with syntax directed editors, graphic editors,
>regression testing, reuse libraries, application generators, whatever the 
>current fad happens to be.
>
Sounds great.  Personally, I would be interested in a Masters of Software
Engineering.  The project I would like to work on would be some GOOD
software development tools.  What a great project for this purpose.  
Research could be done in the theory of the process of software development
as well as implementation.  Students would have a reason to take it with
them, and actually using something you wrote is one of the greatest 
learning tools ever.

Karen A. Cate
Tektronix Inc, Beaverton OR
tektronix!amadeus!karenc -OR- karenc@amadeus.LA.TEK.COM

carson@tron.UUCP (Dana Carson) (04/16/88)

In article <2677@Shasta.STANFORD.EDU>, neff@Shasta.STANFORD.EDU (Randy Neff) writes:
> programming jobs.  (Can you believe that at some schools, individuals are 
> teaching how to program that have never been outside of academia or written
> a program used by other folks!)  Ask your Software Engineering Education
> expert: "How many lines of delivered code did you personally write last year?"

Unfortunitly true in most fields.  Shouldn't be encourged though.

> The key focus of a Masters program of software engineering should be an 
> apprenticeship working on a real, large software project, in all phases of
> the lifecycle myth.  I suggest that a complete software engineering programming
> environment be the continuous project for all of the students over the years.   
> It would be designed to be portable, run on several different hardware /os 
> platforms and would be given away to anyone asking.  It would go with every
> graduating student.  It would be treated just like a real software product from
> a real company, including support, new releases, bug fixes, manuals, training.
> The system would start out small, say just the database/configuration/version
> management; then be expanded with syntax directed editors, graphic editors,
> regression testing, reuse libraries, application generators, whatever the 
> current fad happens to be.
> Students would enter the school at the support end, working on maintenance;
> then move into minor enhancements, then major ones;  finally, as a team 
> propose, specify, design, construct, integrate and test a new or replacement
> subsystem.  

NO.  There is too much feeling that maintence is where you stick the
new/incompatent people already.  Start with write the fully defined
routine.  Write this small set of routines, design a small subsystem,
etc.  Then when they show that they know how a subsystem works risk
letting them work on it.

Also teach maintence.  How to restructure code, deduce algorithms from
uncommented source, check for globals that cause unexpected linkages,
old language standards etc.

--

Dana Carson
Westinghouse
uunet!umbc3!tron!carson

dickey@ssc-vax.UUCP (Frederick J Dickey) (04/18/88)

In article <3396@zeus.TEK.COM>, karenc@amadeus.TEK.COM (Karen Cate;6291502;92-734;LP=A;60sC) writes:
> In article <2677@Shasta.STANFORD.EDU> neff@Shasta.stanford.edu (Randall Neff) writes:
> >
> >The key focus of a Masters program of software engineering should be an 
> >apprenticeship working on a real, large software project, in all phases of
> >the lifecycle myth.  I suggest that a complete software engineering programming
> Sounds great.  Personally, I would be interested in a Masters of Software
> Engineering.  The project I would like to work on would be some GOOD
> software development tools.  

The following comments are not intended to be serious criticisms of the
above, but ...

It strikes me as interesting that most of the software engineers I know would,
if given the opportunity, prefer to work on the development of SE tools rather
than work on some application program. I am certainly sympathetic to this view,
it's what I would rather do. However, it seems paradoxical to me.  The
reason why SE is called engineering is because it is supposed to be focused on
solving other peoples' problems using "engineering" techniques. Most 
customers do not view SE tools as their problem. I agree that one needs tools
to do the job, but tools seem to be used as an excuse for ignoring what
SE is all about: solving someone else's problem. Thus, I tend to view
discussions of tools (at least in the context of SE) as symptoms of a
malaise rather than elements of a solution. I also wonder sometimes if the
metaphor "tool" is the wrong metaphor.
d

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (04/19/88)

In article <1865@ssc-vax.UUCP> dickey@ssc-vax.UUCP (Frederick J Dickey) writes:

>It strikes me as interesting that most of the software engineers I know would,
>if given the opportunity, prefer to work on the development of SE tools rather
>than work on some application program.

(Hi Fred!)  I observed that too when I was at Boeing, but I figured it was
because the applications were not always the most admirable ones.  Cruise
missile targeting, sub killing, electronic warface all sound exciting, but
the reality of DoD software is pretty sordid, and one can't help but be
bothered by the fact that the software is intended to be the brains behind
devices that kill other people (not a political flame, just an observation).

This brings up a general issue having to do with applications in general.
Software engineering is billed as mostly value-neutral with respect to the
application software, and SE ethics is pretty much concerned only with
personal responsibility for quality and perhaps the short-term effects of
automation on human workers.  Some people in the CPSR are keen to have SEs
consider long-term overall societal and environmental effects of their work,
such as whether the code in more sophisticated remote controls on TVs leads
to excessively sedentary lives :-), or whether home computer games lead to
the breakup of families (no :-) - check out CPSR newsletter about three issues
back).  So - the question: does an ethical software engineer work on whatever
the boss says, or only on those applications or parts of applications that
are considered "good"?

							stan shebs
							shebs@cs.utah.edu

pete@wor-mein.UUCP (Pete Turner) (04/20/88)

In article <1865@ssc-vax.UUCP> dickey@ssc-vax.UUCP (Frederick J Dickey) writes:
>It strikes me as interesting that most of the software engineers I know would,
>if given the opportunity, prefer to work on the development of SE tools rather
>than work on some application program. I am certainly sympathetic to this view,

Perhaps software engineers show such strong interest in working on software
tools because they have experienced or sense a lack of the tools needed to 
do software engineering.

I find that a very large proportion of the time that I spend on any project
is devoted to developing the tools I need, because existing tools are too
limited - they impose unreasonable preconditions on the methodology to be
used.  This is a problem which may never be solved entirely, since I see little
evidence so far that anyone has much of a handle on what software engineering 
is. 

I would suggest that software engineers, and potential software engineers, 
make good use of their Master's thesis effort when they apply it to an area 
which they will probably only be able to address in an ad hoc manner 
in the "real" world of tight schedules and the bottom line.

jiml@uwslh.UUCP (James E. Leinweber) (04/25/88)

There is a simple reason why one would spend a goodly portion
of ones time on a project writing tools, even in the presense of a
supportive systems environment.  As was mentioned in one of the
programming pearl's columns (if memory serves), building a large
software project is analogous to building a large structure like a
bridge or skyscraper.  You need some scaffolding along the way.

Software scaffolding consists of tools to manipulate your source,
manage configurations, generate test data and analyze test runs, etc.
Even though the kind of scaffolding you use on a bridge or a software
project may be quite standard and built from re-used arts, each
project requires assembling some afresh.


Jim Leinweber		jiml@uwslh.uucp		jiml%uwslh.uucp@cs.wisc.edu
 ...!{rutgers, ucbvax, ihnp4, ...}!uwvax!uwslh!jiml
State Laboratory of Hygiene @ Univ. of Wisconsin - Madison; (608) 262-8092
-- 
Jim Leinweber		jiml@uwslh.uucp		jiml%uwslh.uucp@cs.wisc.edu
 ...!{rutgers, ucbvax, ihnp4, ...}!uwvax!uwslh!jiml
State Laboratory of Hygiene @ Univ. of Wisconsin - Madison; (608) 262-8092