dstalder@TAFS.MITRE.ORG ("Stalder D S") (11/09/89)
I used to be in a CS program. I already knew ``trade-school'' type knowledge; I had been in the work force for 3 years then. I wanted a degree to learn some of the theory and to get a degree. I went to classes and all I was taught was a tiny bit of theory and how to write my own sort programs and the like. I got disgusted and am know about to graduate with a Psych/Human Factors in CHI. They only taught me how to write programs, I could pick up a good book at B. Daltons for that. I was interested in theory. With that knowledge, here is my opinion: I think that education should be 75% theory and 25% practical knowledge. Someone can get an associates and work for two years and have more practical knowledge than a BS does. You can get practical knowledge at work. What you can't get in the work force is theory. That is what college is for is to teach you knowledge more esoteric than that you find out in the ``real-world.'' A student should know how to program in at least one language and should know their way around in 1-2 operating systems. More importantly though, they should be taught theoretical knowledge that they can apply to whatever language they might be using. (I don't know why but I keep wanted to spell knowledge without the `d'.) -- Torin/Darren Stalder/Wolf Blessed Internet: dstalder@mdf.mitre.org Be! Bitnet: dstalder@gmuvax ATTnet: 1-703-883-5747 Hail uucp: multiverse!uunet!pyrdc!gmu90x!dstalder Eris! Snail: 1350 Beverly Rd.,Suite 115-223/McLean, VA 22101/USA DISCLAIMER: I have enough problems getting credit what I do do for work, much less this stuff.
madd@world.std.com (jim frost) (11/12/89)
dstalder@TAFS.MITRE.ORG ("Stalder D S") writes: >I think that education should be 75% theory and 25% practical knowledge. >Someone can get an associates and work for two years and have more >practical knowledge than a BS does. You can get practical knowledge at >work. So what you're telling all those employers is that you want them to pay people for a year or so while they learn how to write good code? I don't think that'll go over so well. jim frost software tool & die "The World" Public Access Unix for the '90s madd@std.com +1 617-739-WRLD 24hrs {3,12,24}00bps
albaugh@dms.UUCP (Mike Albaugh) (11/14/89)
From article <1989Nov12.044511.992@world.std.com>, by madd@world.std.com (jim frost): > dstalder@TAFS.MITRE.ORG ("Stalder D S") writes: >>I think that education should be 75% theory and 25% practical knowledge. >>Someone can get an associates and work for two years and have more >>practical knowledge than a BS does. You can get practical knowledge at >>work. > > So what you're telling all those employers is that you want them to > pay people for a year or so while they learn how to write good code? > I don't think that'll go over so well. As a sometimes "employer", I'd far rather pay someone for a year to learn how to write good code, than hassle for a year with someone who _thinks_ he already can, and won't learn. I have more problems with people who seemingly never learned about things as simple as linked lists (or arithmetic overflow) than I ever had with someone simpy being not quite up to speed on the latest "hot" language. To add a few more logs to this fire, I also find a fair number of uses for the stuff I learned in those "useless" O.S. courses, and having written a "toy" compiler is a godsend when attempting to unravel the obscure error messages from other "state of the art" compilers. Mike | Mike Albaugh (albaugh@dms.UUCP || {...decwrl!pyramid!}weitek!dms!albaugh) | Atari Games Corp (Arcade Games, no relation to the makers of the ST) | 675 Sycamore Dr. Milpitas, CA 95035 voice: (408)434-1709 | The opinions expressed are my own (Boy, are they ever)
billwolf%hazel.cs.clemson.edu@hubcap.clemson.edu (William Thomas Wolfe, 2847 ) (11/15/89)
From albaugh@dms.UUCP (Mike Albaugh): > having written a "toy" compiler is a godsend when attempting to unravel > the obscure error messages from other "state of the art" compilers. Then it's obviously high time that the market started to demand better error messages. Users should not have to understand the internals of a product in order to make use of it. Bill Wolfe, wtwolfe@hubcap.clemson.edu
psrc@pegasus.ATT.COM (Paul S. R. Chisholm) (11/15/89)
What good are compiler courses? Well, when writing code I want to run fast, I always feel more comfortable when I know more or less what the compiler is going to turn my code *into*; and the only way I can do that is at least read about compiler implementation techniques. From albaugh@dms.UUCP (Mike Albaugh): > having written a "toy" compiler is a godsend when attempting to unravel > the obscure error messages from other "state of the art" compilers. In article <7044@hubcap.clemson.edu>, billwolf%hazel.cs.clemson.edu@hubcap.clemson.edu (William Thomas Wolfe, 2847) writes: > Then it's obviously high time that the market started to demand > better error messages. Users should not have to understand the > internals of a product in order to make use of it. The dreaded, justifiably famous CS 701/702/703 compiler course at the University of Wisconsin at Madison had a project to implement a language with a large subset of Ada's features. I pulled my grade up from a high B to a low AB by rewriting all of my error messages to be more readable. Is that the right kind of training a grade student should get? Better believe it! Most people worked in pairs, and you had to build on your earlier work, so it was a good de facto course in software maintenance as well. The UW-Madcity "systems programming" curriculum strongly emphasized lots of non-trivial programming, though when I was there (1979-1981), there wasn't a "software engineering" course per se. A cute anecdote to finish with: Near the end of semester, we were told to turn in some sort of internal documentation on how our compilers worked, suitable for turning over to a maintenance programmer. Someone suggested, "Should we write a flowchart?" The entire class burst out laughing. > Bill Wolfe, wtwolfe@hubcap.clemson.edu Paul S. R. Chisholm, AT&T Bell Laboratories att!pegasus!psrc, psrc@pegasus.att.com, AT&T Mail !psrchisholm I'm not speaking for the company, I'm just speaking my mind.
djones@megatest.UUCP (Dave Jones) (11/16/89)
From article <1989Nov12.044511.992@world.std.com>, by madd@world.std.com (jim frost): ... [ In response to somebody's suggestion that C.S. curricula be 75% theory and 25% practice. ] > > So what you're telling all those employers is that you want them to > pay people for a year or so while they learn how to write good code? > I don't think that'll go over so well. > Are you kidding? Any large employer would be overjoyed to get a C.S. grad right out of school who could learn to write good code in only one additional year. Ecstatic. But it just don't happen. (I can say this in relative safety just now, because at the moment I don't know anybody working in programming who is a recent grad. At least not anybody who knows where I live.)
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/17/89)
In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: >What good are compiler courses? Well, when writing code I want to run >fast, I always feel more comfortable when I know more or less what the >compiler is going to turn my code *into*; and the only way I can do >that is at least read about compiler implementation techniques. Nonsense -- this has nothing to do with software engineering, the original topic. At the engineering level, you don't care what the compiler is doing with the code anymore than an architect cares how electricity flows through wires. If you wish to specialize in designing compilers, take the course. Rich -- We use kill ratios to measure how the war is going. We use SLOC ratios to measure how our software is coming. (Idea from Gary Seath) rsd@sei.cmu.edu -----------------------------------------------------------------------------
crcraig@athena.mit.edu (Chris Craig) (11/17/89)
In article <4967@ae.sei.cmu.edu> rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >Nonsense -- this has nothing to do with software engineering, the original >topic. At the engineering level, you don't care what the compiler is doing >with the code anymore than an architect cares how electricity flows through >wires. Reasonable in some cases, but kind of naive in others. Sometimes what the compiler does with the code determines whether or not your program satisfies its specifications. >If you wish to specialize in designing compilers, take the course. What if I just want to learn about lexical analyzers, parsers, etc. so I can apply them to *other* areas? What about a little breadth in education? There are lots of reasons to take a compiler design course, not the least of which is masochism :-) ----------------------------------------------------------- Chris Craig MIT '89 crcraig@athena.mit.edu MIT/Project Athena
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/17/89)
In article <15947@bloom-beacon.MIT.EDU> Chris Craig writes: >In article <4967@ae.sei.cmu.edu> Richard S D'Ippolito writes: > >>Nonsense -- this has nothing to do with software engineering, the original >>topic. At the engineering level, you don't care what the compiler is doing >>with the code anymore than an architect cares how electricity flows through >>wires. > >Reasonable in some cases, but kind of naive in others. Sometimes what >the compiler does with the code determines whether or not your program >satisfies its specifications. Indeed, that's precisely why it's not software engineering! Any need to do this should tell you that you are not doing engineering. Architects are not doing architecture if they are worrying about how their designs are implemented at the beam and rivet level Architects and other engineers can only work effectively when the working models exist. How can there be working models when the lowest-level specifications are interpreted differently? The lowest-level components in engineering disciplines are truly standardized and portable. >>If you wish to specialize in designing compilers, take the course. > >What if I just want to learn about lexical analyzers, parsers, etc. so >I can apply them to *other* areas? What about a little breadth in >education? ... Of course, as long as you realize exactly what you are learning and are not told that you are studying engineering. Cheers, Rich
barnes@Xylogics.COM (Jim Barnes) (11/17/89)
In article <4967@ae.sei.cmu.edu> rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: >>What good are compiler courses? Well, when writing code I want to run >>fast, I always feel more comfortable when I know more or less what the >>compiler is going to turn my code *into*; > >Nonsense -- this has nothing to do with software engineering, the original >topic. At the engineering level, you don't care what the compiler is doing >with the code anymore than an architect cares how electricity flows through >wires. Nonsense, unless your definition of a software engineer doesn't care about performance. ;-) ---- Jim Barnes (barnes@Xylogics.COM)
reino@cs.eur.nl (Reino de Boer) (11/17/89)
rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: >>What good are compiler courses? Well, when writing code I want to run >Nonsense -- this has nothing to do with software engineering, the original >topic. At the engineering level, you don't care what the compiler is doing >with the code anymore than an architect cares how electricity flows through >wires. >If you wish to specialize in designing compilers, take the course. Although a compiler course is relevant to software engineers, if only to understand more about designing languages and their implementation. Didn't someone once say: each program is in fact an interpreter for a language (where the language defines all legal input to the program, and the semantics of the various inputs) If noone ever said it, how about your comments ? -- Reino R. A. de Boer Erasmus University Rotterdam ( Informatica ) e-mail: reino@cs.eur.nl
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/17/89)
In article <1989Nov17.090716.11068@cs.eur.nl> Reino de Boer writes:
-Although a compiler course is relevant to software engineers, if only to
-understand more about designing languages and their implementation.
-Didn't someone once say:
- each program is in fact an interpreter for a language (where the
- language defines all legal input to the program, and the semantics
- of the various inputs)
-If noone ever said it, how about your comments ?
I'm sorry -- If this is directed to me, I am unable to answer you as I do
not understand the point you are trying to make.
Rich
--
When you can measure what you are speaking about, and express it in numbers,
you know something about it.
Lord Kelvin rsd@sei.cmu.edu
-----------------------------------------------------------------------------
lfd@cbnewsm.ATT.COM (leland.f.derbenwick) (11/18/89)
Richard D'Ippolito appears to think engineering (specifically software engineering) ends with high-level design. The engineering disciplines apply all the way down to implementation details. In article <4979@ae.sei.cmu.edu>, rsd@sei.cmu.edu (Richard S D'Ippolito) writes: > In article <15947@bloom-beacon.MIT.EDU> Chris Craig writes: > > >In article <4967@ae.sei.cmu.edu> Richard S D'Ippolito writes: > > > >>Nonsense -- this has nothing to do with software engineering, the original > >>topic. At the engineering level, you don't care what the compiler is doing > >>with the code anymore than an architect cares how electricity flows through > >>wires. > > > >Reasonable in some cases, but kind of naive in others. Sometimes what > >the compiler does with the code determines whether or not your program > >satisfies its specifications. I would have said _extremely_ naive; Chris Craig is more tactful. > Indeed, that's precisely why it's not software engineering! Any need to do > this should tell you that you are not doing engineering. Needing to meet specified performance is common in all branches of engineering. How one goes about that is part of engineering. Why should software be different? For example, a chemical engineer who doesn't understand how spray towers work could design one that's 99% fluid and 1% air. (Which isn't a spray tower, it's occasional bubbles in a pot of fluid, and it's _not_ going to work as intended!) > Architects are not doing architecture if they are worrying about how their > designs are implemented at the beam and rivet level Architects and other > engineers can only work effectively when the working models exist. How can > there be working models when the lowest-level specifications are interpreted > differently? The lowest-level components in engineering disciplines are > truly standardized and portable. Very bad example. The Hartford Civic Center's roof collapsed (when the place was empty, luckily) because "beam and rivet level", as understood by the architects (and their CAD programs), didn't match the reality of how things are put together. And people _died_ a few years ago (the multi-level pedestrian walkway that collapsed) largely because an architect didn't properly understand the "beam and rivet level". Architects routinely provide "detailing" of how buildings are to be constructed. The detailing for the joints to attach each level of the walkway wasn't feasible to build, so the contractor used a feasible method that had only about half the strength that the architect intended. > >>If you wish to specialize in designing compilers, take the course. > > > >What if I just want to learn about lexical analyzers, parsers, etc. so > >I can apply them to *other* areas? What about a little breadth in > >education? ... > > Of course, as long as you realize exactly what you are learning and are not > told that you are studying engineering. > [...] That's like saying that a chemical engineering student who is learning about how to design chemical reactors isn't learning engineering. And even the high-level portions of software engineering can be taught (or at least practiced) in any course that involves software development. A compiler course is no exception. -- Speaking for myself, -- Lee Derbenwick, AT&T Bell Laboratories, Warren, NJ -- lfd@cbnewsm.ATT.COM or <wherever>!att!cbnewsm!lfd
dar@nucleus.UUCP (Dario Alcocer) (11/18/89)
In article <1989Nov17.090716.11068@cs.eur.nl>, reino@cs.eur.nl (Reino de Boer) writes: > rsd@sei.cmu.edu (Richard S D'Ippolito) writes: > > >In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: > > >>What good are compiler courses? Well, when writing code I want to run > > >[text deleted...] > > >If you wish to specialize in designing compilers, take the course. > > Didn't someone once say: > each program is in fact an interpreter for a language (where the > language defines all legal input to the program, and the semantics > of the various inputs) > If noone ever said it, how about your comments ? > > -- > Reino R. A. de Boer > Erasmus University Rotterdam ( Informatica ) > e-mail: reino@cs.eur.nl In the book "The Unix Programming Environment", by B. W. Kernighan and R. Pike (ch. 8, pg. 233): "We chose to implement a language because it's representative of problems encountered in large programs. Furthermore, many programs can profitably be viewed as languages that convert a systematic input into a sequence of actions and outputs, so we want to illustrate the language development tools." -- Dario Alcocer dar@nucleus.mi.org
dstalder@TAFS.MITRE.ORG ("Stalder, D S") (11/20/89)
Jim Frost <madd@std.com> writes: >So what you're telling all those employers is that you want them to pay >people for a year or so while they learn how to write good code? I >don't think that'll go over so well. No, that is why you need some practical experience. To graduate with a CS degree without being able to write code is ridiculous. But don't tell me that work on the job is going to be tailored to the person's education. A college education is general experience. You can't learn everything you need to know at work in school. If you have experience with one language, you can generally pick up others of the same type quickly and other types without the difficulty you had learning the first language. In any job that I undertake, I hope to learn something, otherwise, I am a well-paid bottle-washer. -- Torin/Darren Stalder/Wolf Carpe Internet: dstalder@gmuvax.gmu.edu Diem! Bitnet: dstalder@gmuvax ATTnet: 1-703-883-57477 Snail: 1350 Beverly Rd., Suite 115-323/McLean, VA 22101/USA DISCLAIMER: A society where such disclaimers are needed is saddening.
mjl@cs.rit.edu (11/20/89)
In article <4994@ae.sei.cmu.edu>: >In article <1989Nov17.090716.11068@cs.eur.nl> Reino de Boer writes: >-Didn't someone once say: >- each program is in fact an interpreter for a language (where the >- language defines all legal input to the program, and the semantics >- of the various inputs) >-If noone ever said it, how about your comments ? > >I'm sorry -- If this is directed to me, I am unable to answer you as I do >not understand the point you are trying to make. > > >Rich The point is that the study of compilers (or whatever) may give you insights and models that are useful in the specification and development of software. I think you're taking an overly restrictive view of engineering, as if the form of the inquiry is somehow independent of the content of the final product. This is the engineering equivalent of the generic MBA who can manage anything! I don't think one can study any branch of engineering in a vacuum, totally devoid of relevant conceptual models that give substance to the discipline. As far as I know, electricial engineering students still take *engineering* courses in ciruit analysis; undoubtedly they learn something about the design process as a result, but I'll bet they come away knowing a thing or three about circuits to boot. >-- >When you can measure what you are speaking about, and express it in numbers, >you know something about it. >Lord Kelvin Contrapuntally: There's no sense being exact about something if you don't even know what you're talking about. John von Neumann. Also, Kelvin also used his immense scientific stature to deep-six most research into the age of the earth (unless the results agreed with his estimate of at several 10's of millions of years). I guess that means he liked some numbers better than others. :-) Mike Lutz -- Mike Lutz Rochester Institute of Technology, Rochester NY UUCP: {rutgers,cornell}!rochester!rit!mjl INTERNET: mjlics@ultb.isc.rit.edu Mike Lutz Rochester Institute of Technology, Rochester NY UUCP: {rutgers,cornell}!rochester!rit!mjl INTERNET: mjlics@ultb.isc.rit.edu
murphyn@cell.mot.COM (Neal P. Murphy) (11/20/89)
From two of the references, Richard writes, >>What good are compiler courses? Well, when writing code I want to run > >Nonsense -- this has nothing to do with software engineering, the original >topic. At the engineering level, you don't care what the compiler is doing >with the code anymore than an architect cares how electricity flows through >wires. and Reino writes, > >-Although a compiler course is relevant to software engineers, if only to >-understand more about designing languages and their implementation. >-Didn't someone once say: >- each program is in fact an interpreter for a language (where the >- language defines all legal input to the program, and the semantics >- of the various inputs) >-If noone ever said it, how about your comments ? > >I'm sorry -- If this is directed to me, I am unable to answer you as I do >not understand the point you are trying to make. First, Reino eloquently stated that every program written is a compiler, and knowledge of compilers will enable one to write better programs. Second, I must point out that an architect really couldn't tell you if his design is constructable. It remains the responsibility of the civil engineer to ensure that a building built to look like that which the architect envisioned will not collapse or be blown over in a strong wind. I do agree with Rich, an architect doesn't care how electricity flows through wires. He probably couldn't tell you how even if he wanted to. However, at the software engineering level, one should care very much what the compiler is doing. For example, I know of a compiler that generates a 32-bit address offset for an instruction that only uses a 16-bit address offset. One would care very much when that is the only compiler one has to use. Knowing how the compiler works allows a software engineer to design code that *will* compile, thereby allowing him to concentrate on ensuring that the code does what it should. NPN
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/21/89)
In article <7700@xenna.Xylogics.COM> Jim Barnes writes: >In article <4967@ae.sei.cmu.edu> Richard S D'Ippolito writes: >>In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: >>>What good are compiler courses? Well, when writing code I want to run >>>fast, I always feel more comfortable when I know more or less what the >>>compiler is going to turn my code *into*; >> >>Nonsense -- this has nothing to do with software engineering, the original >>topic. At the engineering level, you don't care what the compiler is doing >>with the code anymore than an architect cares how electricity flows through >>wires. > >Nonsense, unless your definition of a software engineer doesn't care >about performance. ;-) What's the point here, Jim? If you don't like the analogy, say so. Mature engineering design practice requires known architectural models. This means that the structure and performance of the models is fully known. How is it possible to do engineering design if the performance of the model components changes according to the implementor? If the architect has to worry about low-level implementation details, such as how the code is translated by various compliers, then he really can't be doing architectural design, can he? He is really doing model building, not model using, and this isn't engineering -- it's research. You are confusing implementation issues with design issues. Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
reino@cs.eur.nl (Reino de Boer) (11/21/89)
rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >In article <1989Nov17.090716.11068@cs.eur.nl> Reino de Boer writes: >-Although a compiler course is relevant to software engineers, if only to >-understand more about designing languages and their implementation. >-Didn't someone once say: >- each program is in fact an interpreter for a language (where the >- language defines all legal input to the program, and the semantics >- of the various inputs) >-If noone ever said it, how about your comments ? >I'm sorry -- If this is directed to me, I am unable to answer you as I do >not understand the point you are trying to make. The point I'm trying to make is maybe best given in a simple example: Suppose we need a program to take the sum of 5 numbers, where these 5 numbers are the only input to the program. Futhermore, let's assume we want each input number to be positive and less than 1000. Each number will be entered on a line by itself. The program we will write can be viewed as an interpreter for a language with the following syntax: <input> ::= <numeral> <numeral> <numeral> <numeral> <numeral> <numeral> ::= <digit> [ <digit> [ <digit> ] ] <nl> | 0 <nl> <digit> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <nl> ::= the representation of the terminating newline. The (informal) semantics can then be described as follows: The output of the interpreter consists of the sum of the numbers resulting from conversion of the numerals. Hope this explains -- reino -- Reino R. A. de Boer Erasmus University Rotterdam ( Informatica ) e-mail: reino@cs.eur.nl
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/22/89)
In article <6738@cbnewsm.ATT.COM> leland.f.derbenwick writes: >Richard D'Ippolito appears to think engineering (specifically software >engineering) ends with high-level design. The engineering disciplines >apply all the way down to implementation details. I'm sorry that's the message you got. The original context of this discussion was what to add/change/emphasize in CS to teach software engineering. Several folks suggested that courses on compilers and operating systems were valuable to teach SE. I strongly disagreed, especially with the comments made about worrying what the compiler does with the code during the _design stage_, arguing that at that stage, engineering design is possible only with fully captured models. What is missing here is an understanding of the engineering method, precisely that thing which is _not_ taught in any CS/SE program. You will not get it by studying compilers and operating systems. >Needing to meet specified performance is common in all branches of >engineering. How one goes about that is part of engineering. >Why should software be different? You must differentiate between model performance and system performance. >For example, a chemical engineer who doesn't understand how spray >towers work could design one that's 99% fluid and 1% air. (Which >isn't a spray tower, it's occasional bubbles in a pot of fluid, >and it's _not_ going to work as intended!) A chemical engineer who doesn't understand spray towers is not an engineer; HOWEVER, understanding how to apply one is not the same as knowing how to design one. >> Architects are not doing architecture if they are worrying about how their >> designs are implemented at the beam and rivet level Architects and other >> engineers can only work effectively when the working models exist. How can >> there be working models when the lowest-level specifications are interpreted >> differently? The lowest-level components in engineering disciplines are >> truly standardized and portable. > >Very bad example. The Hartford Civic Center's roof collapsed (when the >place was empty, luckily) because "beam and rivet level", as understood >by the architects (and their CAD programs), didn't match the reality >of how things are put together. There was a misapplication of the correctly working CAD program in the description of the joint. The failure was due to sloppy engineering procedure (work not independently checked), not due to a lack of adequate tools and methods. This does not contradict my statement that the working models must (and did, in this case) exist. When will it be the case that the failure of a SW system makes more news than the success of one? >And people _died_ a few years ago (the multi-level pedestrian walkway >that collapsed) largely because an architect didn't properly understand >the "beam and rivet level". Architects routinely provide "detailing" >of how buildings are to be constructed. The detailing for the joints >to attach each level of the walkway wasn't feasible to build, so the >contractor used a feasible method that had only about half the strength >that the architect intended. Think about what you just wrote -- an architect specified a design for which he had no working model. That's not engineering, is it? Again, it makes news in other fields, but not in ours as it happens all of the time. >> >What if I just want to learn about lexical analyzers, parsers, etc. so >> >I can apply them to *other* areas? What about a little breadth in >> >education? ... >> >> Of course, as long as you realize exactly what you are learning and are not >> told that you are studying engineering. >> [...] > >That's like saying that a chemical engineering student who is learning >about how to design chemical reactors isn't learning engineering. No, it isn't like that at all. Learning about lexical analyzers and parsers is not the same as learning engineering design anymore than learning how to hammer nails into is learning how to design walls. Chemical engineers learn models in the form of unit operations. >And even the high-level portions of software engineering can be taught >(or at least practiced) in any course that involves software >development. A compiler course is no exception. And what are these high-level portions of software engineering? Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/22/89)
In article <1411@cs.rit.edu> mjl@cs.rit.edu (Michael Lutz) writes: >The point is that the study of compilers (or whatever) may give you >insights and models that are useful in the specification and >development of software. I think you're taking an overly restrictive >view of engineering, as if the form of the inquiry is somehow >independent of the content of the final product. Exactly the opposite is what I've been saying -- the final form of the product is precisely what is seen by the engineer. Without known models, this is impossible. >I don't think one can study any branch of engineering in a vacuum, >totally devoid of relevant conceptual models that give substance to the >discipline. See above. But one needs more than the models in order to be able to use them. >There's no sense being exact about something if you don't even know what >you're talking about. >John von Neumann. Please see the rest of Lord Kelvin's quote. What if it's being exact about what you don't know? Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
crm@romeo.cs.duke.edu (Charlie Martin) (11/23/89)
In article <4979@ae.sei.cmu.edu> rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >>Reasonable in some cases, but kind of naive in others. Sometimes what >>the compiler does with the code determines whether or not your program >>satisfies its specifications. > >Indeed, that's precisely why it's not software engineering! Any need to do >this should tell you that you are not doing engineering. > >Architects are not doing architecture if they are worrying about how their >designs are implemented at the beam and rivet level Architects and other >engineers can only work effectively when the working models exist. How can >there be working models when the lowest-level specifications are interpreted >differently? The lowest-level components in engineering disciplines are >truly standardized and portable. > Richard, I don't mean this to be derogatory, but this really reads like you haven't had much exposure to engineering in the field, or for that matter to a working engineering organization that does much of anything BESIDES software engineering. While an architect is doing design, they should not be worrying about the nail, screw, and rivet level. They certainly do worry at the beam level, because strength and cost optimizations determine things like maximum clear span. But an architect's job usually includes construction supervision: sometimes with the architect acting as the general contractor, more often with the architect working as a sort of independent review of the general contractor. They must by law and by custom do this, becuase unless they have an explicit waver they are liable for flaws in the building that cause damages. Ev en if they are explicitly taken of the job in writing before contruction, the architect is liable for flaws in the design (cf the Kansas City flyway -- the architect was named in the liability suit. I don't know if they were found liable, since the failure was apparently due to an out-of-spec change made by the contractor.) It is true that most engineering disciplines use prebuilt components when available, but not all. Mechanical engineers will design special components for fabrication, they just have the choice, something that software engineers often don't (yet.) >> >>What if I just want to learn about lexical analyzers, parsers, etc. so >>I can apply them to *other* areas? What about a little breadth in >>education? ... > >Of course, as long as you realize exactly what you are learning and are not >told that you are studying engineering. > I don't think anyone is under the impression that you are learning engineering when learning about finite state automata and the executable models of them. I think many of us are holding that learning things like FSA's and parsers is a useful an necessary part of a good education in the things which ground software engineering. No one thinks that Diff Eq courses are studying engineering; they are just things that are necessary to *do* engineering on the continuous world. FSA's, computability, etc aren't engineering per se, but I think they are as necessary for we engineers of the discrete world as DE is for the other guys. Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/23/89)
In article <1989Nov21.141820.5263@cs.eur.nl> Reino de Boer writes: >The point I'm trying to make is maybe best given in a simple example: > [example of summation program deleted] >Hope this explains -- reino It explains your words, but that wasn't my problem. There is near-total disconnect on ideas. How this relates to the original points on OS and software engineering, I cannot get. Sorry. Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/23/89)
In article <16169@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes: >Richard, I don't mean this to be derogatory, but this really reads like >you haven't had much exposure to engineering in the field, or for that >matter to a working engineering organization that does much of anything >BESIDES software engineering. Let's try for a little closure here -- I am a registered professional engineer with 25 years of industrial design experience, with about 40% of it in software. >While an architect is doing design, they should not be worrying about >the nail, screw, and rivet level. They certainly do worry at the beam >level, because strength and cost optimizations determine things like >maximum clear span. The way they 'worry' about those things is to use model structures where they are certain that the detail designers can fill in the detail to create an instance of the model which meets the engineering specifications. Agreed that in small firms or for small projects, the architect may fill more than one role, but that isn't the point. The problem in software is that the roles of designer and implementer have not yet been distinuished. We've got carpenters and bricklayers trying to design houses. Every programmer is now a software engineer, but you won't find an architect in the field with a hammer. >It is true that most engineering disciplines use prebuilt components >when available, but not all. Mechanical engineers will design special >components for fabrication, they just have the choice, something that >software engineers often don't (yet.) All of the components are created from known models, otherwise the engineer is doing science and not engineering. We (in our project) are giving software engineers the choices, as we are helping to develop the design-level models. >I don't think anyone is under the impression that you are learning >engineering when learning about finite state automata and the executable >models of them. This is true for you, but not for those who suggested (and still insist) here that courses in OS and compilers were good ways to learn software engineering. >I think many of us are holding that learning things >like FSA's and parsers is a useful an necessary part of a good education >in the things which ground software engineering. No problem. We agree. Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
chrisp@regenmeister.uucp (Chris Prael) (11/23/89)
In article <6738@cbnewsm.ATT.COM> leland.f.derbenwick writes: >And people _died_ a few years ago (the multi-level pedestrian walkway >that collapsed) largely because an architect didn't properly understand >the "beam and rivet level". Since my wife is a structural engineer and we have discussed this incident, I think I can consider myself informed about it. According to my wife, the basic problem was unprofessional conduct on the part of the STRUCTURAL ENGINEERS on the project. (Please note that the architect was not at fault.) The specific misconduct was the failure to have their work reviewed by independant peers. The engineers who were responsible lost their licenses. >Architects routinely provide "detailing" of how buildings are to be constructed. While this is generally done by the architect for minor structures such as a house or a carport, this work is all done by structural engineers for any building larger than that. Chris Prael
crm@romeo.cs.duke.edu (Charlie Martin) (11/25/89)
In article <5072@ae.sei.cmu.edu> rsd@sei.cmu.edu (Richard S D'Ippolito) writes: >In article <16169@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes: > >>Richard, I don't mean this to be derogatory, but this really reads like >>you haven't had much exposure to engineering in the field, or for that >>matter to a working engineering organization that does much of anything >>BESIDES software engineering. > >Let's try for a little closure here -- I am a registered professional >engineer with 25 years of industrial design experience, with about 40% of it >in software. > Fair enough: you've got 5 years on me, but 100% of my design experience is in software (although I spent a lot of time with hardware people); I've also -- to fend off the obvious question -- spent a lot of time watching architects and engineers, and asking lots of questions, in order to broaden my knowledge of the real processes involved. Also, no PE (if there WERE a PE exam in software engineering, I'd take it!) but a CDP and by next month sometime a PhD (ghods willing.) > >>While an architect is doing design, they should not be worrying about >>the nail, screw, and rivet level. They certainly do worry at the beam >>level, because strength and cost optimizations determine things like >>maximum clear span. > >The way they 'worry' about those things is to use model structures where >they are certain that the detail designers can fill in the detail to create >an instance of the model which meets the engineering specifications. Agreed >that in small firms or for small projects, the architect may fill more than >one role, but that isn't the point. The problem in software is that the >roles of designer and implementer have not yet been distinuished. We've got >carpenters and bricklayers trying to design houses. Every programmer is now >a software engineer, but you won't find an architect in the field with a >hammer. I think we're beginning to converge on a point here. One counter-argument to point out is that in fact most architects work in small firms, even though they design big buildings. Even Frank Lloyd Wright and Corboisier (sp? I think that's right) don't/didn't have massive organizations. What discussions I've had with architects and what I've been able to glean from the design literature suggests that architects are in fact conscious of the engineering problems of things like maximum clear span, or rather increase of cost as clear span increases optimized against client's goals, from the first moments of design. And a Wright or Corboisier may not be on site supervising construction, but a junior member of the firm is: the architect or his firm is responsible for the nuts and bolts. But you've got a major point here that I think needs serious consideration: the designer is not yet separate from the carpenter in software. It's like the mechanical engineer being the machinist or toolmaker. The opposite side of this is that while mechanical engineers don't need to be machinists, mechanical engineers need to understand machine tools and manufacturing operations. In some countries, this is done by requiering engineering students to take a machine-work (construction work, etc) course as part of the introduction. When I was an engineering student, we had to take a course that included projective geometry, drafting, slide rule, and discussions of standard practices as one requirement, a course in project management as another, and a course on surveying as a third. (This is all before software engineering was a defined term.) The purpose was to make sure that we understood practical constraints and practices as well as ODEs and strength of materials. One reason SE doesn't make a distinction in teaching where ME does is that there is little distinction in practice: most people hire a CS grad to be a "software engineer" even though what they mean a new grad to do is be a real SE's machinist. The new grads aren't all that good as "machinists" but they aren't well prepared to software engineer either. (Or worse, they hire a new grad to DO a software engineer's job and think what they get is the best possible.) The other side of this is that we can't TEACH software engineering without requiring the students become machinists; there's not much you can teach about programming without teaching programming. The solution in my opinion is that we have to make sure that part of teaching computer science is teaching the low-level skills that have been considered part of software engineering up to now. I don't think any computer science grad ought to be able to graduate without understanding how to write a good program at the 1000--10,000 SLOC level. It seems as silly to allow the contrary as it would be to give a degree in English in which the recipient cannot write a competent sentence, paragraph, or 5,000 word paper. [Of course, that happens too...] > > >>It is true that most engineering disciplines use prebuilt components >>when available, but not all. Mechanical engineers will design special >>components for fabrication, they just have the choice, something that >>software engineers often don't (yet.) > >All of the components are created from known models, otherwise the engineer >is doing science and not engineering. We (in our project) are giving >software engineers the choices, as we are helping to develop the >design-level models. > Well, I can't respond to your research because I don't know enough about it. But when an engineer designs a bearing that is needed, which is not in the parts catalogues from the acceptable suppliers, but which is within the common state of art, he is not doing science: there is no hypothesis/experiment cycle going on. He just designs a left-handed double-roller frammistan because he knows there are right handed ones, but he can't find the left-handed one he needs to go on his new left-handed power pipe wrench. Similarly, all engineered software is created from known models (check e.g. the plans work of Soloway) and most other algorithms are designed on the basis of existing models as well. In designing a bearing, a designer had better know about the properties of other bearings, and of the materials that make them up. He will certainly hve seen a bearing in use, and will probably hav had experience with various kinds of prefab bearings in various uses. A software designer needs to know the properties of his "materials" -- which means understanding something about architectures; needs to have a background in the properties of his working stuff to know how to make design choices -- which means a working knowledge of analysis of algorithms, operating systems concepts, files systems, concurrency and parallelism; and needs to have experience with other successful artifacts which make use of the principles, and to have learned about them in the context of the tradeoffs and optimizations that can be made. > >>I don't think anyone is under the impression that you are learning >>engineering when learning about finite state automata and the executable >>models of them. > >This is true for you, but not for those who suggested (and still insist) >here that courses in OS and compilers were good ways to learn software >engineering. > I *am* glad that we have your infinite knowledge to draw on, Richard. That is ever so much clearer now. Funny, I had thought that the others were mostly arguing that OS etc courses were a good place to *present examples* of software engineering and its problems. But being a mere mortal, I can only draw on what I read, not on my intimate knowledge of what other people know. But as I recall the arguments presented (not just mine), the idea has been all along that operating systems courses and compilers courses were opportune places to expose students to large and complex programs. There seem to me to be three tiers here: - the theory: analysis of algorithms; concurrency and parallelism; finite state automata, computability, NP-completeness; discrete maths; discrete circuits; programming language semantics; correctness and safety; queueing theory and Markov systems. - central concepts that apply to most or all computers: languages and their differences; architecture (both in the Brooks sense of opcode-set design and in the higher-level circuit sense); constraints on resources and performce; organization of file systems and file stores; tradeoffs and optimizations; important algorithms uses in practice, like hierarchic chains of ordered sets. - the backround needed to work in practice: code "hygiene"; commenting; modularization; concepts of reuse; maintenance and the special skills that go with it; the idea of the life cycle and its models (waterfall, spiral, etc); the idea of metrics. I'm not wedded to the *names* of the courses; call them Larry Moe and Curly for all that I care. But many of the theory topics presented must (in my opinion) be reinforced with realistic examples, and courses like compilers, operating systems, and oh, data base courses are a convenient place to do this. Contrariwise, it appears to me that once one has seen the theory topics above, and seen them in practical applications for reinforcement, that one has studied the content of the "objectionable" courses no matter what they are called. So I don't know -- what doesn't the list include? What do you think is *not* appropriate for a software engineer to know? Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)
crm@romeo.cs.duke.edu (Charlie Martin) (11/25/89)
All of these discussions (teaching SE, productivity, and licensing) bring up the question that more and more interests me; it is subtext to the whole discussion. What is software engineering? Boehm claims (Software Engineering Economics, pg 16) _Software engineering_ is the application of science and mathematics by which the capabilities of computer equipment are made useful to man via computer programs, procedures, and associated documentation. ...but that doesn't give much guidance to the detailed examination of what is or is not applicable to learning to be a software engineer. (It could be read to require the software engineer to know everything about nearly everything.) So let's re-cast the question: assume that there existed a professional engineer's exam for software engineering. (I am convinced that one will exist at sometime in the future, but that's not germane -- let's just assume that one DOES exist.) What is on the exam? I'd propose as a starting point the list of things I laid out in a previous posting today: theory, major historical applications as examples of how the theory is applied, some details of the techniques of software engineering, some discussion of modularity and other tradeoffs. Does anyone have other topics of interest? How about topics to be deleted? Rich d', Bill Wolfe, I'm specifically interested in your thoughts. (What is on the PE exam for, say, an electrical engineer? Does it still include, for example, questions on power engineering in your state?) Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)
crm@romeo.cs.duke.edu (Charlie Martin) (11/25/89)
Has it struck anyone else in this discussion that the reason we can't trust new graduates to write good code on graduation is that we the academics have taught them to write BAD code BEFORE graduation? Is this soluble? Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)
jmi@devsim.mdcbbs.com ((JM Ivler) MDC - Douglas Aircraft Co. Long Beach, CA.) (11/26/89)
In article <16189@duke.cs.duke.edu>, crm@romeo.cs.duke.edu (Charlie Martin) writes: > Has it struck anyone else in this discussion that the reason we can't > trust new graduates to write good code on graduation is that we the > academics have taught them to write BAD code BEFORE graduation? > Cripes, I can go to a high school and get someone to "write code" (both good and bad). I need more than that! I want a person who knows how to become part of the team. I need someone who understands that they are *not* supposed to create esoteric solutions to problems, but maintainable ones. I need someone who wants to problem solve, not just make "big engineering bucks" in aerospace. I need someone who can maintain trash software one day and create modular design the next. I need someone who cares about what they produce. I need quite a bit, and college degrees (and the associated "programs") don't provide me with any of it. This should make you smile... One of the best engineers I have ever worked with had a degree in music. That's the answer, we should be hiring music majors. :-) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | J.M. Ivler at Douglas Aircraft in Long Beach, CA - VOICE: (213) 496-8727 | | INTERNET: jmi@devsim.mdcbbs.com | UUCP: uunet!mdcbbs!devsim.mdcbbs!jmi | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
crm@romeo.cs.duke.edu (Charlie Martin) (11/28/89)
In article <464.256f4723@devsim.mdcbbs.com> jmi@devsim.mdcbbs.com ((JM Ivler) MDC - Douglas Aircraft Co. Long Beach, CA.) writes: >In article <16189@duke.cs.duke.edu>, crm@romeo.cs.duke.edu (Charlie Martin) writes: >Cripes, I can go to a high school and get someone to "write code" (both good >and bad). I need more than that! I want a person who knows how to become part >of the team. I need someone who understands that they are *not* supposed to >create esoteric solutions to problems, but maintainable ones. I need someone >who wants to problem solve, not just make "big engineering bucks" in aerospace. You won't catch me disagreeing with you: all of these things are important, and I guess I've gotten old enough to find myself thinking "people just had higher standards in the Good Old Days." But I don't think I know the answer to teaching students to have higher standards, or to take pride and feel fulfillment in working on a useful part of a team effort. If I did, I'd write a book like the ONe Minute Manager, get rich, and spend my time on my hobbies. It seems as if we *might could* teach people to write decent code in their programming courses, however. But my strong impression is that we don't, in general, insist on anything except that it will compile and that it will compute the right answer in the one test case the grader applies. >This should make you smile... One of the best engineers I have ever worked with >had a degree in music. That's the answer, we should be hiring music majors. :-) I once read a bit of industrial psych that claimed that musicians were the people who had the closest match to the personality traits and skills of the really top-rank programmers. I guess it doesn't surprise me at all. Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)
sullivan@aqdata.uucp (Michael T. Sullivan) (11/28/89)
From article <16195@duke.cs.duke.edu>, by crm@romeo.cs.duke.edu (Charlie Martin): > > It seems as if we *might could* teach people to write decent code in > their programming courses, however. But my strong impression is that we > don't, in general, insist on anything except that it will compile and > that it will compute the right answer in the one test case the grader > applies. Don't forget that CS courses don't teach programming, they teach (start the choir) "SCIENCE" (the choir finishes). I seem to recall that of my classes at UC Santa Barbara, the only class with the word "programming" in it was "Programming Languages", an overview of several different languages. Even the introductory courses were "Introduction to Computer Science". If schools ever got around to teaching programming they might just do a swell job. -- Michael Sullivan uunet!jarthur.uucp!aqdata!sullivan aQdata, Inc. aqdata!sullivan@jarthur.claremont.edu San Dimas, CA
reggie@dinsdale.nm.paradyne.com (George W. Leach) (11/28/89)
In article <1989Nov27.230724.12252@aqdata.uucp> sullivan@aqdata.uucp (Michael T. Sullivan) writes: >Don't forget that CS courses don't teach programming, they teach (start >the choir) "SCIENCE" (the choir finishes). I seem to recall that of >my classes at UC Santa Barbara, the only class with the word "programming" >in it was "Programming Languages", an overview of several different languages. While programming may not be the main focus of these courses, it certainly is the vehicle for conducting laboratory experiments for many. A course in simulation is not very useful without hands on practice using a suitable simulation language. Algorithms may be studied independ of programming, but a lab program will aid in understanding them (or an animation). >Even the introductory courses were "Introduction to Computer Science". Yes, but at least when I was an undergrad *and* when I taught this course, half of the material (al least) was Pascal Programming. These are the courses where the students must learn programming skills and they must be reinforced throughout the curriculum. A certain quality of programming should be expected in all lab assignments no matter what the course. This requires the entire faculty to enforce such policy. >If schools ever got around to teaching programming they might just do a >swell job. WellI certainly was taught programming and taught well. BTW: I learned to hack in BASIC in high school. I learned how to program well in introductory courses and was never allowed to deviate in advanced courses where programming was secondary. George W. Leach AT&T Paradyne (uunet|att)!pdn!reggie Mail stop LG-133 Phone: 1-813-530-2376 P.O. Box 2826 FAX: 1-813-530-8224 Largo, FL 34649-2826 USA
rsd@sei.cmu.edu (Richard S D'Ippolito) (11/30/89)
Charlie, you start off OK, but include sarcastic remarks later in your article. I will try to close most of this discussion down: In article <16185@duke.cs.duke.edu> Charlie Martin writes: >In article <5072@ae.sei.cmu.edu> Richard S D'Ippolito writes: >>In article <16169@duke.cs.duke.edu> crm@romeo.UUCP (Charlie Martin) writes: >> >But you've got a major point here that I think needs serious >consideration: the designer is not yet separate from the carpenter in >software. It's like the mechanical engineer being the machinist or >toolmaker. > >The opposite side of this is that while mechanical engineers don't need >to be machinists, mechanical engineers need to understand machine tools >and manufacturing operations. Agreed -- but it's not the opposite side. Process knowledge is always necessary in order to be an effective engineer. >The other side of this is that we can't TEACH software engineering >without requiring the students become machinists; there's not much you >can teach about programming without teaching programming. Here is where we might part. I agree with the second clause, but am not sure about the first, which seems to imply that the mechanics of software engineering is programming. If this is true now, will it always be? And why are there good mechanical engineers who are not machinists, good EEs who couldn't design and lay out an IC, etc.? >The solution in my opinion is that we have to make sure that part of >teaching computer science is teaching the low-level skills that have >been considered part of software engineering up to now. I don't think >any computer science grad ought to be able to graduate without >understanding how to write a good program at the 1000--10,000 SLOC >level. Here you seem to have equated CS with SE. Is there no difference? What does it mean to have a 'good' program? Can we measure that? Will it scale up to 1,000,000 SLOC? >...But when an engineer designs a bearing that is needed, which is not >in the parts catalogues from the acceptable suppliers, but which is >within the common state of art, he is not doing science: there is no >hypothesis/experiment cycle going on. An EE can buy some resistance wire and wind his own resistors, but he would try like heck to avoid that and wouldn't consider marketing the results. Consider the technology that he would have to know in order to guarantee the performance of them. There would be a great deal of science and experimentation involved. In fact, my view of a good systems EE was one who knew better than to design his own switching-regulator power supplies. >Similarly, all engineered software is created from known models (check >e.g. the plans work of Soloway) and most other algorithms are designed >on the basis of existing models as well. You are down at a very low component level, here, what we consider to be implementation. Systems engineers try to stay out of it. >In designing a bearing, a designer had better know about the properties >of other bearings, and of the materials that make them up. Right, but isn't this a speciality generally out of the reach of the average mechanical engineer? >>>I don't think anyone is under the impression that you are learning >>>engineering when learning about finite state automata and the executable >>>models of them. >> >>This is true for you, but not for those who suggested (and still insist) >>here that courses in OS and compilers were good ways to learn software >>engineering. >> >I *am* glad that we have your infinite knowledge to draw on, Richard. Please, let's not trade gratituitous comments. Your next statement shows you knew exactly what I meant: >That is ever so much clearer now. Funny, I had thought that the others >were mostly arguing that OS etc courses were a good place to *present >examples* of software engineering and its problems. But being a mere >mortal, I can only draw on what I read, not on my intimate knowledge of >what other people know. OK, here is what they said: In article <7036@hubcap.clemson.edu> A. Jeff Offutt writes: >Here's one of my ideas for a perfect software engineering project: > An operating system. ...Another one: A compiler Notice that he did NOT say computer science project. In article <4251@pegasus.ATT.COM> Paul S. R. Chisholm writes: >What good are compiler courses? Well, when writing code I want to run >fast, I always feel more comfortable when I know more or less what the >compiler is going to turn my code *into*; and the only way I can do >that is at least read about compiler implementation techniques. Notice that he is writing code, i.e., doing implementation and not design. Drawing on what I read and just presented, I will stand by my analysis of the intent. Let's just disagree on our readings of the above... >I'm not wedded to the *names* of the courses; call them Larry Moe and >Curly for all that I care. But many of the theory topics presented must >(in my opinion) be reinforced with realistic examples, and courses like >compilers, operating systems, and oh, data base courses are a convenient >place to do this. Not one of those will prepare you for emgineering your first MCCR system, believe me! Good luck! >So I don't know -- what doesn't the list include? What do you think is >*not* appropriate for a software engineer to know? >Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm) Well, the last question has the appearance of, but not the unassailability of Motherhood. EEs who specialize in radar design do NOT have all of the scientific knowledge (beyond principles of E&M) necessary to design heavy rotating machines. There is a fundamental gap between being able to understand (even intimately) how an operating system works and how to engineer one. Rich -- When you can measure what you are speaking about, and express it in numbers, you know something about it. Lord Kelvin rsd@sei.cmu.edu -----------------------------------------------------------------------------
crm@romeo.cs.duke.edu (Charlie Martin) (12/01/89)
In article <5132@ae.sei.cmu.edu> rsd@sei.cmu.edu (Richard S D'Ippolito) writes: > >Charlie, you start off OK, but include sarcastic remarks later in your >article. I will try to close most of this discussion down: > I was trying to be pointed without being personally offensive, so please accept my apologies for anything you took personally. This is first draft stuff and tone-of-voice is hard to get across. >> >>The opposite side of this is that while mechanical engineers don't need >>to be machinists, mechanical engineers need to understand machine tools >>and manufacturing operations. > >Agreed -- but it's not the opposite side. Process knowledge is always >necessary in order to be an effective engineer. Agreed one hundred percent! > > >>The other side of this is that we can't TEACH software engineering >>without requiring the students become machinists; there's not much you >>can teach about programming without teaching programming. > >Here is where we might part. I agree with the second clause, but am not >sure about the first, which seems to imply that the mechanics of software >engineering is programming. If this is true now, will it always be? And >why are there good mechanical engineers who are not machinists, good EEs who >couldn't design and lay out an IC, etc.? Wow, about 17 good questions here. Let's see: I think it is true that the "machining" of software engineering is and always will be "programming," and as with Brooks's No Silver Bullet paper, I am suspicious that the process that leads to the final realization of the system will always be complex and always will require substantial detailed effort. I don't think it is true that all programming is or will be software engineering; in fact, my opinion of the future of programming is that "languages" very specific to very limited domains -- like spreadsheets -- will eventually replace general programming with user-defined and user-modified specifications that happen to be efficiently executable. Once we grow past very limited programming domains, I think we begin to hit very basic softs of computation-theoretic and cognitive limits, which in turn I think account for Brooks's NSB phenomenon. The reason there are good MEs who are not machinists I think is that there are good machinists who aren't ME's. The skills really are different, but a good machinist has no reason to feel ashamed of their skills. (And good tool and die makers usually make as much or more than even the most experienced engineers in that kind of environment.) As far as whether it will always be true that we must teach programming to teach software engineering, I don't know. On the one hand, by analogy it seems not; on the other hand, unlike a mechanical engineer, we run into Church's Thesis in software engineering: a mechanical engineer can manipulate drawings and strenth-of-matericals rules and ODEs without manipulating the basic materials; on the other hand, anything that we manipulate that describes a computation is in itself a kind of or model of computation. So my *guess* is "no, but someday we'll have better programming notations that will make programming better and/or more intuitive." The formal methods work that I have been doing recently seems to me to be aimed in that direction, but there is a long long way to go. I don't even have a hint of what the end product will be like. >>.... I don't think >>any computer science grad ought to be able to graduate without >>understanding how to write a good program at the 1000--10,000 SLOC >>level. > >Here you seem to have equated CS with SE. Is there no difference? What >does it mean to have a 'good' program? Can we measure that? Will it scale >up to 1,000,000 SLOC? > I mean instead to suggest that some large part of what we allocate to SE ought to be part of CS, thereby leaving us alone to figure out things like what the problems of scale are, and find solutions. The kind of "good" I'm thinking of is in part aesthetic (dammit) and so, no, I suspect we can't measure it. But I think we'd agree on the generalities: few non-standard transfers of control, layout of the code on the page that emphasizes important parts of the code structure, modularity and design that raises the probability that a change will require minimal changes (information hiding, paramterization, etc.) These kinds of things seem to scale badly; conversely, there are a number of things that seem important only after size > 10^4 SLOC. One reason that I suspect the "code hygiene" stuff is not "software engineering" is that I think it is important on a much lower scale than the other topics of SE are. > >>...But when an engineer designs a bearing that is needed, which is not >>in the parts catalogues from the acceptable suppliers, but which is >>within the common state of art, he is not doing science: there is no >>hypothesis/experiment cycle going on. > >An EE can buy some resistance wire and wind his own resistors, but he would >try like heck to avoid that and wouldn't consider marketing the results. >Consider the technology that he would have to know in order to guarantee the >performance of them. There would be a great deal of science and >experimentation involved. In fact, my view of a good systems EE was one who >knew better than to design his own switching-regulator power supplies. > I think we've reached a point of arguing where the optimal trade-point is, itself an engineering decision. But every engineer needs to deal with "build or buy" unless dealing with nearly trivial problems. > >>Similarly, all engineered software is created from known models (check >>e.g. the plans work of Soloway) and most other algorithms are designed >>on the basis of existing models as well. > >You are down at a very low component level, here, what we consider to be >implementation. Systems engineers try to stay out of it. > > >>In designing a bearing, a designer had better know about the properties >>of other bearings, and of the materials that make them up. > >Right, but isn't this a speciality generally out of the reach of the average >mechanical engineer? > I'm not an ME, but that's not my impression from talking to MEs. (I don't recall, did you say you were? May have been someone else.) In any case, my father in law is a mechanical engineer, and tells the story of needing a bearing, designing it, and then having his supervisor point out that he could have had one from the parts catalogue over his drafting board. Again, I think we've worked down to the point of considering where the optimal point of a trade off lies. A person who specializes in designing bearings will necessarily know more about properties and current art than someone who just needs one that doesn't show in the catalogue; if the ebaring will be a safety-critical component, then it is probably the correct engineering decision to hire a consultant or find an expert in the company. On the other hand, even I don't need an expert to tell me how to design a poured-babbitt bearing to replace the bearing in my ancient lawnmower that can't be purchased any longer. (I can look it up with a little effort, and the result is not critical in any meaningful way.) > >Drawing on what I read and just presented, I will stand by my analysis of >the intent. Let's just disagree on our readings of the above... > Actually, given your comments I think there is an interesting question here: are techniques for writing (maintaining) 1000-10,000 SLOC programs part of software engineering vs. being part of computer science? My opinion (as I said) is that they ought not be; on the other hand, I feel constrained to accept what appears to be the common definition, at least without making an explcit argument for my own. I'm sorry, but I just munged the remaining stuff from you, so I'll paraphrase rather than recovering it. (Stupid vi....) In any case, the last part of your message first suggested that the basics of operating systems, file structures etc wouldn't be any use while designing your first MCCR system. The acronym isn't familiar to me; tell me what it is and I'll tell you if I believe it. I find it unlikely, since I find it hard to imagine a program that doesn't use *one* of the basics of any of the topics I mentioned as seeming essential. But I can't argue on that basis. The last issue is the question of what a software engineer needs or doesn't need to know. My expectation with reference to this was based on current techniques and current art, not based on the assumption that *someday* people will be able to software engineer without knowing how to program, and I think it's still a valid question. The way I understood your response before I mashed it was essentially that the topics of a course in operating systems are not useful for software engineering, but that it was a motherhood statement that people ought to know everythig about everything; that it was unnecessary to know anything in particular about designing the physical carriage for a large antenna if you're designing the RF paths. But what this comes down to is the assertion that designing an operating system is "a different kind of" software engineering than designing these MCCR systems, for example. But this implies that MCCR system designers need to know something as different from what operating systems designers need as Young's modulus is different from cavity resonance. In other words, it seems to assert that MCCR designers don't need to know about operating systems design because they aren't designing operating systems. Since this is a paraphrase, I can't assert that it is circular reasoning, but my recollection of it sure seems to be. I don't accept the axiom that operating systems are that difference; I think there is good reason to assert that they are not, and that they in fact (a) illustrate good SE principles, and (b) are good things to know about in terms of the core knowledge a software engineer needs. So far, it *seems* that I and others have offered a number of reasons for this; the counterargument seems to be that operating systems courses teach things that aren't needed for people who build something else. All of this presumes that every operating systems course is presumed equal, which isn't fair. On the other hand, all the OS courses I've taken, and all the OS books I've read, illustrate (more or less well) much more general concepts about design of large or time-critical or performance-critical systems that I think very SE needs. So I'd still like to know: what was in YOUR OS course that shouldn't have been? If so, is it essential to a concepts of OS course in the sense that an OS course wouldn't be recognizable as an OS course without it? Or was it an accident of that particular text, that particular instructor, or the tools the instructor had with which to teach labs? Charlie Martin (crm@cs.duke.edu,mcnc!duke!crm)