Newsgroups: comp.lang.lisp
Path: cantaloupe.srv.cs.cmu.edu!das-news.harvard.edu!news2.near.net!MathWorks.Com!news.duke.edu!convex!cs.utexas.edu!uunet!csfb1!mfischbe
From: mfischbe@panix.com (Mike Fischbein)
Subject: Re: Why do people like C? (Was: Comparison: Beta - Lisp)
Message-ID: <CwJ82u.7nL@csfb1.fir.fbc.com>
Sender: news@csfb1.fir.fbc.com (Usenet News <Jim Freeman>)
Organization: First Boston Corporation
X-Newsreader: TIN [version 1.2 PL2]
References: <LYNBECH.94Sep15223604@xenon.daimi.aau.dk> <os2Psc1w165w@sytex.com> <35dcf9$jao@news.aero.org>
Date: Thu, 22 Sep 1994 12:59:18 GMT
Lines: 77

John Doner (doner@aero.org) wrote:
: In article <os2Psc1w165w@sytex.com>, Scott McLoughlin <smcl@sytex.com> wrote:
: >I'm still _VERY_ curious (concerned?)
: >about why Lisp isn't more popular in "the trenches".
: ...
: >        So why don't folks use Lisp to write this stuff? Blazing
: >speed,space,etc. aint that critical. What gives?

:   None of them can explain why C won out over Pascal,
: for example.

Pascal has many limitations imposed in an attempt to mandate "good"
coding practices on beginners; C removes those limitations.  Many
Pascal compilers remove some of them, but use of those extensions
renders code non-portable.

:   My latest theory is that the answer lies in cognitive
: effects arising from the conception and structure of the language.
: People make up mental models of how things work, and interpret the
: programs they write in terms of those models.  For experienced
: programmers, compiler writers perhaps, these models are complete and
: accurate, closely corresponding to the objective reality.  Novice
: programmers have poor models that are incomplete, poorly related to the
: actual computing machines, and perhaps even inconsistent.

This is an excellent basis for the discussion.

:   The
: intellectual effort required to develop a good model for Lisp or Ada is
: much greater than that required to develop one for C.

This sentence I must disagree with completely.  Lisp can be
conceptualized more easily than most computer languages, certainly the
ones under discussion.  One might leave out significant chunks of the
language, but that is frequently what novice programmers do -- in whatever
language they work in.

:   There are more
: abstractions involved.  Thus, C is more easily comprehended by
: inexperienced programmers.

Which renders this conclusion invalid.  There are not more abstractions
involved; but the abstractions involved in Lisp are *different* than
those involved in C, and *different* than those most novice programmers
have been involved with.

C's conceptual machine model is similar to that of the most common
beginner/teaching languages, BASIC and Pascal, without many of the
limitations of those languages.  C's conceptual machine model is also
similar to most common CPUs.  This makes it easier for novice
programmers, who've been working in BASIC and studying the 8086
instruction set, to map their conceptualizations to C than to Lisp.
Similar handwaving for Pascal and 68000.

A programmer who can work comfortably with C, BASIC, Pascal, Fortran,
et al, has really learned one conceptual machine with different (and
varying amounts of) syntactic sugar.  This makes it easy to shift from
one Algol-like language to another; having learned BASIC or Pascal, the
novice programmer finds C to be an extension of already known
concepts.  Lisp presents a different way of thinking about the problem
that does not fit comfortably with what the novice already "knows"
about programming.

Lisp, Forth, Smalltalk, awk, and APL (and other non-Algol-like
languages) all have different conceptual machines.  All require
significant shifts in the way the programmer thinks about solving the
problem at hand (compared to the Algol-like family).  Gross conceptual
shifts are much more difficult than for most people than the relatively
minor syntactical shifts required for staying in a single language
family.  This applies to Lisp also; it is easier for a hypothetical
programmer who knows only KCL, say, to learn Scheme than it would be
for that same individual to learn C. But beginning programmers
generally work with simple languages usually designed for beginners,
such as BASIC, Pascal, Shell and Rexx; and these languages are almost
all part of the Algol family.

	mike
