From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,baaf5f793d03d420 X-Google-Attributes: gid109fba,public X-Google-Thread: fc89c,97188312486d4578 X-Google-Attributes: gidfc89c,public X-Google-Thread: 1014db,6154de2e240de72a X-Google-Attributes: gid1014db,public X-Google-Thread: 103376,97188312486d4578 X-Google-Attributes: gid103376,public From: smosha@most.fw.hac.com (Stephen M O'Shaughnessy) Subject: Re: What's the best language to start with? [was: Re: Should I learn C or Pascal?] Date: 1996/07/31 Message-ID: #1/1 X-Deja-AN: 171413618 sender: usenet@most.fw.hac.com x-nntp-posting-host: smosha references: <01bb73e3.1c6a0060$6bf467ce@dave.iceslimited.com> <1996Jul20.124025.122789@kuhub.cc.ukans.edu> <01bb7b06$311fabc0$87ee6fce@timpent.airshields.com> <31FBC584.4188@ivic.qc.ca> <01bb7da2$6c505ac0$96ee6fcf@timhome2> organization: MESC mime-version: 1.0 newsgroups: comp.lang.c,comp.lang.c++,comp.unix.programmer,comp.lang.ada Date: 1996-07-31T00:00:00+00:00 List-Id: In article , arra@inmet.com says... > >In article <01bb7da2$6c505ac0$96ee6fcf@timhome2>, "Tim Behrendsen" wrote: >.. >>The most important thing any student can learn is the stripping away >>of the shroud of abstractions, and seeing the simplicity of what's >>really underneath. Once they get that, all the rest of it comes naturally. >> > >I can see both sides of this issue: the importance of understanding >abstractions, and the importance of understanding what is underneath. >I think that a programmer needs to have a model of how a computation occurs in >order to understand issues such as time and space efficiency of the >computation. On the other hand, understanding the abstractions presented by >both language constructs and by APIs is absolutely critical to being able to >deal with complex systems. A curriculum that does not accomplish the learning >of computing abstractions fails. Its hard for me to judge the "best" approach >for someone learning now, when I have had the experience of learning gradually >over a lifetime. > As with most hot debates, both sides have equally valid arguments. In this I tend toward the abstract side of the fence. We learn to tie our shoes without knowledge of knot theory. We learn to read without a knowledge of grammer. We learn addition, subtraction, multi. and division without any formal mathmatical proofs. In fact learning basic arithmetic is an abstraction as most school children learn by counting pennies and dimes. This prepares us for 90% or more of the problems we encounter in life. Likewise with programming. I believe, once you learn a language, it will be quite sufficient for 90% of the programming problems you encounter. (I do not consider assembly as a language. Despite it's title of assembly *language* it is a code not far enough removed (i.e. abstracted) from the underlying hardware). I am not saying that the basic principles are not important. If one is going to make a career of programming these principles are crucial. But I don't believe one can recognize the underlying principles without the *shroud* of abstractions to frame them. problem: Add two numbers Q: How? A: Put them in registers A and R5 then do ADD A,R5 Q: What is a register? A: A place to hold data. Q: What is data? A: A collection of 8 bit bytes. Q: What is a bit/Byte? A: ... OR problem: Add two numbers Q: How? A: C := A + B The original question was where do you start. I have not learned Pascal so I can't comment about it's quality as a beginning language. For me the best way to start is with Ada. Programming is solving real world problems with a computer. That is an abstraction. The beginning student already understands real world problems. So first teach them to express these problems with a computer language. Ada, with it's strong typing, maps very well to real world objects. Strong typing is about abstraction and that enables the hiding of irrelevant details. This is so important when we are trying to learn something. (That something we are trying to learn is how to solve real world problems with a computer, not how a computer works). Ada syntax was designed to be read by a human being. I have yet to read C code, my own included, that was quickly and easily decipherable a year after it was written. Ada systems catch more errors earlier than other language systems. I know all you old pros who studied under Babbage never make mistakes. But for a beginner, it is a nice feature not to have to go through the whole compile, link, execute process before finding bugs. Should I learn C or Pascal? No. Learn Ada