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: 103376,6c13cc000274246b X-Google-Attributes: gid103376,public From: dewar@merv.cs.nyu.edu (Robert Dewar) Subject: Re: Please Help. Date: 1997/09/12 Message-ID: #1/1 X-Deja-AN: 272065840 References: <01bcbcde$f8a425c0$ca70fe8c@default> <5v2qk5$cpu$1@goanna.cs.rmit.edu.au> <5vaude$q20$1@goanna.cs.rmit.edu.au> Organization: New York University Newsgroups: comp.lang.ada Date: 1997-09-12T00:00:00+00:00 List-Id: Tristan says (by the way, please follow newsgroup conventions and keep your line lengths under 80 characters, your message had excessively long lines, which will cause many people trouble reading your messages) <> That's not unreasonable, but to me it misses the main objective in a beginning class on programming which is to teach program construction techniques, logical design techniques, and in particular abstraction. It is NOT about teaching 101 neat gizmos that you can use in w4riting neat programs. Indeed neat gizmos are basically a distraction to the much harder task at hand of learning how to program. <> One thing to keep in mind if you are a student in a beginning course which uses programming language X is that the details of what language X can or cannot do are essentially completely irrelevant, and the skills you learn which are X-language specific are the lest important skills you will learn in the course if it is taught right. <> As I mentioned in my earlier note, it is indeed valuable to show students how they can use an abstraction without understanding the details of the implementation, but I find it more instructive to use for this purpose abstractions where we *can* later look at the implementation and see how it relates to the specification. So I would not choose unbounded strings for this purpose, but rather bounded strings (as soon as I had introduced generics, which I do fairly early on, since genericity is such a critical aspect of abstraction. Or, if you did not want to introduce generics that early, you could use Strings.Fixed as the example abstraction. <> Fine, this is perfectly reasonable, but it is about specific Ada features, and is thus on the general scale of what one tries to teach, not particularly important. I cannot over-emphasize the importance of teaching early on the principles of abstraction, separation of spec and implementation, and incremental design. These are not easy subjects to teach (whereas teaching technical gizmos in any language is by comparison a relatively easy task). You can turn this around by the way, it is easy to learn technical gizmos, it is MUCH harder to learn what abstraction is about.