[comp.edu] Language Use

thr1@ra.MsState.Edu (Thomas Ritter) (03/14/91)

Hello,

	I've been hearing some discussion in our department about changing
our primary language from Pascal to something else.

I don't want to start the Ada vs C vs "other" argument.... 

	I would like to hear what people consider important in making a
decision. ( Usefulness in the real world, teaching ease, programming
environment... etc.)

I would also like to find out what some other schools are doing.

Tom Ritter
thr1@ra.msstate.edu

reggie@paradyne.com (George W. Leach) (03/15/91)

In article <1150@ra.MsState.Edu> thr1@ra.MsState.Edu (Thomas Ritter) writes:
>	I've been hearing some discussion in our department about changing
>our primary language from Pascal to something else.

	I'm assuming you teach in a CS department.

>I don't want to start the Ada vs C vs "other" argument.... 

	Nobody wants another one of those.....

>	I would like to hear what people consider important in making a
>decision. ( Usefulness in the real world, teaching ease, programming
>environment... etc.)

	Those are excellent questions.  The answers will depend upon
whom you talk to.  Pascal has traditionally been the language of choice
in CS programs due to its use as a teaching language.  However, since
I left school I have never used it in the "real world".  Certainly, one
could argue that the principles can be taught with Pascal and then you
can map these into whatever language you choose to use in your work.
But many employers want to see specific language and OS skills on a
resume.  They are not interested in training someone in these skills.

	Pascal reminds me of a bike with training wheels.  But you can't
take the training wheels off and use the bike once you have learned.  If
we could put training wheels on a language such as C, and then take them
off when we have learned how to keep our balance, then we would have
something.


>I would also like to find out what some other schools are doing.


	I teach part-time, in the evenings at a junior college.  I am 
teaching for the Engineering Technology Department, so my focus is
different.  They still require FORTRAN, but we also offer a C course
for which the FORTRAN course is the prerequisite.  I have heard some
rumblings about the FORTRAN requirement going away, but I have not
heard what it would be replaced with.  Some say a general course in
using CAD packages, and other tools.  But I just can't see all of an
engineer's computing needs being served by this approach.  Not everything
fits into such nice, neat solutions.  I advise my students to learn both
FORTRAN and C, unless they know for sure what area of engineering they
want to go into.


George

-- 
George W. Leach					AT&T Paradyne 
reggie@paradyne.com				Mail stop LG-133
Phone: 1-813-530-2376				P.O. Box 2826
FAX: 1-813-530-8224				Largo, FL 34649-2826 USA

eibo@rosun1.informatik.uni-hamburg.de (Eibo Thieme) (03/15/91)

If I were to decide which language to use, especially to start with
I would consider the following objectives:

   * Immediate Reward
     "Write down a few lines of code and watch things happen."
     Don't let them be bored by extensive syntax-checking or
     mystical compiler usage.

   * Being Modern
     "Look, I can do fancy windows too." Beginners want their 
     programs to be as pleasing to the eye as those shiny
     products they see on the market.

   * Essential Programming
     "The algorithm was in the books but doing the interface
     took me a week." Most of real world applications seem to
     be 90% user-interface, students instinctively try to
     adapt to this situation.

   * Software Engineering
     "When I saw the other group understood our code I knew it
     was worth the effort." Systematic construction of software
     is a far higher good than freaky code dabbling. Don't use
     a language which invites "creativity".

   * Reliable Software
     "I was dumbfounded when the compiler found my conceptual
     glitch." Beginners should learn to appreciate extensive
     syntax-checking, type-checking, etc. 
     
I cannot think of any small set of languages taking into account
all these constraints and there will be even more to add to the list.
Sorry, but I would like an answer too.

eibo

-- 
eibo Thieme                             *    FB Informatik
eibo@fbihh.informatik.uni-hamburg.de    *    Universitaet Hamburg
..!uunet!mcsun!unido!fbihh!eibo        *    Schlueterstr. 70
PHONE: +40 4123-5660                    *    D-2000 Hamburg 13  (FRG)

mcn@mimas.UUCP (Michael C. Neuman) (03/17/91)

reggie@paradyne.com (George W. Leach) writes:

> 	I teach part-time, in the evenings at a junior college.  I am 
> teaching for the Engineering Technology Department, so my focus is
> different.  They still require FORTRAN, but we also offer a C course
> for which the FORTRAN course is the prerequisite.  I have heard some
> rumblings about the FORTRAN requirement going away, but I have not
> heard what it would be replaced with.  Some say a general course in
> using CAD packages, and other tools.  But I just can't see all of an
> engineer's computing needs being served by this approach.  Not everything
> fits into such nice, neat solutions.  I advise my students to learn both
> FORTRAN and C, unless they know for sure what area of engineering they
> want to go into.
> 
   With my experience in the "real world", FORTRAN is nearly a 
prerequisite to doing anything with engineering. At Los Alamos National 
Labs, the majority of programmers use FORTRAN for several reasons:

1) It's nearly as easy as BASIC to learn which means that the scientist 
can get down to the problem rather than messing with the programming 
technicalities.
2) The compilers for the Crays and Connection Machines automagically
vectorize and parallelize fortran code, whereas C has to be "forced" by 
the programmer to multitask.

  However, on both systems, FORTRAN is less effecient. A piece of well 
written C code will outperform the FORTRAN stuff easily. Unfortunately, 
the scientists who are using the machines to do their work don't have 
time to learn the intricasies of a programming language, and thus will 
stick to FORTRAN.

  Thus, my advice: learn them both. If you want to be a programmer, learn 
C, if you want to be an engineer, learn FORTRAN. If you're not sure, 
learn both of them. C is hard to learn, FORTRAN just requires knowledge 
of BASIC.


<<<===========================--------==============================>>>
<<<  Mike Neuman                 ||     Senior Systems Programmer   >>>
<<<  mimas!mcn@bbx.basis.com     ||      Albuquerque Academy        >>>
<<<  mcn@beta.lanl.gov           ||      Computer Science Division  >>>
<<<===========================--------==============================>>>
  "It's hard to work in a group when you're omnipotent" - Q ST:TNG
 "Counsel will refrain from making opposing advocate disappear" - Data

faustus@ygdrasil.Berkeley.EDU (Wayne A. Christopher) (03/17/91)

Despite its reputation as a baby language, Logo has a pretty nice
conceptual framework -- it's a dialect of Lisp, even though the syntax
doesn't make it look that way.  From an early training in Logo, it
should be possible to progress to Scheme and then to Common Lisp.
These languages are strong in the "immediate reward" and "essential
programming" categories you mention, and can be augmented with
environments that make snazzy programs easy to write.  As for "software
engineering" and "reliable software", the outcome is debatable.

The question is, if all people are exposed to early are Lisp-like
languages, will they be able to adapt easily to using Algol-like
languages?  That is, which of these sequences is better:

	Logo -> Scheme -> Common Lisp -> C++ -> Ada ....

	Basic -> Pascal -> C++ -> Common Lisp ...

I am assuming that in order to be an effective computer professional,
one must be familiar with both Lisp-like and Algol-like languages.

	Wayne

cheung@mathcs.emory.edu (Shun Yan Cheung) (03/17/91)

In article <1150@ra.MsState.Edu> thr1@ra.MsState.Edu (Thomas Ritter) writes:
>Hello,
>
>	I've been hearing some discussion in our department about changing
>our primary language from Pascal to something else.
>
>I don't want to start the Ada vs C vs "other" argument.... 
>
>	I would like to hear what people consider important in making a
>decision. ( Usefulness in the real world, teaching ease, programming
>environment... etc.)

I feel the language is the least important in teaching programming,
rather, concentrate on the programming methodology. The programming
language is just a tool. A good carpenter will work magic with any tool.
Didactically, I see no reason what so ever to favor either Pascal or 
C when the objective is to teach student programming. The concept of 
an assignment, procedure etc is the same. If the student masters 
the concepts, he will have not problems learning another language 
in a few days. Personally however, as a teaching tool, I prefer Pascal 
over C because the typing is stronger (I am comparing the old style C, 
I have no idea if ANSI C is strongly typed.) Certainly I will reject 
Fortran (no recursion), even though it is widely used by engineers. 
On the other hand, if you are teaching programming to engineers 
(non majors), you may want to consider Fortran for the sake of 
familiarity. If you want to based your choice on practicality
measured by the number of programs written in a certain language,
I think Cobol is still the number one language. Surely you don't
want to use Cobol....

>
>I would also like to find out what some other schools are doing.

At Emory, the non majors get Pascal and the majors gets C
because the higher level courses all use C.
-- 
Shun Yan Cheung     |  cheung@mathcs.emory.edu                  Internet
Emory University    |  cheung@emory.bitnet			BITNET
Dept of Math and CS |  Voice: (404) 727-3823
Atlanta, GA 30322   |  Engineering: make it work. Research: make it work BETTER

jff@denali.ee.uidaho.edu (Jim Frenzel) (03/19/91)

In article <3s3wy4w163w@mimas.UUCP> mcn@mimas.UUCP (Michael C. Neuman) writes:
>   With my experience in the "real world", FORTRAN is nearly a 
>prerequisite to doing anything with engineering. At Los Alamos National 
>Labs, the majority of programmers use FORTRAN for several reasons: ...

While I've never worked at  Los Alamos, I was an engineer with IBM for
7 years and NEVER saw anyone use FORTRAN.  Based on that and interaction
with other engineers, I seriously question that FORTRAN is a 
"prerequisite to doing anything with engineering."  A lot of number
crunching was done during the 70's with FORTRAN; that and the existence
of vectorizing/parallelizing tools are the only reasons it continues to
exist.

>  However, on both systems, FORTRAN is less effecient. A piece of well 
>written C code will outperform the FORTRAN stuff easily. 

This is an excellent reason for abandoning FORTRAN.

>  Thus, my advice: learn them both. If you want to be a programmer, learn 
>C, if you want to be an engineer, learn FORTRAN. If you're not sure, 
>learn both of them. C is hard to learn, FORTRAN just requires knowledge 
>of BASIC.

IMHO, C is no harder than any other language, PROVIDED you start simply
and add material as the student improves.  I wouldn't jump into pointers
and structures the first day of class.

Again, IMHO, the only reason to learn FORTRAN is if you intend to be
an engineer historian. :-)  It is a dead language that anyone can
pick up if ABSOLUTELY necessary.  Why waste class time teaching yesterday's
tools?

-- 

  Jim Frenzel             Electrical Engineering
  University of Idaho     Moscow, ID 83843
  208-885-7888            jfrenzel@groucho.mrc.uidaho.edu

dww@math.fu-berlin.de (Debora Weber-Wulff) (03/19/91)

Here in Berlin at the Free University we just have a program
for minors and for teacher certification in "Informatics".

The first semester is taught Miranda (a functional language) so
that all the students, those with programming experience and
those without (i.e. BASIC freaks... <--- flame!) are all at the
same level. This works rather well, although it is difficult to
motivate further because Miranda is not used in industry or in
the schools. The big project last semester was to write a text
formatter in Miranda, the students were quite enthusiastic about 
it. The Miranda system works quite well, it is more robust than
the Hope system that was tried a few years ago (before my time,
I don't know details).

In later semesters MODULA-II is taught as the imperative
language. Some students complain that they would rather learn
Pascal, but on the whole they are enthusiastic, and even try
and introduce MODULA-II into the schools.

I am somewhat mystified by the statement to the effect that
Pascal is not used in industry: I spent 4 years writing
library information systems in a Pascal dialect with modules
and most of the ISO stuff, and got a good feeling for the
industrial potential: with the right collection of interfacers
(window stuff, a good database interface, an abstract data
type procedure/function generator, etc.) we got a lot done.
And as much as we cussed at the strong type checking - as soon
as we tried to get around it mit tricky modules, etc. we fell
flat on our collective noses!

-- Debbie

-- 
Debora Weber-Wulff
snail: FU Berlin, ZI Fachdidaktiken, Habelschwerdter Allee 45, W-1000 Berlin 33
email: weberwu@inf.fu-berlin.de, dww@math.fu-berlin.de

kemnitz@hermes.Berkeley.EDU (Greg Kemnitz) (03/19/91)

Some statements about languages and industry.  Note that this is based on my
experience in the US and is not "official"...

In my experience, the following seems to be true:

1.  Algol-style languages are still by far the most common in software
    development, at least in industry.

2.  It is quite rare for knowledge of a Lisp-like language to be necessary
    outside of relatively restricted environments (ie expert-system vendors,
    some military and DOD work, etc).  These languages are far more important
    in academia than they are in industry.

3.  While ADA is The Required DOD Language, it has not caught on in quite the
    way the DOD envisioned for various factors, among them is the fact that
    the vast majority of software people are not working on projects that are
    source-code deliverable to the Department of Defense, and it took quite a
    while before ADA compilers of any quality appeared on real hardware.  The
    DOD itself may have killed ADA with a loophole that several large trucks
    have been driven through - the statement that ADA was unnecessary if it was
    too expensive and not "mission critical" (ie F-16 flight control software).

    ADA is used a a few MIS shops and at some DOD contractors, but outside
    this relatively restricted domain, it is not very common.

The following seem to be the most commonly used languages in industry:

1.  C.

    The old favorite, with all its foibles and annoyances, is still the
    undisputed leader in UNIX and PC software development.  I don't want to
    quote percentages, but C is dominant enough in these environments that
    _not_ using C for a piece of software indicates an unusual group.  Pay 
    for good C hackers is generally the best in the industry.

2.  COBOL.

    This ancient language still dominates MIS shops.  However, COBOL programmers
    are almost always the most poorly paid in industry.  It is unclear to me
    whether C or COBOL is number one in actual numbers of people coding in
    each. COBOL is likely to stay around as long as MIS shops exist, primarily
    due to the conservative nature of most MIS executives, and their colossal
    investments in existing hardware and software.

3.  FORTRAN.

    This is another ancient language that dominates by force of inertia.  Used
    largely by scientific programming shops or people who crunch numbers.
    Billions of lines of code guarantee that this language will continue to be
    important, in spite of the nightmares that seeing a GOTO statement cause
    modern software engineers.

4.  C++.

    The first (and as far as I can see only) of the "object oriented" languages
    to become truly important in industry.  Many C shops are converting to
    C++ so they can take advantage of existing code as well as the wins that
    object oriented programming provide.  C programmers should learn C++, and
    its object oriented programming paradigm, if they learn nothing else.
    A person skilled in C++ will not have many problems finding a job.

The Small Fry:

Lisp, ADA, Pascal (once much more important - derailed largely by C),
Modula I, II, etc, PROLOG, Forth (important in manufacturing and robotics), 
numerous smaller and in-house languages.

While it is important for students to be able to learn any programming language
quickly and easily, and to be exposed to several different language paradigms,
they need to eat as well.  A CS major whose undergraduate curriculum has
emphasized Lisp and Ada, and has no experience in C, will find that employment
prospects are quite limited.  While this should not stop universities from
teaching new programming paradigms, they must pause and think whether their
graduates will be able to eat, and make sure their students are armed with both
the latest in paradigms and software engineering techniques, and have a good
understanding of languages and paradigms they are likely to encounter in
industry.

The argument that any good student can pick up any programming language quickly
makes sense in the context of teaching, but it often doesn't wash with hiring
managers and the personnel departments that screen resumes.

-----------------------------------------------------------------------
Greg Kemnitz                  |      "I ran out of the room - I
Postgres Chief Programmer     |      didn't want to be killed by a pile
278 Cory Hall, UCB            |      of VMS manuals" :-)
(415) 642-7520                |
kemnitz@postgres.berkeley.edu |      --A friend at DEC Palo Alto in the Quake

billh@hplsla.HP.COM (Bill Harris) (03/19/91)

I just found an article by Curtis, Sheppard, Kruesi-Bailey, Bailey, and
Boehm-Davis entitled "Experimental Evaluation of Software Documentation
Formats", published in "The Journal of Systems and Software", vol. 9, pp.
167-207, 1989.  Briefly, they studied the effectiveness of certain types of
software problem-solving behavior as a function of documentation formats
and styles.

On page 198-199, they describe how they removed the effect of programmer
variability from the results of their study.  They found that the number of
years of professional programming experience did not correlate to
performance on any of the 4 experiments they ran.  On the other hand, the
number of languages the programmer had used did correlate positively with
success on 2 of the 4, and it was on the borderline of significance on a
third.  

They claim this is consistent with reports in a prior study ("Modern Coding
Practices and Programmer Performance" by Sheppard, Curtis, Milliman, and
Love in "Computer", vol. 12, no. 12, pp. 41-49, 1979), which showed that
the number of years of programming performance didn't correlate with
performance, but breadth of programming experience (number of programming
languages known, etc.) did.  (I have not yet read this article.)

Incidentally, the subjects (programmers) in the 1989 report were all
professional Fortran programmers with an average of over 5 years
professional experience.

My conclusion is that you should pick the concepts which you wish to teach
and then select a language which is effective at teaching those concepts
and meets other constraints which you may have, as one of the other posters
mentioned.  It would only seem beneficial for students to be exposed to a
variety of languages over their careers at the university.  Having hired
software engineers in the past, I can say that a person's understandings of
the fundamentals was more important than whether or not they already knew
the language we were using at the time.

Bill Harris
billh%hplsla@hplabs.hp.com      

Hewlett-Packard Co. 
Lake Stevens Instrument Division ms/230
8600 Soper Hill Road
Everett, WA 98205-1298 

pjh@mccc.edu (Pete Holsberg) (03/19/91)

In article <3s3wy4w163w@mimas.UUCP> mcn@mimas.UUCP (Michael C. Neuman) writes:
=reggie@paradyne.com (George W. Leach) writes:
=
=> 	I teach part-time, in the evenings at a junior college.  I am 
=> teaching for the Engineering Technology Department, so my focus is
=> different.

Other than teaching full-time, our situations are identical.

=> They still require FORTRAN, but we also offer a C course
=> for which the FORTRAN course is the prerequisite.

We require FORTRAN of our Engineering Science students but not of our
Engineering Technology students.  We find it more important that they
learn to use the computer as a tool, rather than as a programming
instrument.  After all, there are a lot of good analysis programs
already in existence.  I would rather see Engineerining Techs learn how
to use the analysis programs (e.g., PSPICE for EETs, DCA for CETs, etc.)
and CAD than spend a lot of time learning programming.  HOWEVER, ABET --
the Accrediting Board for Engineering and Technology -- has deemed
programming a necessary skill, and that's why I'm the author of "C For
Electronics and Computer Engineering Technology"!!  ;-)

Oh, yes -- we teach the EETs Z80 assembly language programming, too. 
Goes very well with the microcontroller course.

=> I advise my students to learn both
=> FORTRAN and C, unless they know for sure what area of engineering they
=> want to go into.
=>

Do all your students transfer to four year engineering schools or do
they go to engineering tech schools and/or out to industry?

=  Thus, my advice: learn them both. If you want to be a programmer, learn 
=C, if you want to be an engineer, learn FORTRAN. If you're not sure, 
=learn both of them. C is hard to learn, FORTRAN just requires knowledge 
=of BASIC.

But if you're going to be an engineering technologist, maybe you don't
need either???

Pete
-- 
Prof. Peter J. Holsberg      Mercer County Community College
Voice: 609-586-4800          Engineering Technology, Computers and Math
UUCP:...!princeton!mccc!pjh  1200 Old Trenton Road, Trenton, NJ 08690
Internet: pjh@mccc.edu	     Trenton Computer Festival -- 4/20-21/91

hcc@candy.cs.olemiss.edu (Conrad Cunningham) (03/19/91)

In article <12103@pasteur.Berkeley.EDU> kemnitz@hermes.Berkeley.EDU (Greg Kemnitz) writes:>
>   have been driven through - the statement that ADA was unnecessary if it was
>   too expensive and not "mission critical" (ie F-16 flight control software).

I don't know which version of the F-16 is being referenced here.  The
A/B  versions of the F-16 were done in the mid-to-late 1970's when Ada
was still some military bureaucrat's dream;  the C/D versions were done in
the early 1980's before reliable production quality Ada compilers were
available for the required target machines and before Ada was required.

-------------------------------------------------------------------------------
H. Conrad Cunningham  | Dept. of Computer & Info. Sci., Univ. of Mississippi
Tel:  (601) 232-5358  | 302 Weir Hall, University, MS 38677  U.S.A.
Fax:  (601) 232-7010  | Email:  cunningham@cs.olemiss.edu 

kemnitz@gaia.berkeley.edu (Greg Kemnitz) (03/22/91)

My comments about industry are largely restricted to the US - other countries
certainly can/do have different programming language usage patterns in their
software industries.  In particular, I would doubt that many other countries
are hindered by the huge "installed base" of antiquarian languages as the US;
a thing about being relative latecomers to the computer scene will be that many
companies based in other countries will avoid the FORTRAN/COBOL black hole that
many American companies have fallen into.  Also, I intended to describe what I
feel is actually happening in industry, rather than trying to say what can
happen or should be happening - this is what academics are for :-)

The thing that tends to determine which language will be used in industry would
surprise many people - it has very little to do with the intrinsic quality of
the language itself in most cases.  It is whether people are available who know
and are familiar with the language.

In many companies the question on new projects is whether to use C or C++.  No
other languages are considered, primarily because training expenses are large
and most good programmers in the US know C.  Other factors include the cost
and quality of compilers and debugging tools on the target platform for these
new languages, etc.

Also, software has a way of taking on a life of its own (at a couple of points
in my career I have encountered FORTRAN II subroutines - that were in use - that
are older than I am), so justifying the use of an unusual or new programming
language for a product that is expected to have a long lifetime is difficult.

Another factor is the ratio of completely new software ventures to improvements
on existing software is rather low.  One rarely has the chance to start 
completely from scratch - in many cases, rewriting is simply not feasable, even
if the base is an ancient FORTRAN program using arithmatic gotos.

-----------------------------------------------------------------------
Greg Kemnitz                  |      "I ran out of the room - I
Postgres Chief Programmer     |      didn't want to be killed by a pile
278 Cory Hall, UCB            |      of VMS manuals" :-)
(415) 642-7520                |
kemnitz@postgres.berkeley.edu |      --A friend at DEC Palo Alto in the Quake

NORVIG@Teak.Berkeley.EDU (Peter Norvig) (03/23/91)

There seems to be a consensus that the first thing to do is
decide what concepts you want to teach, and after that, the
choice of a language is not as important.  I agree.  

But after the concepts are chosen, it is also crucial to find a
text book that presents those concepts well.  For those who
decide that they would like to teach the principles of Computer
Science rather than the details of some language's syntax,
Abelson and Sussman's "Structure and Interpretation of Computer
Programs" fits the bill.  This text happens to use Scheme, but
in my opinion it is so much better than competing texts that I
would use it even if it's language were Fortran, Cobol, or
anything else.  (Of course, I think that its not just a
coincidence that it uses Scheme; many of the important concepts
could not be presented so well in other languages.)

- Peter Norvig

louk@tslwat.UUCP (Lou Kates) (03/23/91)

In article <12219@pasteur.Berkeley.EDU> kemnitz@gaia.berkeley.edu (Greg Kemnitz) writes:
>The thing that tends to determine which language will be used in industry would
>surprise many people - it has very little to do with the intrinsic quality of
>the language itself in most cases.  It is whether people are available who know
>and are familiar with the language.

Actually I don't think that people even go into it that much. Its
mostly a matter of market share -- if most other people are using
it then you use it too.

People make these decisions on the basis of minimizing their risk
("nobody ever   got  fired for   recommending  IBM") rather  than
maximizing their gain and the more other people that are using it
the more proven it is.

Lou Kates, Teleride Sage Ltd., louk%tslwat@watmath.waterloo.edu

plb@plb.icsti.su (Peter L.Brusilovsky) (03/23/91)

I was silent looking on this interesting discussion.
Let me now to introduce one more oppinion from the USSR.
I apologise in advance for my poor English...

1. The situation at the Dept of Applied Mathematics and Cybernetics,
   Moscow State University. (Applied Mathematics + CompSci)

   1983 (Non-CS students): Algol -> Fortran
   1983 (2/3 of CS students): Algol -> Fortran -> Assemblers
   1983 (1/3 of CS students): Algol -> Fortran -> Lisp+PLANNER

   1990 (Non-CS students): Pascal -> Basic -> (some of st-s) Fortran
   1990 (MathLog students): Pascal -> Basic -> Prolog
   1990 (2/3-CS students): Pascal -> C -> Assemblers
   1990 (1/3 of CS students): Pascal -> Assemblers -> Refal -> Lisp+PLANNER

Note 1: '1/3 of CS students' are the those from the Chair for Alg. Languages
Note 2: I see, the approach in 1990 is quite the same as in 1983,
   but "Pascal is Algol of nowdays and C is Fortran of nowdays".
   It is my own oppinion, based on a teaching and programming experience
   with all these four languages. Are you agree?

2. Why not to start with mini-languages (pre-languages)?

   To support the first steps of learning programming we need:
   a) simple language with no unimportant details, to see the
      main concepts of programming better
   b) easy-to-start language, to write quite interesting programs
      just at the first or the second lessons.
   c) language with visible interpretation, to see immediately
      the results of all the commands' performing - this is a strong
      tool to understand the semantics of language constructions

   There is no any "professional" laguage with a-b-c features
   (LOGO is an exlusion, it is educational language).
   Let's build such a simple language to support the first steps
   of learning. We could learn such a mini-language for 4-5 lessons
   and then start to learn the professional ones.
   As an example of mini-languages (m-l) I could suggest LOGO-turtle
   (embedded one), Karel, Josef (independent m-ls).
   The mini-languages approach is quite developed in the USSR
   and there are a lot of Russian mini-languages. We could build
   a special m-l for a special cathegory of students.

3. The sequences of languages to learn, some viewpoint from USSR

for 'classic' CS students: m-l -> Pascal or Modula-2 -> C[++] -> [LISP?] ...
for 'symbolic' CS students: m-l (Logo) -> LISP + Prolog -> [Pascal] ...
for 'Math-related' students: m-l -> Pascal or Modula-2 -> Basic or Fortran ...
for "advanced Computer literacy": m-l -> Pascal or Basic [or Fortran??]
for "only Computer literacy": m-l (Karel,...)

Note: I am not acquanted with Scheme (it's unknown in the USSR yet).

Peter
------------------------------------------------------------------------------
Dr. Peter Brusilovsky      ||   International Centre for Scientific
Telex: 411925 MCNTI        ||   and Technical Information (ICSTI),
FAX: +7 095 943 0089       ||   Kuusinen str. 21b, Moscow 125252, USSR
E-mail: plb@plb.icsti.su   or   plb%plb.icsti.su@relay.eu.net
------------------------------------------------------------------------------

mikef@cs.ed.ac.uk (Mike Fourman) (03/25/91)

In article <eibo.669049308@rosun1> eibo@rosun1.informatik.uni-hamburg.de (Eibo Thieme) writes:
>If I were to decide which language to use, especially to start with

I suggest you use Standard ML

>I would consider the following objectives:

Let's consider them

>
>   * Immediate Reward
>     "Write down a few lines of code and watch things happen."
>     Don't let them be bored by extensive syntax-checking or
>     mystical compiler usage.

ML can be used as an interactive language, with a read-eval-print
interface, a la lisp (but (far) fewer () {:-)}).

>
>   * Being Modern
>     "Look, I can do fancy windows too." Beginners want their 
>     programs to be as pleasing to the eye as those shiny
>     products they see on the market.

Too true! We've spent some effort producing simple graphics for ML for
use in introductory courses, and it pays off. (Some ML implementations
also have sophisticated graphics for fully-fledged user-interfaces.)

>
>   * Essential Programming
>     "The algorithm was in the books but doing the interface
>     took me a week." Most of real world applications seem to
>     be 90% user-interface, students instinctively try to
>     adapt to this situation.

The interactive nature of ML and the built-in parsing for user-defined
(and built-in) datatypes make it possible to concentrate on the algorithms.

>
>   * Software Engineering
>     "When I saw the other group understood our code I knew it
>     was worth the effort." Systematic construction of software
>     is a far higher good than freaky code dabbling. Don't use
>     a language which invites "creativity".

ML has: static typing, polymorphism, controlled assignment,
higher-order functions, abstract types, and a module system 
for 'programming in the large'.

>
>   * Reliable Software
>     "I was dumbfounded when the compiler found my conceptual
>     glitch." Beginners should learn to appreciate extensive
>     syntax-checking, type-checking, etc. 

ML's static analysis performs type inference, type checking, and
analysis of cases for redundant patterns and missing cases.
The first perception of ML is invariably that once it type checks it's
correct. (Second perceptions are more realistic, but most of the bugs
you would have put in in C, for example, are caught by ML's static analysis.)

In addition, ML has a formal semantics, and the Extended ML specification
and refinement language supports top-down program development

>     
>I cannot think of any small set of languages taking into account
>all these constraints and there will be even more to add to the list.

Hope the list is small enough :-)


Prof. Michael P. Fourman                     email        mikef@lfcs.ed.ac.uk
Dept. of Computer Science                    'PHONE (+44) (0)31-650 5198 (sec)
JCMB, King's Buildings, Mayfield Road,              (+44) (0)31-650 5197
Edinburgh EH9 3JZ, Scotland, UK                 FAX (+44) (0)31 667 7209
-------------------------------------------------------------------------------


--
Prof. Michael P. Fourman                     email        mikef@lfcs.ed.ac.uk
Dept. of Computer Science                    'PHONE (+44) (0)31-650 5198 (sec)
JCMB, King's Buildings, Mayfield Road,              (+44) (0)31-650 5197
Edinburgh EH9 3JZ, Scotland, UK                 FAX (+44) (0)31 667 7209

stern@decserver.mc.ab.com (Ken Stern (ext 4157)) (03/26/91)

In article <348@tslwat.UUCP> you write:
|> In article <12219@pasteur.Berkeley.EDU> kemnitz@gaia.berkeley.edu
(Greg Kemnitz) writes:
|> >The thing that tends to determine which language will be used in
industry would
|> >surprise many people - it has very little to do with the intrinsic
quality of
|> >the language itself in most cases.  It is whether people are
available who know
|> >and are familiar with the language.
|>
|> Actually I don't think that people even go into it that much. Its
|> mostly a matter of market share -- if most other people are using
|> it then you use it too.
|>
|> People make these decisions on the basis of minimizing their risk
|> ("nobody ever   got  fired for   recommending  IBM") rather  than
|> maximizing their gain and the more other people that are using it
|> the more proven it is.
|>
|> Lou Kates, Teleride Sage Ltd., louk%tslwat@watmath.waterloo.edu


In fact, it is often even simpler than that.  Very often it simply boils
down to INERTIA.  If a company (or individual) has a significant amount of
code written in a language there will be a great deal of pressure to
protect that investment and continue to use the language (otherwise, why
would there still be so many people working in COBOL!?).  In fact, even
moving from one compiler to another for the same language can represent a
significant cost, and one that will be borne only for good reason.  Remember,
most companies produce software to make money, NOT to advance the state of
the art.  And educational institutions, if they are doing their job, should
be preparing their students for the real world.  So ... how many companies
are looking to hire people with Lisp experience versus the number looking
for people with a background in C?

The same or similar agruments help explain why C++ is so much more popular
than SmallTalk or Eiffel.

hcc@candy.cs.olemiss.edu (Conrad Cunningham) (03/26/91)

In article <242@zeus.mc.ab.com> stern@decserver.mc.ab.com (Ken Stern (ext 4157)) writes:
> ...  And educational institutions, if they are doing their job, should
> be preparing their students for the real world. ...

Although I agree that students graduating with a degree in computer
science should have a reasonable level of immediately applicable
skills and knowledge, developing such skills and knowledge is not our
primary "job".  Our job is provide an environment which encourages
students to become "educated", not necessarily to train students with
exactly those skills that some industry believes it needs.  We ought
to teach the better ways to do things, not just the conventional ways.
Our students need to be dissatisfied with the status quo;  otherwise
how can organizational inertia be overcome.

The "real world" is one of rapid technological and social change.
Students need to prepare themselves for that kind of world.

-------------------------------------------------------------------------------
H. Conrad Cunningham  | Dept. of Computer & Info. Sci., Univ. of Mississippi
Tel:  (601) 232-5358  | 302 Weir Hall, University, MS 38677  U.S.A.
Fax:  (601) 232-7010  | Email:  cunningham@cs.olemiss.edu 
-------------------------------------------------------------------------------

bzs@world.std.com (Barry Shein) (03/29/91)

I don't teach now, but I taught programming courses in the Computer
Science Dept (at Boston University) for a decade (until 1988). I've
taught courses using 370/assembler, C, PL/1, and others ("Survey of
Programming Languages", or "If it's Tuesday, this must be Cobol!".) I
am very comfortable with most major programming languages, including
Fortran, Lisp, C, etc. I've written extensive code professionally in
many of those languages (the point being: my opinions don't stem from
rumors about languages I've never actually used, and in many cases
have taught.)

That said, here are my opinions on the subject:

The most important factors of a successful programming/teaching
environment are a good book, an environment which follows the book,
and of course a teacher who knows what they are doing (I'd rate
knowledge and vision of computer science as a subject over sheer
technical knowledge, tho some of each has its value.)

A computer is a confusing, complicated environment to a new-comer. Not
being able to type in a simple example from the book is exasperating
and convinces a student that this is all impossible to ever master.

It seems simple and obvious, but inevitably teachers adopt (e.g.) a
Unix-oriented C programming book and then proceed to teach on the
available campus mainframe which sort of has a C compiler.

Of course, none of the file I/O works as advertised, the math
libraries are strange and incomplete, link-editing and compiling
involve mysterious voo-doo, none of the examples in the book will
really work.

The teacher gets overloaded trying to make up for these deficiencies
with handouts, teaching assistants, user services people, and quickly
spit-out notes in class ("on page 243 you'll have to use "rb" rather
than "r" in the fopen() to get the example to work...on page 177 make
the large auto array static or external...", you're laughing!, yeah,
I've been there too.)

Students get grumpy about always being one obscure detail short of
getting an example to work, the whole thing invites disaster.

(the same could be said for Fortran or Pascal or whatever, just an
example.)

It's really important to instill a sense of predictability and
usefulness of written materials in students right away.

They have to learn to find out information for themselves. If you
badly mismatch the text and the environment you'll lose them forever,
they'll never believe there's any relationship between what's written
and what they actually need.

Now, some opinions on languages and environments:

1. C - C is very easy to learn and teach. The key is not to introduce
the advanced features right away. I've never had problems even later
with pointers etc, but I think that's because I understand such topics
deeply (I am a programmer at heart). I think most teachers who botch
such topics tend to not understand them themselves and relay their own
anxieties to their students. A little order and method is all that's
needed. But there's absolutely no need to start with such topics. When
you get to dynamic data structures they come up naturally enough.

Just about any cliche in a so-called easier language can be taught in
C, it's just a matter of style. Looping thru an array, character
strings etc. In fact, I think the closeness of some of these topics to
the machine is a good thing and highly abstracted languages leave
students without a clue as to what is really going on inside a
computer (of course, that assumes the teacher has a clue...)

C is highly standardized, in a good environment a student can use
additional texts if desired and be pretty confident that everything is
relevant.

Finally, there's an enormous amount of free source code available.
Some should be made available and students should be encouraged to
look at it, see how "real" people solve "real" problems. I can't
overemphasize playing with and looking at others' code. Just its
existence is immensely encouraging to a student, makes them realize
the goal. They'll look at it because they'll think they can crib from
it. That's fine, they'll have to understand it before they can crib.

2. Pascal - The problem with Pascal is related to my first
recommendation, it's hard to find any agreement between any two books
on just what Pascal is!

Every implementation is chock-full of extensions and exceptions to
make the basic language useable. This also makes it difficult to find
a book which matches the locally available Pascal *AND* covers CS
topics. Often one has to resort to at least two books, one which
covers CS topics in Pascal and another which covers using the
particular dialect available. The student is left with the chore of
translating between the two books, very silly.

Most pascals also have the problem of complicating or completely
avoiding external linkage, at best it is pushed off to an advanced
topic which is a terrible thing. Breaking a programming chore into
modules (files), re-using them etc is an important lesson. It's sad
to see this skipped simply because the compiler makes it difficult!

I consider Pascal a dying language in general, mostly due to its
astounding lack of portability (due to all the ideosyncratic
extensions.)

3. Fortran - You'll have some problems finding a good CS book based on
Fortran. This might be the result of the prejudices of the CS
community, but it is a fact nonetheless.

Fortran has few of the extension and knowledge-portability problems of
Pascal (VMS Fortran excepted, which is barely Fortran tho most
extensions can be successfully ignored, in its favor it is mostly a
super-set and will compile standardized examples.) Environment
excepted, if you know Fortran you know Fortran, most everything you
know will work anywhere.

Fortran's biggest flaw is its lack of data structures, and for the
purpose of teaching Computer Science (I assume there's a bigger lesson
being taught than the mechanics of programming) this flaw is just about
fatal.

Forget Fortran, offer a one-credit off-hours course to students with
some programming background to pick this up later if they like.

4. ADA - Few compilers, mostly too expensive for academics to ever
own, few books oriented towards CS, very demanding on the computing
resources (usually precipitating battles between the people who teach
and those who run the computers as the intro class makes the system
unusable), oh well.

DOD et al blew it with ADA by not making ADA environments available
(thru grants etc) to educators. Right now it's mostly non-existent in
academia, and the few faculty I know who insisted on teaching with ADA
had to be heroes with raising money to support their courses.

So its suitability as a teaching language is mostly moot, you don't
own it, and you can't afford it.

5. Modula - I suspect there are still no CS texts based on Modula, so
there's a problem. At least one free compiler (for Unix) exists, tho
you'll have to support it yourself. The language does look promising
as a teaching language, tho it doesn't seem to really exist. I doubt
you'll find much environment to deal with Modula, not sure how much
you really need (a debugger?)

6. Lisp/Scheme - Probably the most under-rated teaching languages, but
you'll never fix that. Abelson & Sussman is an excellent text. It's
not the choice of the trade-school/resume crowd since these languages
are just not used much "out there". Wonderful environments, usually
free, quite standardized etc. But you won't use it, you don't
understand the language yourself, so who are we kidding?

7. ML/Logo/others - Huh? If you drive an electric car and lean towards
macrobiotics and seances these might have some appeal.

8. C++ - Worth considering, I don't consider it "object-oriented", but
it is an interesting language, more like Algol/68 done right. G++ can
be had for free, a real plus (pardon me.) Probably hard to find a text
tho I wouldn't be shocked to hear one exists at this point. I might be
more inclined to start students out with C and then, perhaps in a
second term, move to C++.  That combination would be a real service to
students, there's a lot of interest in both "out there", lots of
papers on C++ also which might be worth introducing as material as you
go on. Many of the interesting extensions of C++ over C are real,
hard-core CS topics worthy of discussion and natural lessons in data
abstraction etc.

----------

A final note: A nice way to teach an intro programming course is to
assign lots of little, tiny projects each incorporating a cliche and
slowly building skills. Programming is learned by drilling, in a way.
Practice. Get them to realize that it's mostly a matter of matching
the problem at hand to a particular cliche they've seen before. Build
on that rather than getting macho and trying to get them to write big
applications (the inevitable text editor) before they've realized that
big programs are made out of lots of little, well-understood pieces.

Teach them early how to link to libraries and exploit the terrain. If
possible, use windowing libraries as a motivator (writing a few
non-standard but simplified library routines is fine, give them the
source!) Encourage them to explore and experiment, make it clear
you'll like little variations on the assignments, reward them for it.
(I realize in over-loaded environments this is hard, well, try some
controlled variations and have them hand them in after doing the basic
assignment for extra-credit or whatever.)
-- 
        -Barry Shein

Software Tool & Die    | bzs@world.std.com          | uunet!world!bzs
Purveyors to the Trade | Voice: 617-739-0202        | Login: 617-739-WRLD

kemnitz@gaia.berkeley.edu (Greg Kemnitz) (04/02/91)

In article <1991Mar26.134531.1644@cs.olemiss.edu> hcc@candy.cs.olemiss.edu (Conrad Cunningham) writes:
>In article <242@zeus.mc.ab.com> stern@decserver.mc.ab.com (Ken Stern (ext 4157)) writes:
>> ...  And educational institutions, if they are doing their job, should
>> be preparing their students for the real world. ...
>
>Although I agree that students graduating with a degree in computer
>science should have a reasonable level of immediately applicable
>skills and knowledge, developing such skills and knowledge is not our
>primary "job".  Our job is provide an environment which encourages
>students to become "educated", not necessarily to train students with
>exactly those skills that some industry believes it needs.  We ought
>to teach the better ways to do things, not just the conventional ways.
>Our students need to be dissatisfied with the status quo;  otherwise
>how can organizational inertia be overcome.

It seems to me that there is a very fine and difficult line to be walked by
educators in computer science:  on the one hand, students who know all the
"better" ways to do things, but who can't find a decent job will feel cheated
by the irrelevence and practical worthlessness of their education.  On the
other hand, a tech-school style training curriculum will cause computer science
to truely stagnate and would be a threat to whatever lead the US holds, if any, 
in the field.  CS is both a trade and a field of theoretical study, and it
seems to me that a good CS education should have elements of both.  

It seems to me that after working for several years in both academia and in
industry, the best prepared software people did their undergrad work in CS
programs in which they did three things: program, program, and program some
more.  Book-learning is useful only in conjunction with experience on the
computer, except possibly in more mathematically inclined theory courses.
But even so, the curriculum should be structured in such a way that theory
and practical courses can complement each other; for example, students should
be encouraged to take the compiler course during the same term as they take
their theory course in abstract machines, languages and grammars.  A pushdown
automaton or context-sensitive grammar makes lots more sense when you are
trying to write a compiler than it does when you are just reading about it
because it will be on the exam on Friday.

Probably my biggest peeve is that many practical courses become "theoretical"
due to lack of equipment.  Courses in databases, compilers, graphics, operating
systems, etc should not be bookish "survey" courses but courses in which
people actually write or work intensively with these things and see both the
practical and theoretical problems that must be overcome in implementing and
dealing with these big, complex programs.

Lessons, especially in software engineering and good coding techniques, go to
heart the first time a student has to rewrite 4000 lines of code in one night
because they hardwired all their constants, or after they end up debugging
all night because they had a local variable with the same name as a global
one (or some similar problem that is not caught by decent compilers).

Another thing, and a very important consideration, is that intensive
programming be done fairly early in the curriculum so that the students can
decide whether they really enjoy programming.  If they don't, they will not be
terribly successful in industry, and will be doomed to unfulfilling second-rate
programming jobs.  If this happens, the computer science education has
certainly failed the student.

-----------------------------------------------------------------------
Greg Kemnitz                  |      "I ran out of the room - I
Postgres Chief Programmer     |      didn't want to be killed by a pile
278 Cory Hall, UCB            |      of VMS manuals" :-)
(415) 642-7520                |
kemnitz@postgres.berkeley.edu |      --A friend at DEC Palo Alto in the Quake

david.lloyd-jones@rose.uucp (DAVID LLOYD-JONES) (04/02/91)

To: olshause@copper.ucs.indiana.edu (Ronald Olshausen)
>Orga: Indiana University, Bloomington
>
>one-dimensional, workaholic employees. In terms of America's
>industrial competitiveness, we are surely better off with a multitude
>of high-tech drones, rather than well-rounded, educated, and cultured
>individuals with interests outside their profession.

I once spent three months chatting-on-Mondays with the senior
management of Mitsubishi Motors, seven guys, roughly equivalent to
the Division Heads of General Motors.  Not the Board of Directors
but the people who actually ran things.   (This chatting thing was for
the sake of their English and for the sake of their exposure to the
world.  They hire a distinguished visitor (I qualified as a recent
member of the Professional Staff of the USCongress) pay the person very
well, and wring them out pretty thoroughly over three months.
then  on to the next professor, writer or whoever...)

I assure you these guys, high level metal benders, are also your
"well-rounded, educated and cultured individuals with interests outside their
profession."   And not just because of the program that had brought me
into their use.  Japanese workers at all levels have hobbies, studies
and interests outside work.  The "drone" of American mythology is an
American invention.

>
>But in the long run, such an education is not an education at all, but
>rather an indoctrination into High-Tech Corporate America. Perhaps I'm
>just an idealist, but I still believe Education means an introduction to
>the finer things in life, like literature, philosophy, and history...
>things even the most cerebral of students might get a 'C' in.


You may think this is idealism.  Empirically, on the results, I'd say it's
operational common sense.

                                                -dlj.



---
 
 

olshause@copper.ucs.indiana.edu (Ronald Olshausen) (04/04/91)

>>In article <242@zeus.mc.ab.com> stern@decserver.mc.ab.com (Ken Stern (ext 4157)) writes:
>>> ...  And educational institutions, if they are doing their job, should
>>> be preparing their students for the real world. ...

As part of my last job, I used to do quite a bit of on-campus
recruiting for my employer. I would visit leading engineering schools,
and interview some very bright students. But I was somewhat astonished
that students at some very reputable schools, like MIT and CMU, could
get by with such minimal exposure to non-scientific curriculum. Many of
the students with whom I talked had taken innumerable CS and EE courses,
yet their liberal arts exposure was often limited to 'Intro to Music 
Appreciation', 'Expository Writing 101', and 'Intro to Sociology'...
fluff courses, to say the least. Certainly such an education is not
a disservice to Corporate America... most managers dream of having 
one-dimensional, workaholic employees. In terms of America's
industrial competitiveness, we are surely better off with a multitude
of high-tech drones, rather than well-rounded, educated, and cultured
individuals with interests outside their profession.

But in the long run, such an education is not an education at all, but
rather an indoctrination into High-Tech Corporate America. Perhaps I'm
just an idealist, but I still believe Education means an introduction to
the finer things in life, like literature, philosophy, and history...
things even the most cerebral of students might get a 'C' in. I feel
that the communications and interpersonal skills of most engineers are
lacking, and that a greater emphasis on traditional curriculum
could alleviate that problem.

So, I'm not sure the role of the University is as simple as 'preparing
students for the real world'. I think the role of the University is
personal, intellectual, and spiritual enrichment. If that is the case,
then a pure CS and EE curriculum is a disservice to the student. I'm
not discounting the technical education part... I feel that my MSCS
program prepared me well to take on the challenges I face in industry.
But I also feel enriched by the liberal arts courses I took, like
poetry, history, and political science. In fact, perhaps in the long run
those courses will be more influential on me than my CS courses.


Ronald Olshausen
Graduate School of Business
Indiana Uiversity

mikef@cs.ed.ac.uk (Mike Fourman) (04/04/91)

In article <BZS.91Mar28121402@world.std.com> bzs@world.std.com (Barry Shein) writes:
[Barry's Credentials omitted ...]
 
 
 >A computer is a confusing, complicated environment to a new-comer. Not
>being able to type in a simple example from the book is exasperating
>and convinces a student that this is all impossible to ever master.

So lets agree that one requirement is a simple environment in which simple
examples can be run without uneccesary overhead.

[Stuff on NON-standards omitted ...]
>It's really important to instill a sense of predictability and
>usefulness of written materials in students right away.

So the language should be well-defined.

>Now, some opinions on languages and environments:

[<C is easy if you do it right> omitted ...]
(But its easy to do it wrong!)

>Just about any cliche in a so-called easier language can be taught in
>C, it's just a matter of style. Looping thru an array, character
>strings etc. In fact, I think the closeness of some of these topics to
>the machine is a good thing and highly abstracted languages leave
>students without a clue as to what is really going on inside a
>computer (of course, that assumes the teacher has a clue...)

I agree. I would teach C in place of assembler - but not as the introductory
programming language in a course where they're supposed to first learn about
structure and discipline.

[ more on C Pascal Fortran and Modula omitted ]
>
>6. Lisp/Scheme - Probably the most under-rated teaching languages, but
>you'll never fix that. Abelson & Sussman is an excellent text. It's
>not the choice of the trade-school/resume crowd since these languages
>are just not used much "out there". Wonderful environments, usually
>free, quite standardized etc. But you won't use it, you don't
>understand the language yourself, so who are we kidding?

I think this is short-sighted (for the reasons given under 7 below).

>
>7. ML/Logo/others - Huh? If you drive an electric car and lean towards
>macrobiotics and seances these might have some appeal.

Is this an argument? In my experience, the _good_ C programmers take to
ML easily. ML enforces good practice, and they recognise that the ML
type system (for example) is helping them. 

Of course there are some situations, typically, when you need control
of what is stored where when, where a high-level language is not
appropriate. For these use a high-level assembler like C. Sometimes you
even have to be specific about what is stored in which registers when;
then you need assembler itself. But these are side-issues; we're
talking about teaching concepts and skills, to students who
optimistically expect to be using these for another 45 years!

Pass the rice :-)

[Stuff on C++ omitted]

(I agree that students should be exposed to lots of programming styles
or paradigms in the course of their education. C and C++ may be the best 
available vehicles for this. But I don't agree that either should be the 
first introduction to programming.)

Most programming tasks require an ability to consider the whole and to
abstract away from most of the detail. Most languages "out there" are
geared primarily to the detail. To educate our students properly, we
must help them to see beyond this.

[Stuff I broadly agree with, about how to teach programming, omitted ]

If we teach them right, they'll be able to pick up any reasonable
language quickly and apply what they have learnt to good effect, "out
there". For example, I'd expect one of our graduates, or one of the
good programmers from companies I consult for, to pick up Scheme and
become productive in a couple of weeks :-)

There are good practices that are used, but not yet understood
well enough to be incorporated in efficiently implementable language
designs. For the moment, if we are to allow the programmers to use and
develop these, we may need to use C in _production_ programming, and
for some of our teaching. (However, I have been closely invloved in
the development of a system built with over 100K lines of ML code.
Everything, including a sophisticated graphical interface, is in ML,
and we've found it to be a very productive language. The type system and the
module system work to gether to make sure that individual modules make
sense and fit together properly. They enforce a discipline that would
require a lot of management effort if the code were written in C.)

Finally, to repeat myself, some aspects of some things (eg
datastructures, types, abstraction) are well-enough understood that,
for an introductory programming course, we can choose a language that
helps the student to 'get it right'.

--
Prof. Michael P. Fourman                     email        mikef@lfcs.ed.ac.uk
Dept. of Computer Science                    'PHONE (+44) (0)31-650 5198 (sec)
JCMB, King's Buildings, Mayfield Road,              (+44) (0)31-650 5197
Edinburgh EH9 3JZ, Scotland, UK                 FAX (+44) (0)31 667 7209

vancleef@iastate.edu (Van Cleef Henry H) (04/08/91)

In article <4bb36214a43427f8f148@rose.uucp> david.lloyd-jones@rose.uucp (DAVID LLOYD-JONES) writes:
>To: olshause@copper.ucs.indiana.edu (Ronald Olshausen)
>>Orga: Indiana University, Bloomington
>>
>>one-dimensional, workaholic employees. In terms of America's
>>industrial competitiveness, we are surely better off with a multitude
>>of high-tech drones, rather than well-rounded, educated, and cultured
>>individuals with interests outside their profession.
>
>I once spent three months chatting-on-Mondays with the senior
>management of Mitsubishi Motors, seven guys, roughly equivalent to
>the Division Heads of General Motors.  Not the Board of Directors
>but the people who actually ran things.   (This chatting thing was for
>the sake of their English and for the sake of their exposure to the
>world.  They hire a distinguished visitor (I qualified as a recent
>member of the Professional Staff of the USCongress) pay the person very
>well, and wring them out pretty thoroughly over three months.
>then  on to the next professor, writer or whoever...)
>
>I assure you these guys, high level metal benders, are also your
>"well-rounded, educated and cultured individuals with interests outside their
>profession."   And not just because of the program that had brought me
>into their use.  Japanese workers at all levels have hobbies, studies
>and interests outside work.  The "drone" of American mythology is an
>American invention.
>
>>
>>But in the long run, such an education is not an education at all, but
>>rather an indoctrination into High-Tech Corporate America. Perhaps I'm
>>just an idealist, but I still believe Education means an introduction to
>>the finer things in life, like literature, philosophy, and history...
>>things even the most cerebral of students might get a 'C' in.
>
>
>You may think this is idealism.  Empirically, on the results, I'd say it's
>operational common sense.
>
>                                                -dlj.
>---
I have worked in and around the world of computers since 1958.  Suffice
it to say that I never took a single course in "Computer Science---there
were none to take.  My formal education is in History and Philosophy of
Science.
Some twenty years ago, I went to monthly meetings of all the
organizations involved in building the enroute air traffic control
display system as the representative of my company.  There were ten or
twelve of us who met, and we soon discovered that none of us had
graduate-level science training---indeed, I think one fellow had a BA in
mathematics (not a BS).  Evening discussions tended to Shakespeare, Bach
(one fellow played a cello, got together with friends for quartet
sessions), history, philosophy, etc.  These were the people who made the
decisions about a system that is still in place and operating.  
The last twenty years have seen technological developments such that we
can put all the computing horsepower most people can use on a desk in a
box that draws about 250 watts.  Some questions that people are going to
have to answer in the next twenty years, as I see it are:
1. How do we make the resources of the machine accessible to people who
are genuinely frightened of them.
2. How are we going to convince managements to use these resources in
the workplace to improve the work environment?  I have very strong
feelings about "keystroke counter" and other such monitoring programs
being used to create sweatshop environments.
3. How do we protect freedom of individuality in the face of monumental
and comprehensive data collection (credit bureau activities are one
example, the establishment of a "national identity" data base using
social security numbers is another).  

I submit that proficiency in the C language or any other is not going to
help young people entering the field to identify and address such
questions.  Going back to the Medieval Trivium and Quadrivium isn't the
answer either, but it would seem to me that there are some things worth
considering there, and my impression is that the existence of an
Aristotle is a rumor to the average MSCS.

Hank van Cleef  
vancleef@iastate.edu	Iowa State University, Ames. Ia.
tmn!vancleef		The Union Institute, Cincinnati, Oh.
-- 
Hank van Cleef  
vancleef@iastate.edu	Iowa State University, Ames. Ia.
tmn!vancleef		The Union Institute, Cincinnati, Oh.