Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!cs.utexas.edu!wuarchive!udel!rochester!rit!mjl From: mjl@cs.rit.edu Newsgroups: comp.software-eng Subject: Re: CS education [engineering, mathematics, and computer science] Message-ID: <1398@cs.rit.edu> Date: 14 Nov 89 14:04:50 GMT References: <8911092042.AA21382@ctc.contel.com> <34754@regenmeister.uucp> Sender: news@cs.rit.edu Reply-To: mjl@prague.UUCP (Michael Lutz) Organization: Rochester Institute of Technology, Rochester, NY Lines: 73 In article <34754@regenmeister.uucp> chrisp@regenmeister.uucp (Chris Prael) writes: >From article <8911092042.AA21382@ctc.contel.com>, by fitz@CTC.CONTEL.COM (Joe Fitzgerald): >> I learned a helluva lot more about software engineering in one quarter of >> operating systems than I did in four quarters of calculus > >If the four quarters of calculus you took were at all typical, the were >all cookbook and no theory. No-one learns to think from memorizing that >trash. It wasn't until I got into the second and third year stuff that >they started teaching material of real value. > >First year calculus in not taught for any reason having anything to do >with the education of mathematicians. It is taught because the teaching >of physics and most forms of engineering is crippled without it. Which leads to another interesting point: most engineers are not particularly good mathmaticians. This is *NOT* a slam on traditional engineering disciplines -- there are enough other issues that must be addressed, so it is not at all unusual that engineers are intelligent *appliers* of the the results of mathematics, but are not well-versed in the underlying theory. When was the last time that an engineer actually *proved* (in the rigorous mathematical sense) that the application of a differential equation or a linear transform was correct? This was brought home to me in graduate school: one of my colleagues had an undergraduate degree in mechanical engineering, while mine is in mathematics. We were talking one day about our the courses we took, and the discussion turned to complex variables. It soon became apparent that we had taken two entirely different courses. His stressed the application of results to engineering problems, while mine introduced the underlying mathematical structure, with little (that is, no) regard for applications. This has given me insight into one of the raging issues in the software development community today, namely the push by some for greater formalism (in the sense of mathematical rigor). I'm all for a disciplined approach to software development, and my background probably makes me more sympathetic than most to rigorous mathematical systems of program specification, design, and construction. Yet somehow this is all unsatisfying, primarily because application of these techniques seems to require a mathematical sophistication well beyond that seen in other engineering disciplines. To the extent that such formalism can be shown to be inherent to quality software development, I support it. But I sometimes suspect that it is partially a reaction by members of a young profession trying to garner respect from other engineers and scientists. In this regard, I recommend Neil Rickert's delightful letter in ACM Forum, CACM, November 1989). I also think that it can obscure other important issues such as designing for evolution, and the role of insight in the design process, and identifying user wants. To quote John von Neumann: There's no sense being exact about something if your don't even know what you're talking about (in "Exploring Requirements: Quality BEFORE Design", D. Gause and G. Weinberg, Dorsett House, 1989). My own view is that formal methods and rigorous development techniques are important, but that they will have little effect on the state of the practice until their essence can be distilled and presented in the same way as traditional engineering mathematics. Mike Lutz P.S. Lest I be accused of rampant philistinism by adherents of the formal methods school, let me recommend two excellent books: David Gries's "The Science of Programming" (Springer-Verlag, 1981) and Cliff Jones's "Systematic Program Development Using VDM" (Prentice-Hall, 1986). Mike Lutz Rochester Institute of Technology, Rochester NY UUCP: {rutgers,cornell}!rochester!rit!mjl INTERNET: mjlics@ultb.isc.rit.edu