Subject: Re: Can I use Lisp?
From: Erik Naggum <erik@naggum.net>
Date: 03 Nov 2000 01:24:54 +0000
Newsgroups: comp.lang.lisp
Message-ID: <3182203494509935@naggum.net>

* "Janos Blazi" <jblazi@netsurf.de>
| You will probably not answer technical questions if I am the one to
| ask them but in technical things you are really very reliable so
| here it is:

  I don't react or respond to people, but to what they _do_.  You have
  certainly made an impression, but that impression may change.  If you
  do something that _isn't_ annoying, you wouldn't find anyone happier
  with that than me, but I would be slightly more irritated than usual
  if you didn't keep it up.

| If you were to program in C for any reason: Would you stricktly
| follow the C standard or would you add C++ elements when necessary;
| are there additions of C++ to C which you regard as an enrichment of
| C?

  There is nothing useful in C++ that is not already in ISO C.  C++ is
  about hiding and obfuscation, both of which are ostensible qualities
  of abstraction if you do not understand at all what is going on
  around you.  E.g., _defining_ the interface to the linker such that
  you require name mangling is simply retarded.  There are many cases
  like that.  If you do not want to walk the necessary distance, do
  not walk the extra mile in some other direction just to show that
  you aren't lazy.  C++ has done more damage to programming language
  design than any other in the history of computing.  For one thing,
  it showed the wrong people that you _could_ base something on C,
  which is really bad, because you can't.  C is not the language you
  extend.  C is the language you do _not_ extend.  C is at the far end
  of its optimization path.  It may be envied for its success, but if
  one does not understand that it was much, much prematurely optimized
  qua language, there is no hope at all of ever finding any other path
  (and I think the "progress" of programming languages in the past
  decade has shown _that_ with a depressingly strong forcefulness).

  In my opinion, C cannot at this time be improved without breaking it
  in important ways (such as C++ in fact did).  The ANSI/ISO process
  was already a little overzealous with those "const" jokes.  (And its
  primary designer had to step in to stop them from adding "noalias".)
  Neither do I consider the feeble "support" for classes in C++ an
  improvement.  There is a lot of really clever work in force-feeding
  C with stuff it could never really handle, but cleverness and good
  intentions do not make a metric for good results.

  C++ is the worst kind of misfit: The niche it tries to fill (which
  is enabling programmers to think at a much higher level while
  forcing them to be concerned with the lowest level details) is a
  contradiction in terms and should not be created even though such
  contradictions _may_ exist in the software world.  If I want what
  C++ wanted to give the world, I'll use Java, instead, and write the
  stuff that needs tight hardware coupling in pure C.  I very seldom
  want what C++ tried to give the world in the first place, but that
  is another story.

  Very few languages are better than C for their purposes.  Very few
  languages are worse than C++ for their purposes.  This is absolutely
  no accident.  It is a necessarey consequence of optimization, of
  very bright people who considered a very narrow problem and solved
  it exceptionally well.  It's like creating the perfect steam engine
  -- you simply cannot use any of that brilliant work if you want an
  internal combustion engine or an antigravity propulsion system, and
  it is _fantastically_ stupid to think you could, but if you watch
  people struggling with unknown problems and known solutions, they
  will rather apply more force and energy on making the problems fit
  their solutions than snap out of it and try the reverse for a second.

  The worst that could "happen" to a very intelligent person is that
  is not "allowed" to break out of the conditions set for him by his
  precessors.  If you cannot say "This is all wrong, let's zoom out
  and try over", the best you can hope for is good engineering, but
  good engineering should be coupled with good ideas, too, and the
  time you discover whether you have a really good idea is when you
  _don't_ have to be super clever just to do ordinary stuff, but for
  people who love to be clever, who are patted on the back and in many
  other ways rewarded for being clever, languages like C++ (and Perl)
  will win followers.  _Anyone_ can be really clever in C++.  _Any_
  idiot can sit down with its _enormous_ definition and find some
  miniscule point that makes some fairly reaonable thing into a very
  special case with far-reaching ramifications that will impress other
  idiots.  But it is anti-productive, the antithesis of good design,
  and a promulgator of cleverness to do the ordinary that means nobody
  has any time to be clever on the hard problems.

  In C, there is an upper limit to how clever you can be, and that's a
  fantastically important property of the language: It means people
  tire of being the cleverest, so the cycle of useless rewards stops.
  Until a really stupid person came along and invented C with Classes,
  of course.

  I still use C mainly because it's the Unix system language.  It is
  hard to interface to Unix without being really good at thinking C.
  In like manner, Windows is married to C++, but at least Unix has
  real qualities, too.
  
#:Erik
-- 
  Does anyone remember where I parked Air Force One?
                                   -- George W. Bush