From mboxrd@z Thu Jan 1 00:00:00 1970 From: presotto@plan9.bell-labs.com To: 9fans@cse.psu.edu Subject: Re: [9fans] Re: the 'science' in computer scienscience MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Message-Id: <20010612003610.3980A199E9@mail.cse.psu.edu> Date: Mon, 11 Jun 2001 20:36:08 -0400 Topicbox-Message-UUID: b4dc2af4-eac9-11e9-9e20-41e7f4b1d025 Granted that I haven't done circuit design in years, but, modulo a few fires here and there, it didn't seem that much different than programming. There were little tricks like using resistance ratios to keep the gain on transistor circuits less temperature dependent, general rules on stage coupling to keep transients in one part of a circuit, ... There were rules of thumb, absolute no-no's, etc. For that matter, I spent a good chunk of my adolescent life laying bricks and things weren't much different there except that I felt a lot more tired a the end of the day. Both science and engineering involve solving problems with the tools at hand. Both can be predictive. With a finite element analysis of a bridge, I can say pretty definitively what loads it will take. The main descriminator is that when the thinking involves figuring out problems set to us by the nature of the universe, it tends to be called a science. When we are thinking about building something, it's called engineering. The line is pretty fuzzy unless you are firmly embedded in one camp or the other. Mathematics circles both camps. Mathematics is the tool used to solve most engineering and science problems. I like the OED's definition here: (a) in a strict sense, to the abstract science which investigates deductively the conclusions implicit in the elementary conceptions of spatial and numerical relations, and which includes as its main divisions geometry, arithmetic, and algebra; and (b) in a wider sense, so as to include those branches of physical or other research which consist in the application of this abstract science to concrete data. When the word is used in its wider sense, the abstract science is distinguished as pure mathematics, and its concrete applications (e.g. in astronomy, various branches of physics, the theory of probabilities) as applied or mixed mathematics. Some of the best physicists and computer scientists I've met called themselves mathematicians. To a certain extent, a scientist or an engineer is a mathematicion with boundary conditions. Computer science/engineering/whatever is unique in that the boundary conditions seem to change a bit faster than in the other disciplines (though biology may be passing us). Most disciplines only change due to a new concept or discovery coming along. CS has that too; caches, virtual memory, recursion, type theory, quantum computing (if it happens), ... However, we have a constant churn of our design rules and engineering points caused by Moore's law and its offshoots. We're working in a discipline where everything changes exponentially in time, and a small time constant at that. Today's rules are usually out the window next year. So bringing this back to education... This means that we have a hard time imparting anything from generation to generation that can really be useful except for how to reason about problems. The only three ways I know of doing this are (1) studying in depth programs that you believe are elegantly done, i.e., easily understood, built with the minimum effort to do the job, and extensible. (2) guiding them through programming assignments to do the same, showing them a better way if they didn't find it themselves. (3) get a degree in another discipline so they at least have a balanced viewpoint. This is in addition to the fundamental concepts of programming and design. However, there are countless books to teach them that, they could stay home and read them instead of going to class if that is all they'ld walk away with. P.S. You can tell I'm avoiding real work, can't you.