Path: utzoo!utgpu!water!watmath!clyde!rutgers!sri-spam!ames!amdcad!sun!decwrl!hplabs!hp-pcd!uoregon!markv From: markv@uoregon.UUCP (Mark VandeWettering) Newsgroups: comp.lang.misc Subject: Re: First Languages (yet again) Message-ID: <1543@uoregon.UUCP> Date: 9 Feb 88 04:50:51 GMT References: <4022@ames.arpa> <2400002@otter.HP.COM> <932@its63b.ed.ac.uk> <2781@omepd> <3730@megaron.arizona.edu> <2809@omepd> Reply-To: markv@drizzle.UUCP (Mark VandeWettering) Organization: University of Oregon, Computer Science, Eugene OR Lines: 170 In article <2809@omepd> pcm@iwarpo3.UUCP (Phil C. Miller) writes: >In article <3730@megaron.arizona.edu> debray@arizona.edu (Saumya Debray) writes: >>In article <2781@omepd>, pcm@iwarpo3.intel.com (Phil C. Miller) writes: >>> Part of the reasoning behind a technical education should be to prepare >>> a student for the working experience. I contend that exposing >>> first-year students to a functional programming language does not fit >>> that role. If this is so, then I would expect to receive an education (if it can be called that) in C, Pascal, Fortran and Assembler. While each of these languages may have its own usage, they are really not all that difficult. The important thing is PROGRAMMING WELL, not a particular language. >>Assuming you're not referring to two-year trade schools that crank out >>programmers, I disagree. In my opinion, a primary purpose of a CS >>degree program is to teach students the basic principles of computation. And to show them that there are many ways to view computation, as a functional machine with simple substitution semantics, logic programming, traditional von Neumann machines, object oriented programming. I have applauded the Abelson and Sussman because they admirably achieve this goal in Structure and Interpretation of Computer Programs, which was recently adopted as the text for our undergraduate program here at the U of Oregon. >I cannot agree that languages like Prolog and ML teach students the >basic principles of computation. Prolog is quite foreign to the >underlying structure of existing (von Neumann) architectures. ML, as a >functional programming language, enforces a programming style which is >(1) inefficient; (2) not in widespread use; (3) not compatible with >most algorithms which appear in the literature. Seems to me that any >of these are an adequate counter-argument to use of ML as an >introductory language. Prolog, while a fine language for AI/DBMS >applications, is simply not a general-purpose language. You make several points here which are questionable. The efficiency argument has two sides: a language may encourage inefficient solutions, or the implementation of a language may be itself inefficient. The first is true of any language; it is possible to write inefficient programs in almost any language. The second is being dealt with by more effective and efficient compilers. Part of the sucess is due to the fact that languages like Scheme and ML (and Miranda and SASL, thanks David Turner) have a clean semantics that allow you to reason formally about how compilation should proceed. "Not in widespread use" is a questionable argument at best. Fortran is in wide use, but I would shoot anyone who taught it. C, well, I find it a necessary evil, but anticipate C++ as taking its place shortly (like when g++ is stable). Languages like C and Pascal and Fortran are all really not all that different, and not that hard to pick up once you have a good grasp of basic programming skills. Your last argument is perhaps the most persuasive, there doesn't seem to be a good body of literature of how to solve traditional problems in a functional style. This doesn't mean that someone shouldn't do so, however, and I anticipate greater work to be done in this area. In the mean time, a language such as Scheme allows you to at least get a taste of a language with pure semantics, and still allows programming in a traditional procedural sense. >>I feel that at the early stages, this is best done using a declarative >>language. Starting out with high-level assemblers like C or Basic can all >>too easily damage students' brains to a point where they have a hard time >>grasping any concept not directly available in these languages. Emphasize computation, and how it may be accomplished, not how a particular LANGUAGE or IMPLEMENTATION may be accomplished. >The generalization inferred by this is that any programmer not exposed on >day one to declarative languages is brain-damaged. This covers 99.99999% >of programmers. Too bad, if only Donald Knuth and Per Brinch Hansen had seen >ML before they were ruined. Donald Knuth is an amazing man, and perhaps in 100 lifetimes I might accomplish 1% of what he has done, but he is hardly a sparkling example of a programmer. If you need a chuckle, read the intro to volume 1 of The Art of Computer Programming, in which he explains his MIX machine, and how all programs will have to be written in assembler. These texts, while excellent in many way, are considerably less useful because they are too specifically tied to a particular form of programming. >>If your student progresses beyond the first year, he'll presumably >>encounter languages like C; with early exposure to declarative languages, >>he should have the background to use these in a disciplined way. If he >>doesn't progress beyond the first year, of course, the point is moot. Agreed. Don't cater to people who have passing interest in CIS, teach something of the science that computer science is rapidly developing. By teaching "useful" skills, you breed a generation of programmers that believe that they understand computation, but whose fundamental knowledge of computers is constrained by the language that they use to express it. >This brings us full circle to the original point: what should be the first >language a student is taught. Most universities use Pascal or C, which at >least offer the twin advantages of (1) widespread use and (2) some >comprehensible relationship to the underlying architecture. I know of very few people who have gone through low level CIS program that could tell me with any real conviction how the underlying architecture supported C or Pascal execution. If this is true, then why bother teaching them? If they have no idea of how a computer works, why teach them of a register machine? (Yeah, I knowk, that's how they work, but they probably won't understand that until much later) >>> [ ... ] I have just changed jobs. In no interview was I asked >>> whether I knew ML; in every interview I was asked if I knew C. Well, if ya asked me how I earned my bread and butter, I wouldn't say ML. But we are talking about ideals here (or at least I am). >>A lot of interviewers are idiots who'll also ask you whether you've worked >>on machine PQR and operating system XYZ. Do you feel that, in "preparing a >>student for the work experience", schools should dispense with computer >>architecture courses, in favor of training on a dozen different machines? JCL? Fortran? "Just say no!" :-) >I obviously said nothing of the kind, directly or indirectly. > >Questioning an applicant regarding his/her level of expertise in a >particular programming language gives an interviewer some assessment of >the applicant's potential for contribution TO AN EXISTING SOFTWARE >METHODOLOGY. In other words, given that a company needs someone to >work on Unix in C for a project which may already be behind schedule, >they merely wish to know how long it will be before the applicant can >contribute. If they add someone to a project that is behind, it will get further behind. Noone can be dropped into a vacuum and expected to churn code from day one. >I'll close my comments (and hopefully terminate the religious tirade of >ML fans) by stating that declarative languages have a place in computer >science education. I happen to feel that the place is graduate school >and not undergraduate. It depends. I would say they have not much of a place in an education which is deemed to be practical (although I reserve the right to change my mind, I am beginning to believe some more of the declarative doctrine). You are not going to get much call for ML programming, which probably means your time could be better spent. >One minor point I should make here: I have formally studied both ML and >Prolog in graduate school, and I think both are fine languages. I just >don't think a first-year student see them as their first language, just >like I don't think Latin is a good language to teach your children when >they are first learning to talk: you teach them the language most commonly >in use in their culture. For interesting reading on "first language?" questions, try SIGPLAN Notices vol 22, number 3, march 87 "A Critique of Abelson and Sussman or why Calculating is better than Scheming" by Philip Wadler and of course Abelson and Sussman. >>-- >>Saumya Debray CS Department, University of Arizona, Tucson >Phil Miller mark vandewettering, university of oregon cis department