Path: utzoo!mnetor!uunet!lll-winken!lll-lcc!ames!pasteur!ucbvax!decwrl!labrea!Shasta!neff From: neff@Shasta.STANFORD.EDU (Randy Neff) Newsgroups: comp.software-eng Subject: Cynic's Guide to Software Engineering, part 4 Message-ID: <2677@Shasta.STANFORD.EDU> Date: 14 Apr 88 22:35:44 GMT Reply-To: neff@Shasta.stanford.edu (Randall Neff) Distribution: na Organization: Stanford University Lines: 89 Keywords: Software Engineering Education ------ 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