[Date Prev] [Date Next] [Thread Prev] [Thread Next] Date Index Thread Index Search archive:
Date:Mon Jul 7 19:56:27 1994 
Subject:Why I hate C, like Dylan (but narcisstically prefer pop) 
From: Robin Popplestone  
Volume-ID:940708.05 

References: <2vcjiu$4qe@opine.cs.umass.edu>
 <2vh9lm$33n@gaia.ucs.orst.edu> <2ver7iINN8jk@early-bird.think.com>
<2WIENBE.94Jul7144749@rzdspc15.informatik.uni-hamburg.de>

> This is simply because mathematics is not meant to mean anything,
> while programs try to model something. Mathematics is as abstract as
> possible and tries NOT to exploit your imagination, because
> imagination can be misleading. Of course it's easier to understand if
> it comes in familiar terms (as is usual practice in programming), but
> the analogy offers a particular interpretation already, thereby
> clouding the abstraction behind it.

And it is -abstraction- that programmers typically are not good at, and
which is hindered by C and assisted by Lisp and its descendants.
Mathematics is the most successfully -reusable- formalism we know, and
this arises from its abstraction. Literally it is the -drawn out- (ab +
tractum) essence of many problems. Programmers tend to focus on specifics
and fail to see common patterns. Even when a program embodies a standard
piece of mathematics it is commonly obscured in a mass of detail.
Reusability of program requires a more mathematical and abstract approach
to programming.

Mathematics, the purest form of metaphor (meta + pherein = to take across),
certainly does not exploit the imagination, it fires it. It is the poetic
form of the sciences. Most programs by contrast are utterly prosaic. They
force a plodding attention on a single interpretation. But the perception
and exploitation of commonality of pattern, that is -abstraction- let us
say, is what makes for great programs. For example, LISP is based on the
observation that the apparently disparate ideas of arithmetic operators,
subscripting arrays, accessing fields, calling procedures can be abstracted
(more or less ) uniformly as an extended notion of applying a function to
arguments. More modern functional languages (e.g. Haskell) achieve even
more unity by embodying a standard (lazy) model of application.

>   Mathematics is necessary for programming, but mathematicians usually
> write unintelligable code. They learn it that way. Languages like
> Fortran were developed for mathematicians.

This is too narrow a view of mathematics. Standard "applied mathematics"
is of course coded up in Fortran. But various chunks of modern
discrete mathematics are better expressed in languages most of us like
better.

Robin.