Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!nrl-cmf!ames!elroy!cit-vax!jerbil From: jerbil@cit-vax.Caltech.Edu (Stainless Steel Gerbil [Joe Beckenbach]) Newsgroups: comp.software-eng Subject: Re: Practical Experience Summary: soapbox time, long, think before you flame (1/2 :-) Message-ID: <9423@cit-vax.Caltech.Edu> Date: 5 Feb 89 21:26:52 GMT References: <67605@ti-csl.CSNET> <530@sirius.UUCP> Reply-To: joe@cit-vax.caltech.edu (Joe Beckenbach) Organization: California Institute of Technology Lines: 170 > Steve Tarry ...dartvax.dartmouth.edu!sirius!tarry > Northern Telecom, Network Supports Systems Div., Concord, N.H. (for now) In his article <530@sirius.UUCP> Steve Tarry writes: >It has long puzzled me why there are so few masters degree programs in >Software Engineering and even fewer (none that I know of) bachelors >programs. Consider what universities offer our engineering brethren: >Students interested in research study, for example, chemistry, math, >or physics; those interested in building products get a degree in, >e.g., chemical engineering, electrical engineering, or civil engineering. >Of course, the engineering students must learn a foundation in the >underlying sciences, but they also learn how to apply science to >real commercial problems. It frankly puzzles me that people are puzzled at the lack of masters and bachelors programs for Software Engineering. Why? To my mind, this profession of computer programming is simply FAR TOO YOUNG!! As I and several people at the USENIX conference agreed in informal gabfests after the paper presentations, there is simply too little 'real formal content' to justify a large amount of learning. I mean, look at this profession and compare it to another profession; I'll use architecture, since my father is an architect and I grew up surrounded by the tools and some of the culture of that profession. Architecture began with building simple little huts. With a few simple tools and an observant mind, someone could put up a decent dwelling. We're talking about something that anyone from mid-Stone-Age on could and can do. Larger buildings, such as agricultural storage silos and cistern systems could be designed by one person, but implementation and maintainence required multiple people. And very few first designs of anything work; that's why architects needed to look at the works of the previous generations in making their buildings-- see what worked in the past, and adapt it. Once mathematics and physics got together, architects began acquiring tools to analyze structure stresses, materials' limitations, and other data. This allowed further design and weakened the reliance on trial-and-error and tradition in the course of designing buildings over an architectural group's career. These tools were nurtured, strengthened, and extended by the training process of the student architect; over the course of the centuries the simple compass-and-straightedge-and-intuition approach received the augmentation of mathematics for structural stress analyses, water delivery, air circulation, and so on. The more complex the profession, the longer it takes to train a new member up to the minimum acceptible standard. For architects in the Middle Ages, I believe that the apprenticeship period covered the same amount of time, but had less material to pass on, and a lower rate at which it could pass on the essentials of the craft. I think you can see the parallels I am about to draw. Anyone with access to the right materials can craft toy programs on a machine, and one with an observant mind can do something useful consistently. The larger projects require more discipline, training, and background; but still a well-organized person can go a long way towards finishing the smaller stuff, and getting the people to start a larger project. However, the fundamental difference is that we have had computers for about a generation or so. Architecture has had several millenia. 'Software Engineering' has the benefit of the past experience of architecture's methods, and the other engineering disciplines as well-- but we simply have not had the time yet to become a coherent profession. This touches on many central points of 'Computer Science' debates: should we be licensed? what should be the ethics of the profession? what is a proper term for what we do? Back to 'Software Engineering' in particular, it is still possible and quite commonplace for a major project to be haphazardly given, produced, distributed, and maintained. And, in general, no one cares one way or the other, since the goods are somehow being delivered. But is, in the main, software being engineered, to a rigor even partly approaching other fields? No. Is computing actually firmly grounded as a science? Yes, but not in most jobs which are associated with 'Computer Science'. So, my view of it all is that we have a smattering of those who are professionals in the sense that most architects, doctors, and the like are professionals; some pretend to it, others strive for it, and some ignore it entirely. [I could give some examples in each category, but that's overkill.] Architecture, civil engineering, and other disciplines have had this stage; 'social science' and economics are doing so as well, and are in slightly different stages of the process of acquiring the rigor, scholarship, and discipline necessary to be a profession in the same class as the current civil engineers, architects, and doctors. >In article <67605@ti-csl.CSNET>, myjak@home.csc.ti.com (Michael Myjak) writes: >> ...I have often wondered how well pure CS people perform at >> tasks (like software engineering ?) that require a moderate (to >> in-depth) level of hardware understanding. I would say it depends on the programming skill of the CS guy. Mind you, to me, real CS has heavy use of mathematics, and need not understand the hardware or hardware interface to either be a software engineer or to provide insights which could be best expressed in hardware. I cite Prof. Chuck Seitz' work leading to the Caltech Cosmic Cube, and all its derivative works. [Aside: these are all based on computational nodes with separate memory for each CPU, and communication between nodes by passing messages between nodes along wiring.] Besides, is it not true that the hardware simply allows the theoretical von Neumann machine to be expressed and used as something that approaches a reasonable speed? >Exposure to the hardware side of computing is but *one* aspect of what >distinguishes a software engineering education from a computer science Glad to see someone points out a major distinction! >education. In illustration of some other aspects, I'll mention a few >of the features of the Masters of Software Engineering program that I >recently completed (at the now-defunct Wang Institute of Graduate Studies): > >--Two years of work experience with software was required for admission; > students fresh out of a B.S. program were not accepted. Lets the student understand and find the common core of what he had been taught-- this should already be part of the BS program!!! >--Thorough grounding in computer science fundamentals (e.g, discrete > math and data structures) was required. As one who got his B.S. in > the Old Days, I found meeting the admissions requirements almost as > valuable as the degree program itself. Then the first course in > the program was APPLICATION (emphasis mine) of Formal Methods, such > as classifying real problems according to complexity theory. Again, another hole in most BS programs. > >--Group work on projects was required. In particular, instead of an > individual thesis (which was not an option), one had to develop > and deliver two software products with teams of fellow students. Another hole missing in BS programs. > >--Exposure to non-technical aspects of software development was an > essential part of the degree. For example, a course in software > project management was required, not to mention the lessons learned > in the group projects. Ditto. > >--There was a heavy emphasis on techniques (e.g., structured analysis > vs. Jackson's methods) and tools (from spreadsheets to compiler > generators). Ditto. What I am seeing is very much like what is going on with the 'social sciences': it is in the descriptive phase of its existence, about where physics was before Sir Isaac Newton's generation. What seems to be happening is more like a semi-technical general-education degree rather than a real embryonic 'software engineering' or 'computer science' discipline (looking as a whole). To fill the current gaps as a student: >Use your electives to take the courses required of "real" engineers >(Electric Circuits, Thermodynamics, Statics, ...). And _not_ just EE! Spread it around. And add math as well. An engineer without the proper mathematical tools is not as worth hiring or working alongside. >Work as a programmer summers or between degrees or in a co-op program. This is HIGHLY recommended by most; I think it should be REQUIRED. >Develop a program useful to others (including the users manual!) as part >of your thesis. Again, recommended, though most of the seminal theses I've seen have been still at the level of first prototype. BEFORE YOU MAIL ME A FLAME OR POST ONE: This is my own opinion, based on my own observations, the conversations I have had with other in several fields, professions, and walks of life. I am in no way, shape, or form, attempting to insult the integrity, intelligence, or reputation of any individual, group, or organization. If I offend, please consider why, start correcting the problems, and then think before flaming. I'd rather have a well-thought-out roasting over the coals than a flash-in-the-pan flame. Joe Beckenbach CS Dept asst system manager joe@cit-vax.caltech.edu jerbil@csvax.caltech.edu BS CS 1989, currently filling in the gaps in my BS program with more real work -- Joe Beckenbach joe@csvax.caltech.edu Caltech 256-80, Pasadena CA 91125 Should programmers be licensed? Yes, but not yet: once we've got it together enough to be a profession.