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: fc89c,97188312486d4578 X-Google-Attributes: gidfc89c,public X-Google-Thread: 109fba,baaf5f793d03d420 X-Google-Attributes: gid109fba,public X-Google-Thread: 103376,97188312486d4578 X-Google-Attributes: gid103376,public X-Google-Thread: 1014db,6154de2e240de72a X-Google-Attributes: gid1014db,public From: "Alf P. Steinbach" Subject: Re: What's the best language to start with? [was: Re: Should I learn C or Pascal?] Date: 1996/08/06 Message-ID: <3206BAE5.4CB4@online.no>#1/1 X-Deja-AN: 172355214 references: content-type: text/plain; charset=us-ascii organization: Telenor Online mime-version: 1.0 newsgroups: comp.lang.c,comp.lang.c++,comp.unix.programmer,comp.lang.ada x-mailer: Mozilla 2.0 (Win95; I) Date: 1996-08-06T00:00:00+00:00 List-Id: Robert I. Eachus wrote: > There are still CPU chips being manufactured which implement the > semantics of something close to assembler in a direct manner. But I > doubt any are used in new designs... In most modern CPU chips the > relation between the abstract machine API and the execution state of > the chip is tenuous at best. So the distinction between C and > assembler is a distinction without a difference. They both provide > incompletely specified virtual machines which programs can be written > against. (And no, the hardware is NOT a specification for the > assembler. Things left unspecified by the API are different in > different SPARC chipsets for example.) Either you're saying something I don't get, or you're not saying anything at all. There are at least three issues on the table: (1) the header of the thread, now long forgotten; (2) whether students / beginning programmers are best off learning from the bottom up, starting with the v.N. architecture, or from the top down, starting with some suitably high-level language, or using a gradient blending of the two (my view); (3) a clarification of what's meant by "abstract" and "concrete" in the context of programming -- which seems to be the issue of your posting. Re issue (3), there are levels upon levels upon levels: my point here is that when you look from level n, "concrete" refers to levels n-1, n-2 and so on (toward the physical world), whereas "abstract" refers to level n, n+1 and so on, of which there are an infinity you can make up just as you want, and an infinity of possible levels n+1 coexisting. Of course these terms are relative. Everything is relative to something. For me, that's a truism. The argument against disregarding or hiding the concrete (levels n-1, n-2 etc. when you are learning about level n) is simply that the particular instance of a level n you're learning about was abstracted from the concrete levels, and your understanding of level n will be lacking if you don't know anything about the concrete, the *why*s of the solutions and abstractions at level n. It's like saying "Do things this way, follow the cookbook recipes, but for God's sake don't try to understand it: that will lead you into temptation and severe trouble". Likewise, disregarding higher level abstractions is just as silly. In many cases, solutions at a level n are guided by higher level abstractions -- the "ideal" -- and fit as best possible to n-1. - Alf