Path: utzoo!mnetor!uunet!mcvax!ukc!its63b!csrdi From: csrdi@its63b.ed.ac.uk (Janet: rick@uk.ac.ed) Newsgroups: comp.lang.misc Subject: re: First Languages (yet again) [long: ~200 lines] Message-ID: <1038@its63b.ed.ac.uk> Date: 3 Mar 88 16:06:26 GMT References: <1016@its63b.ed.ac.uk> <2922@pitt.UUCP> Reply-To: csrdi@its63b.ed.ac.uk (Rick Innis, CS4) Organization: Computer Science, University of Edinburgh, Scotland. Lines: 187 Keywords: engineering, science, programming. Summary: Science, Technology and Engineering: a philosophical treatise. In response to Jonathan Eunice's response to Tony Cunningham's reponse to.... tjc> CS1 courses exist to teach people about computer science. They are tjc> not in general service courses for other departments. jon>What makes you think that good programming techniques are going to be jon>any different when found in physicists, say, than when found in jon>computer scientists? I don't think Tony ever said they would be. What he perhaps didn't make clear was that Computer Science courses *qua* Computer Science courses necessarily involve teaching good programming techniques. Another point is that physicists (for example) will require (for the forseeable future) different programming techniques from computer scientists. The most a computer science course can do for them is teach them the essentials. After that, they get it from their own department. This may reflect a difference between American and British universities; any further thoughts about this from anyone? >Programming is a SKILL, not a science. Agreed. However, like any skill, there are certain ways of doing things which can be formalised into a 'scientific' basis. >You use "computer science" as though it is some higher religion that is >defiled by teaching it to heathens, unbelievers, or people from >other departments. You mean it isn't? :-) Seriously, though, you missed one of Tony's points. In this university, we teach one first-year course for intending Computer Science graduates, one for students of other science departments who need to be taught computing, and one for non-scientists. That, at least, is how the three courses (Computer Science 1A, Computer Science 1B and Information Systems 1) are perceived. That is not to say that only intending Computer Scientists take CS1A; I was an Arts student when I did the course, but that's a whole 'nother posting. (Oh no not another they cry!) Returning to the point, the contents of each course are different; in particular the CS1A course (for intending Computer Science graduates) contains theoretical material missing from the CS1B course. On the other hand, CS1B covers more general issues (not in great detail) which are missing from the CS1A course (most of which are covered in greater detail in later years). Included in this is the existence of other languages, like LISP and ML. bill?> [...] It would be nice if a physicist (for example) could stick bill?> primarily to physics and not have to learn a second discipline bill?> (computer science). Very nice. Unfortunately I don't see this happening in the too-near future, although I feel it should be one of the goals of Computer Science. >Yes, but if a scientist is going to use a tool, like a computer, it >would be a good idea to learn how to use it, to gain some skill at it. Couldn't agree more. This is why the Computer Science department teaches first year engineers how to program. And a bit about how the machines work, as well. jon> Again, let's not confuse the art of programming with science. H'm...does this mean "let's not call programming a science when it is really an art", or does it mean "let's not confuse this art of programming by bringing science into it"? (grin) Seriously, again, there is a scientific element to certain areas of computing, with effects in the field of programming. In particular, things like algorithm analysis and formal methodologies can be of use to the programmer. tjc> Computer Science most certainly IS NOT engineering. If anything it's a tjc> branch of mathematics. jon>Then your computer science is different from the one I see. The bulk jon>of what people call computer science is people designing and building jon>new operating systems, compilers, expert systems, hardware, languages, jon>communication networks, and so on. This is *engineering*... [ the rest of Jonathon's lengthy bit about science v engineering deleted] Ah. We have here, it seems to me, too great a distinction being drawn between engineering and science. Engineering, in this context, seems to me to be an application of science. This not to say that science is in any way superior to engineering; more that they're different sides of the same coin. A coin called technology. Engineers require a certian amount of scientific knowledge. Chemical engineers need to know chemistry, mechanical and electrical engineers need to know a certain amount of physics. This material provides a theoretical basis to the technology with which these people work. Likewise, then, computer programmers require a certain theoretical basis from which to work. From this we can build up a discipline which could be called 'software engineering'. To quote from Jonathon: jon>The bulk of CS, as it is generally talked about, is engineering -- jon>designing, working out practical problems, implementing, etc. I submit that this work is simplified by the existence and *use* of a theoretical basis from which this engineering can proceed. I'm not sure, but I think Jonathon agrees with this to some extent: jon> There is no *science* being done in these applied areas, even jon>though the application may further knowledge in the field. I think part of the overall problem is a difference in semantics. Engineers in the States, if I recall rightly, are part of a highly respected profession. Unfortunately in the UK, a certain snobbery still exists which condemns engineers to being a lower form of life than scientists. Hence, engineering is cognate with greasy hands and sweaty brows rather than white coats and air-conditioned offices. Back to Jonathon: jon>The science of computers is the less-popular theory -- jon>the study of things like computability, decidability, and algorithms. Returning briefly the issue of 'engineering vs mathematics', can I point out that issues such as computability and decidability arose from work on formal systems which predates the existence of computers, and which was largely carried out by logicians and mathematicians? It is from this formal background that our present day notions of what is computable are derived. In this sense, Computer Science is indeed a branch of mathematics. As Tony's pointed out in another article, perhaps if an interest in this work was taken by more programmers, we would have better programs being written. pcm> [ ... ] I have just changed jobs. In no interview was I asked pcm> whether I knew ML; in every interview I was asked if I knew C. bill?> [...] I used to list ML on my resume as one of the programming languages bill?> I know. I finally removed it because (1) nobody had ever heard of it, bill?> and (2) when I explained what it was, they didn't care. tjc> If they don't care then they ain't worth working for! jon>Anthony is clearly not going to get a job in the US. Well, that's you told, Antoine! Mind you, I agree. (Fortunately, I have no desire to work in the US.) nevin1> Learn the good programming habits first jon>YES YES YES YES YES Yes. Now we come back to the origin of the matter. As I said a few posting back, I have found that learning other programming languages *helps* learn good habits. First off, structure: This is enforced by languages like Pascal and Modula, which therefore make them good ideas as teaching languages. Languages like C , FORTRAN and IMP (another of our obscure Edinburgh languages, but one of the most efficient OS's in the world is written in it) do not enforce structure and therefore allow bad habits to develop. However, languages like Prolog and ML also have uses. The Artificial Intelligence department uses Prolog for its undergraduate teaching. The CS department teaches ML, partly to give a feel for other styles of programming and partly to illustrate the some of the theoretical material taught in the course. Having programmed in ML certainly makes Computability Theory more understandable; it has also affected the way I think about functions when I'm writing in procedural languages. Even if my prospective employer has never heard of it, I am a better programmer for the experience. Likewise, my current work with Smalltalk has led to a change in the way I view data structures. I'm not likely to find a job working with Smalltalk immediately I graduate, but the knowledge is worthwhile. Well, that's that said. How do I finish up? I think I'll just stick in my signature and leave it at that.... --Rick. -- Janet: rick@uk.ac.ed BITNET: rick%uk.ac.ed@UKACRL ARPA: rick@ed.ac.uk UUCP: rick%uk.ac.ed%ukc@mcvax "Life would be so much easier if everyone read the manual."