Xref: utzoo sci.philosophy.tech:3160 sci.psychology:3176 comp.cog-eng:1747 sci.lang:7056 Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!uflorida!stat!sun13!gw.scri.fsu.edu!pepke From: pepke@gw.scri.fsu.edu (Eric Pepke) Newsgroups: sci.philosophy.tech,sci.psychology,comp.cog-eng,sci.lang Subject: Re: Computer Languages and the Sapir/Whorf hypothesis Message-ID: <489@sun13.scri.fsu.edu> Date: 23 Aug 90 15:41:28 GMT Sender: news@sun13.scri.fsu.edu Followup-To: sci.philosophy.tech Organization: Florida State University, but I don't speak for them Lines: 63 References:<5137@munnari.oz.au> <11606@pucc.Princeton.EDU> In article <11606@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU (Ed Nilges) writes: > The lesson of pseudocode (the use > of a structured form of natural language in system specification) > is that skill at expressing algorithms may not be tied to knowledge > of ANY programming language whatsoever. Most of the examples of pseudocode I have seen omit the details of programming languages but comprise many assumptions about the structure of code. My own informal opinion, based on a great deal of learning and some teaching, is that programming languages can serve as conduits for learning various programming techniques which can then be readily transferred to other languages. I wrote my first recursive descent top-down parser as part of a freshman programming exercise in Pascal. Up until then, I had not really grokked the power of recursion. After then, it was trivial to do the same thing in BASIC using a push-down stack. Pascal is a good way of teaching recursion, and BASIC is not, but once taught, the technique is widely applicable. Similarly, learning SNOBOL teaches one about pattern matching, the idea of success or failure as an additional piece of information apart from the value of an expression, and associative programming through table lookup and the ability to create new variables on the fly. APL teaches one about certain kinds of data abstraction and operator overloading. LISP teaches one about treating programs as data and vice versa. Even FORTRAN and COBOL have lessons. FORTRAN teaches about numerical data types such as COMPLEX and a primitive kind of operator overloading, and even COBOL enforces some sort of organizational discipline. Learning as many languages as possible, even the "bad" ones, teaches an intuitive understanding of Turing completeness. It also teaches the mistakes of language designers, which are as important to learn as their successes. The process of learning involves extracting from a wealth of information that which is most useful. I have no evidence that humans are generally incapable of doing this, so I view Dijkstra's pedantic runs as counterproductive. People who can easily jump from one programming language to another and who can learn a new one in a week's time are stronger programmers than those who waste their time in immature squabbles about whether C or Pascal is "better" or "more structured." Such an overview, however, only comes after a person has learned several programming languages. Perhaps a similar thing occurs in human languages, but most people just don't learn enough of them to have the effect. I don't know what is typical, but I only know a mere three human languages, all of them European, compared to about 30 programming languages, including different Assemblers but excluding other dialects. In summary, while various programming language can expand one's ability to use programming techniques, the idea that they can constrain one's ability is very shaky. Eric Pepke INTERNET:pepke@gw.scri.fsu.edu Supercomputer Computations Research Institute MFENET: pepke@fsu Florida State University SPAN: scri::pepke Tallahassee, FL 32306-4052 BITNET: pepke@fsu Disclaimer: My employers seldom even LISTEN to my opinions. Meta-disclaimer: Any society that needs disclaimers has too many lawyers.