Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!cbatt!ihnp4!qantel!lll-lcc!lll-crg!rutgers!caip!pyrnj!mirror!cca!g-rh From: g-rh@cca.UUCP (Richard Harter) Newsgroups: net.cse Subject: Re: Role of computer science (was !Tom) Message-ID: <10267@cca.UUCP> Date: Sat, 27-Sep-86 15:40:14 EDT Article-I.D.: cca.10267 Posted: Sat Sep 27 15:40:14 1986 Date-Received: Tue, 30-Sep-86 07:31:39 EDT References: <699@sdcc12.UUCP> <10202@cca.UUCP> Reply-To: g-rh@cca.UUCP (Richard Harter) Organization: Computer Corp. of America, Cambridge Lines: 105 Summary: Theoretician's role limited. > > Er, ah, I hate to break it to you, but the theoretical >foundations were well in place before the programmers got there. >Recursion and induction (two very powerful programming techniques) >were well in place from centuries ago. The notion of an algorithm >existed before electricity was even understood. Church invented >the Lambda Calculus almost 20 years before LISP existed, theorem-proving >systems of Gentzen preceded AI, and Kleene had a number of formal language >results before the first compiler existed. Some of them, only some of them. Numerical analysis existed before computers; mathmematical logic existed before computers. But a lot of stuff didn't and the stuff that did wasn't always formulated in a relevant form. For example: Nowadays we design algorithms using general principle, e.g. greedy method, divide and conquer, and all that. Today I would expect that someone who was trained in modern methods could create the FFT (Fast Fourier Transform) as a classroom exercise; I remember when the FFT was first developed -- it was a real bombshell. It was also very mysterious. To repeat: HOL's were very much an ad hoc invention. I know about formal languages; I knew about them in 1961 when I started programming, and, believe me, they had very little to do with most programming. As Dijkstra observes, pre-computer logic was atemporal. Mathematicians did a great deal of twisting to force computer programming into the terms of classical recursion, induction, and formal logic. Data structures are mostly a modern invention; I also remember when hash coding hit the streets -- there were people who felt that hash coding was somehow illegitimate. Somebody had to invent B-trees you know. The whole concept of data structures is new. Fundamentally, you can do things with computers that could never be done before and the things that you can do are constrained by factors that are not at all apparent without the experience of programming computers. > > The reason that Computer Science *seems* like a new field is >because it can be so closely related to other existing fields such as >Algebra, Logic, and Analysis. It is true that along the way >programmers have made their contribution to the field of the science, >but the real question that people in the field of Computer >Science/Engineering must ask themselves is whether we want to depend >on the fact that programmers will stumble their way to the truth as >they have so far, or whether we can create a discipline whereby the >path can be made to reveal itself. > > Your note that early "programmers" were not graduates of >programming schools, but mathematicians. To quote Robert Frost (I Agreed. The time of the programmer making fundamental discoveries by ad hoc experimentation is past. When you don't know anything muddling about is a great way to learn something -- better than detailed analysis based on radically insufficient data. But the 'muddle about' approach only takes you so far and then you go nowhere slowly. I do suspect, however, that there is a tendency in Academia to pay insufficient attention to what can be learned from the experience of practicising programmers, but that is another matter. Premature theorization has been the bane of many sciences. > You note that early "programmers" were not graduates of >programming schools, but mathematicians. To quote Robert Frost (I >think) "... and that has made all the difference." THEY had the >discipline, the deeper understanding to write programs where none had >been written before. To take a curriculum of programming without also >understanding the formal foundations is to be just another software >tool. > >Michael >tiemann@mcc.com Well, actually, we wrote some pretty garbagy programs in the old days. [Unlike what's done, today :-)]. I'm not sure what you mean by "the formal foundations" though. You can write some pretty good software without knowing anything about the lamda-Calculus. But it is pretty hard to learn about writing good software without knowing a lot about how software is put together. Let me tell a story: Many years ago I knew a hot programmer. He was good; he could take a problem and produce a working program that got good answers in short order. However he did have one idiosyncrasy -- he didn't use subroutines. Everything was all in one big Fortran program. The day came when one of his twenty thousand line specials blew the compiler -- symbol table overflows all over the place. So he did what people told him to do; he split it up into subroutines. He divided the program in half and made a 10000 line main program and a 10000 line subroutine. Now my contention is that, nowadays, you can't be a 'good software tool' without a good grounding in theory. A lot of the stuff we did in the old days just doesn't cut it today [er, ah, oh well -- I wish that were a true statement.] But my opinion is that we could do with a lot less 'computer science' and a lot more 'software engineering'. Don't get me wrong -- computer science is interesting and valuable. But software engineering is also interesting and valuable, and a lot of people who are taking CS degrees should be in SE. Enough. -- Richard Harter, SMDS Inc. [Disclaimers not permitted by company policy.] For Cheryl :-)