[comp.edu] first language

ncmagel@ndsuvax.UUCP (ken magel) (08/14/87)

     Two factors which are important in the selection of a first programming
language, but which have not been mentioned previously are:
  1.  Availability:  the language should be available on a wide variety of 
microcomputers so that students may use it on their own machines as well as
those available at the school.  This may eliminate very large or memory-
intensive languages such as ADA at least for a while.
  2.  Low cost:  I think students should have access to their own language
environments on microcomputers.  Those environments should cost less tha 
$100 so that an undue burden is not placed upon the students.
     Many languages meet these requirements : Pascal, Modula 2, Prolog ( at
least in the Turbo Prolog mutation), Lisp ( Translisp among others), and 
even Smalltalk ( SMalltalk/V).

ken@argus.UUCP (08/18/87)

In article <405@ndsuvax.UUCP>, ncmagel@ndsuvax.UUCP (ken magel) writes:
>   1.  Availability:  the language should be available on a wide variety of 
> microcomputers so that students may use it on their own machines as well as
> those available at the school.  This may eliminate very large or memory-
> intensive languages such as ADA at least for a while.

Ada is available on IBM PC, IBM VM, DEC VMS, and Unix.  I'd say that
covers at least 75% of the major computer environments. 
>      Many languages meet these requirements : Pascal, Modula 2, Prolog ( at
> least in the Turbo Prolog mutation), Lisp ( Translisp among others), and 
> even Smalltalk ( SMalltalk/V).
	   ^^^^^^^^^^^^^^^^^^^^^^^^^

I believe its SmallTalk.  Why this language must have variables case sensitive
is beyond me (except for making the compiler a bit easier to write).


I'd like to recommend the REXX language for beginners.  It's got
a very simple data structure, pascal like syntax, and was designed
from the beginning to be a readable language, unlike C and Lisp.


Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
uucp !ihnp4!allegra!bellcore!argus!ken *** NOT ken@bellcore.uucp ***
bitnet(prefered) ken@orion.bitnet

moraes@utcsri.UUCP (08/18/87)

In article <405@ndsuvax.UUCP> ncmagel@ndsuvax.UUCP (ken magel) writes:
>     Two factors which are important in the selection of a first programming
>language, but which have not been mentioned previously are:
>  1.  Availability:  .....
>  2.  Low cost:  .....

I agree.

One factor which is invariably forgotten is what I call "floppy-disk
useability". I find it hard to experiment with programs using most
compilers on microcomputers, because these were invariably written with
the underlying assumption "To use this seriously, you must have a hard
disk". Even with a two drive floppy system, you end up swapping
floppies in and out of drives, as you go through the
edit-compile-link-run cycle.

This factor usually results in interpretive languages being a better
choice (Forth, Logo, yes even Basic) for a first programming language -
Djikstra's comments notwithstanding. But there are a few integrated
compiler environments that are excellent too - notably Turbo Pascal.

It is worth keeping this factor in mind during debates on which
programming language is best for XXX purposes.

Mark. (moraes@csri.toronto.edu)

jesup@steinmetz.steinmetz.UUCP (Randell Jesup) (08/19/87)

In article <1010@argus.UUCP> ken@argus.UUCP (Kenneth Ng) writes:
>In article <405@ndsuvax.UUCP>, ncmagel@ndsuvax.UUCP (ken magel) writes:
>>   1.  Availability:  the language should be available on a wide variety of 
>> microcomputers so that students may use it on their own machines as well as
>> those available at the school.  This may eliminate very large or memory-
>> intensive languages such as ADA at least for a while.
>
>Ada is available on IBM PC, IBM VM, DEC VMS, and Unix.  I'd say that
>covers at least 75% of the major computer environments. 

	Speaking as one who has programmed in Ada for a living, I'd advise
strongly against Ada as a first language.  Not that it's a bad language
(at least for a certain range of problems), but it has a VERY large syntax
and even larger semantics.  The students will spend lot's of time saying
'why doesn't the compiler like this', instead of spending it figuring out
algorithms.  And don't EVER let a novice near the LRM! (Language Ref. Man.).
	My personal guess would be that Modula-II would be a good first
language.  It has strong type checking (good for novices), the syntax is
simple enough that they won't spend all their time learning it, and
it supports modularization and data-hiding well.  It isn't overgrown with
features, but for a first class you should be learning how to apply concepts,
not how to use zillions of features.  Leave that until you understand what's
going on.
	Before anyone accuses me of being a modula freak, I've never programmed
in modula, for most of my work I prefer C or forth, depending on the
project.  But from examing modula, I believe Wirth has come up with a
reasonable teaching language.  (MUCH better than pascal)

>I'd like to recommend the REXX language for beginners.  It's got
>a very simple data structure, pascal like syntax, and was designed
>from the beginning to be a readable language, unlike C and Lisp.

	Also may be a good idea.  Definitely oriented towards non-computer
users (thing like choosing limits, such as precision, to be 'round' numbers
so mundanes can remember them easily (like 500 digits precision instead of
512)).  

>Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
>uucp !ihnp4!allegra!bellcore!argus!ken *** NOT ken@bellcore.uucp ***
>bitnet(prefered) ken@orion.bitnet

	Randell Jesup
	jesup@steinmetz.UUCP
	jesup@ge-crd.arpa

fpst@hubcap.UUCP (Dennis Stevenson) (08/19/87)

in article <5268@utcsri.UUCP>, moraes@utcsri.UUCP (Mark Moraes) says:
> 
> In article <405@ndsuvax.UUCP> ncmagel@ndsuvax.UUCP (ken magel) writes:
>>  1.  Availability:  .....
>>  2.  Low cost:  .....

Seems to me we're losing sight of the object of the exercise: to teach
students how to program.  If "bean counter" criteria are used, we'll all
be coding cobol!

-- 
Steve Stevenson                            fpst@hubcap.clemson.edu
(aka D. E. Stevenson),                     fpst@clemson.csnet
Department of Computer Science,            comp.hypercube
Clemson University, Clemson, SC 29634-1906 (803)656-5880.mabell

ken@argus.UUCP (Kenneth Ng) (08/20/87)

In article <7035@steinmetz.steinmetz.UUCP>, jesup@steinmetz.steinmetz.UUCP (Randell Jesup) writes:
[edited comment on Ada being a big language]
> And don't EVER let a novice near the LRM! (Language Ref. Man.).

Agreed, but there are plenty of books out on Ada now (of course after
I learned the language from the @#%$^#$ LRM).

: 	My personal guess would be that Modula-II would be a good first
: language.  It has strong type checking (good for novices), the syntax is
: simple enough that they won't spend all their time learning it, and
: it supports modularization and data-hiding well.  It isn't overgrown with
: features, but for a first class you should be learning how to apply concepts,
: not how to use zillions of features.  Leave that until you understand what's
: going on.
: 	Before anyone accuses me of being a modula freak, I've never programmed
: in modula, for most of my work I prefer C or forth, depending on the
: project.  But from examing modula, I believe Wirth has come up with a
: reasonable teaching language.  (MUCH better than pascal)

I disagree.  I find it an irritant in Modula-2 having to say WriteInteger,
WriteReal, WriteConstantString, and so forth.  The Ada 'put' is easier
for the student to remember.  Let the compiler do some of the work.  Also
both Pascal and Modula-2 have the irritating property of allowing one
to directly use '+', '-', '*', and '/' with the types provided with the
compiler, but not with the types defined by oneself.  Ada lets me forget
having to remember that I can do an add with '+' for integers and reals,
but I must use vector_add to add my two vectors.

: >I'd like to recommend the REXX language for beginners.  It's got
: >a very simple data structure, pascal like syntax, and was designed
: >from the beginning to be a readable language, unlike C and Lisp.
: 	Also may be a good idea.  Definitely oriented towards non-computer
: users (thing like choosing limits, such as precision, to be 'round' numbers
: so mundanes can remember them easily (like 500 digits precision instead of
: 512)).  

And I've recently read that in the IBM VM environments, REXX within
a couple of years has become THE language to write new code in.  On
the other hand with an alternative language like EXEC2 I can see why (;-> .
All that is needed now is an implementation for Unix.  (I'll need a
year or two, context sensitive languages are a bitch to parse.)
; 	Randell Jesup
; 	jesup@steinmetz.UUCP
; 	jesup@ge-crd.arpa



Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
uucp !ihnp4!allegra!bellcore!argus!ken *** NOT ken@bellcore.uucp ***
bitnet(prefered) ken@orion.bitnet

gwl@rruxa.UUCP (George W. Leach) (08/20/87)

In article <1010@argus.UUCP>, ken@argus.UUCP writes:
> 
> I'd like to recommend the REXX language for beginners.  It's got
> a very simple data structure, pascal like syntax, and was designed
> from the beginning to be a readable language, unlike C and Lisp.
> 

     I wasn't aware that it was the language that dictated readability.
Silly me.  I guess it is beyond the control of the programmer to ensure
readability, no matter which language the program is implemented in.

     But seriously, the language that a beginner should use must not
overwhelm he or she with details.  The idea is to use a simple tool
to learn the fundamentals of problem solving with computers, not to
learn all of the particulars of a given language's syntax.  In my
particular case I first programmed in BASIC in a course I took in
high school.  I have never used it since then, but it served the
intended purpose.  The language was simple enough that the bulk of
the course was devoted to problem solving with the simple tool.

> 
> Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
> uucp !ihnp4!allegra!bellcore!argus!ken *** NOT ken@bellcore.uucp ***
> bitnet(prefered) ken@orion.bitnet


George W. Leach

Bell Communications Research      New Jersey Institute of Technology 
444 Hoes Lane       4A-1129       Computer & Information Sciences Dept.
Piscataway,  New Jersey   08854   Newark, New Jersey   07102
(201) 699-8639

UUCP:  ..!bellcore!indra!reggie
ARPA:  reggie%njit-eies.MAILNET@MIT-MULTICS.ARPA

From there to here, from here to there, funny things are everywhere
Dr. Seuss "One fish two fish red fish blue fish"

ken@argus.UUCP (Kenneth Ng) (08/22/87)

In article <290@rruxa.UUCP>, gwl@rruxa.UUCP (George W. Leach) writes:
> In article <1010@argus.UUCP>, ken@argus.UUCP writes:
> > I'd like to recommend the REXX language for beginners.  It's got
> > a very simple data structure, pascal like syntax, and was designed
> > from the beginning to be a readable language, unlike C and Lisp.
[edit]
>   The idea is to use a simple tool
> to learn the fundamentals of problem solving with computers, not to
> learn all of the particulars of a given language's syntax.
[edit]
> The language was simple enough that the bulk of
> the course was devoted to problem solving with the simple tool.

Agreed (kinda (:->), a beginning language should be rather simple
to avoid confusing a beginner excessively.  That's why a language
like REXX is recommended.  REXX has one data type: STRING. Can it
get any easier?  If the string contains a numbers only, you can add
subtract, multiply and divide the strings.  If you do a simple
compare with '=', the strings 'stuff', ' stuff', and 'stuff ' are
equilivant.  If you want you can do an exact compare with '=='.

REXX is a context sensitive language, therefore the user doesn't have
the unneeded complication of knowing about reserved words.  (Granted
this can be used to make *VERY* confusing programs if one tries hard
enough.)  

REXX is definitely not a solve all for all language.  While one can
define arrays, one cannot define structures.  One can design lists
of strings if really needed, but it gets complicated and starts sounding
like LISP.  Also the nature of the language makes compilers difficult,
but not impossible.  But for a beginner language I would place it above
most languages, even Ada (yes you heard that right Reggie).
> > Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
> George W. Leach
> UUCP:  ..!bellcore!indra!reggie
> ARPA:  reggie%njit-eies.MAILNET@MIT-MULTICS.ARPA



Kenneth Ng: Post office: NJIT - CCCC, Newark New Jersey  07102
uucp !ihnp4!allegra!bellcore!argus!ken *** NOT ken@bellcore.uucp ***
bitnet(prefered) ken@orion.bitnet

jv@mhres.mh.nl (Johan Vromans) (08/22/87)

In article <1016@argus.UUCP> ken@argus.UUCP (Kenneth Ng) writes:
>REXX is definitely not a solve all for all language.  While one can
>define arrays, one cannot define structures.  One can design lists
>of strings if really needed, but it gets complicated and starts sounding
>like LISP.  Also the nature of the language makes compilers difficult,
>but not impossible.  But for a beginner language I would place it above
>most languages, even Ada (yes you heard that right Reggie).

Isn't that what happened to Pascal: a simple, clear language meant for
educational purposes only, and then (after being accepted) it was
heavily mal-treated to make it suitable for *ALL* purposes? 

: johan
-- 
Johan Vromans                           | jv@mh.nl via European backbone
Multihouse N.V., Gouda, the Netherlands | uucp: ..{seismo!}mcvax!mh.nl!jv
"It is better to light a candle than to curse the darkness"

jay@splut.UUCP (Jay Maynard) (08/24/87)

In article <1228@mhres.mh.nl>, jv@mhres.mh.nl (Johan Vromans) writes:
> Isn't that what happened to Pascal: a simple, clear language meant for
> educational purposes only, and then (after being accepted) it was
> heavily mal-treated to make it suitable for *ALL* purposes? 

Uhm, Johan...don't look now, but REXX was designed/written by IBM as a
command-level script language for VM/CMS, and definitely NOT for educational
purposes only. Unlike most script languages, it's powerful enough to do real
programming in.

Hacking up REXX should be simple, as all that is required is to write a CMS
command processor to perform the required function...kinda like extending
FORTH.

-- 
Jay Maynard, K5ZC...>splut!< | uucp: hoptoad!academ!uhnix1!nuchat!splut!jay
"Don't ask ME about Unix...  | (or sun!housun!nuchat)       CI$: 71036,1603
I speak SNA!"                | internet: beats me         GEnie: JAYMAYNARD
The opinions herein are shared by neither of my cats, much less anyone else.

gwl@rruxa.UUCP (George W. Leach) (08/24/87)

In article <1228@mhres.mh.nl>, jv@mhres.mh.nl (Johan Vromans) writes:
> In article <1016@argus.UUCP> ken@argus.UUCP (Kenneth Ng) writes:
> >REXX is definitely not a solve all for all language.  While one can
> >define arrays, one cannot define structures.  One can design lists
> >of strings if really needed, but it gets complicated and starts sounding
> >like LISP.  Also the nature of the language makes compilers difficult,
> >but not impossible.  But for a beginner language I would place it above
> >most languages, even Ada (yes you heard that right Reggie).
>
                   ^^^^^^^^
         I'm shocked Ken!!!!!!

> 
> Isn't that what happened to Pascal: a simple, clear language meant for
> educational purposes only, and then (after being accepted) it was
> heavily mal-treated to make it suitable for *ALL* purposes? 
>

     Pascal is not the first language used at NJIT.  Fortran is taught
to all students as a first language.  This is a legacy from our origins
as Newark College of Engineering.  All CS students immediately will be
cleansed in the Intro to CS course by being taught Pascal.  I took this
course in 1976 and I have taught it for the past couple of years.  I
have seen Pascal on an Interdata-32, IBM PC, Sperry UNIVAC and under
UNIX.  Although Pascal is far superiour as a teaching language than
many other popular languages (yes Ken even better than C for this 
purpose), I still think there is a serious need for improvement upon
this first attempt at a teaching language.  Remember that it was first
thrust upon the world in 1971!!!

     I did hear of a language called Turing, which was produced by the
folks at the U. of Toronto.  Turing was hailed as an improvement over
Pascal as a teaching device.  I did send away for the demo disk and
the technical reports that accompany it.  However, I have not had the
time to really look into it in detail.  Has anyone else?  Is anyone 
using Turing or any other newer languages that have been produced
specifically for the purpose of teaching programming?


George W. Leach

Bell Communications Research      New Jersey Institute of Technology 
444 Hoes Lane       4A-1129       Computer & Information Sciences Dept.
Piscataway,  New Jersey   08854   Newark, New Jersey   07102
(201) 699-8639

UUCP:  ..!bellcore!indra!reggie
ARPA:  reggie%njit-eies.MAILNET@MIT-MULTICS.ARPA

From there to here, from here to there, funny things are everywhere
Dr. Seuss "One fish two fish red fish blue fish"

> 
> : johan
> -- 
> Johan Vromans                           | jv@mh.nl via European backbone
> Multihouse N.V., Gouda, the Netherlands | uucp: ..{seismo!}mcvax!mh.nl!jv
> "It is better to light a candle than to curse the darkness"

eugene@pioneer.arpa (Eugene Miya N.) (08/26/87)

LISP as first language (CARs, CDRs?!, Silly Parens?), REXX, LOGO?
No, network memory.  The new people coming into this discussion have not
seen the earlier posting on this thrice discussed topic.

Hugh LaMaster asked about LOGO.  When I first heard of it, it sounded
kind of neat, and I had a few minutes off from Grad School and 
an ANSI Pascal meeting in we had town [Santa Barbara] (when I was an
alternate).  It was just another language with some graphical constructs
thrown in.  Kind of disappointing but easily checked.

I think the discussion should be "what makes languages hard to learn"
rather than "what makes them good."  We are blind to our biases, and we
don't approach the problem in the right way.  I wonder what the drop out
rate for a lot of these classes are?  A good work-person analyzes the
shavings which fall on the floor every now and again.

But, let me relate something to you which happened last evening.
Normally, I have ACM/SIGGRAPH meetings one 4th Tues., but we were off
for the summer months and last evening I gave a talk on non-computer
stuff to the Sierra Club [but we were in Cupertino].  Afterward, the
hostess of the house was talking about her Mac.  Turned out she took an
animation class at De Anza college from one of my local ACM/SIGGRAPH
members.  She talked about a few people's inabilities to comprehend
animation but were otherwise excellent freehand/static artists.

What might be an interesting first programming language might be one of
these animation systems.  I won't discuss tradenames, but "they run on Macs"
and we had a SIGGRAPH meeting on some of these systems with Scott Kim and
Marne Morris [Exercise left for reader: try one.].  We discussed
the sequential nature of animation, the concept of state.  You can get
alternation without much problem (I'm pretty sure), and you can also get
some nice concurrency.  Still people had problems, but it sounds like
fewer than with normal "languages."

The basic technique is to create key frames and the machine does the
"in-betweening" via interpolation.

Normal programming languages are not very visual.  The typical example
of Smalltalk-80 graphics or LOGO are pretty crude.  It's difficult to
keep state clear (even in functional languages and even then the Mac
screen is painfully small).  But the visual metaphor offers perspective
(care to see that COMMON block, or static global var up in the upper
left hand corner?) and proportion which regular languages lack.

From the Rock of Ages Home for Retired Hackers:

--eugene miya
  NASA Ames Research Center
  eugene@ames-aurora.ARPA
  "You trust the `reply' command with all those different mailers out there?"
  "Send mail, avoid follow-ups.  If enough, I'll summarize."
  {hplabs,hao,ihnp4,decwrl,allegra,tektronix,menlo70}!ames!aurora!eugene

windley@iris.ucdavis.edu (09/02/87)

In article <405@ndsuvax.UUCP> ncmagel@ndsuvax.UUCP (ken magel) writes:
>
>     Two factors which are important in the selection of a first programming
>language, but which have not been mentioned previously are:
>  1.  Availability:  the language should be available on a wide variety of 
>microcomputers so that students may use it on their own machines...

I disagree.  I teach an introductory class and I don't wnat my
students using there own machines.  Two reasons:

1.  I don't have the resources to track down system, dependant
problems or deal with the student that comes to me and says "the
problem you gave us doesn't work right on my computer...".

2.  I have my readers grade the students programs face-to-face during
the reader's office hours and therefore, the programs have to work on
the school machines.

Phil Windley
Robotics Research Lab
University of California, Davis