Programming
1. Programming experience:
Although I had some very slight "programming" experience
with mainframes - Algol and Lisp,
fed by punch-cards, with an output on sheets of dot-matrix printers -
and with AppleBasic of the year 1980, I
first learned to program somewhat decently in 1988, with one of the
first versions of Borland's Turbo Pascal.
I liked programming a lot and still
do, for I like mathematics and I like to understand what computers do.
Also, it turned out to be very often quite convenient: There are lots
of things you might want to do with a computer, and which are
relatively easy - but only if you know how to program.
So I have written lots of programs in
lots of programming languages. Most of these programs were small and
fairly to very useless, but I have written several programs of several
ten-thousands of lines which were quite useful for my own purposes and
which I could not have satisfied, there and then, except by
programming.
I have very briefly or quite lengthily
worked with GWBasic, Visual Basic, Turbo Pascal,
Turbo Prolog, Turbo C, Turbo Assembler, Dbase, Paradox, Smalltalk,
C++, Java, Visual Prolog, and
Delphi.
There will be more extensive files on
aspects of these languages elsewhere, but here I want to give some
brief appraisals of the above systems (which have many versions, of
which I usually did not use more than 1 or 2) and of how programming
changed quite radically.
2. A radical change in
programming: First the radical change, since it is most
important.
It is OOP: Object-Oriented
Programming. Until a few years ago this was not so much OOP as
OOPS, where the added "S" stood for "Style" and
any programming language presented its own supposed OOP-Style, which
usually involved a lot of tech-talk and hardly any useful results,
since the language wasn't really fit for objects nor its compiler
written around it.
At present - 2000 - I suppose
MicroSoft's Visual Basic is the best
known OOP-system, and it is well worth dipping into, but the best I
have seen is Borland's Delphi, which is
object-oriented Pascal, and quite amazing for anyone who has ever
laboriously programmed DOS-interfaces: Where one had to fight with the
OS and the compiler for several months in the old days in order to get
a useful interface for a complicated program, in Delphi you do a couple of minutes of dropping
and dragging, and Delphi writes an interface for you that is better
than any you could produce yourself a few years ago in months of hard
work.
Besides, what is known as the
Developer's Interface - editor, helpfiles, compiler and linker etc. -
has spectacularly improved as time passed and processor-speeds got up
and harddisks got larger.
The result is that programming is
quite different from what it was 5 or 10 years ago, since much of it
has been automated and can be safely left to Delphi or Visual Basic.
3. About programming languages:
Second, as promised a brief appraisal of the languages I have worked
with.
Basic dialects:
For some reason or other, I never liked Basic. In part, this has to do
with its old syntax, goto statement and other nonsense that since has
disappeared, and in part with its interpreted status. With Visual
Basic both aspects are a lot better, but it remains an
interpreted language, and still strikes me as the dumb man's guide to
programming. (This may be why Bill Gates loves it.)
Pascal dialects:
From the start, I liked Pascal far more than I liked Basic, for it
seemed much more logical than Basic. As soon as I discovered Turbo
Pascal I gave up the Basic of the day (GWBasic),
and in fact learned to program tolerably well in Borland's Turbo
Pascal.
The latest incarnation of Pascal is in
Borland's Delphi, and Delphi is a Good
Thing, that also makes programming totally different from what it was
in the old Pascal days, since so much can be left to Delphi's
pre-programmed classes and objects that in earlier days one had to
write laboriously oneself.
Prolog dialects:
As it happens, I know a lot of mathematical logic, and Borland's Turbo
Prolog was quite a pleasant surprise: a computer language that
looked like first-order predicate logic. I programmed a lot in it,
also because it tended to need far fewer lines for the same result as
did Pascal and C, and upgraded as Borland gave up Turbo Prolog and
resold it to its Danish originators, who kept developing it to its
present incarnation Visual Prolog.
As it happens, Visual Prolog is
interesting, but it doesn't compare well to Delphi or Visual Basic.
The reason is probably mostly monetary: Visual Prolog is developed by
a few people, while Delphi and Visual Basic are developed by hundreds
or thousands. The end-result is that while Visual Prolog is a bit like
OOP, it is far less easy to work with than Delphi.
Smalltalk:
More or less the same as applies to Visual Prolog applies to Smalltalk:
Five or ten years ago, Smalltalk seemed to have great promise because
it incorporated the first true and useful OOP-style of programming,
but since then it has been developed by few, with the result that its
better known competitors have slicker systems that are easier to learn
and work with.
Assembler
dialects: I have done a little Turbo
Assembler, and would recommend anybody who is serious about
understanding computers to do the same. In the old days of DOS, it
often was necessary to write a program or part of it in assembler, for
else it would be either too big or too slow to run. These days, this
is hardly ever necessary, and so the interest of assembler is mostly
academic.
C dialects:
As I liked Pascal and Prolog, and didn't like Basic, I also didn't
like C. The main reason is its syntax, which produces code which is
solidly unreadable as soon as it is long enough to start to be a
useful program. The advantage of C was that one could write smaller
and faster programs in it than in other languages, but these days
these advantages are far less important than when processors were on
average in the 8 Mhz instead of the 400 Mhz speed range.
Java dialects:
Java is a sort of simplified C++ developed
by Sun for the internet. Like Basic it is an interpreted language, and
it can do a lot to make one's internet pages come alive.
Since I don't like the syntax of C, I
don't have much of a taste for Java, but
it is more readable than is C. Also, there are several neat OOP-style
developing environments for Java, that take away much of the pain of
having to write, read and debug C-like code. (And as is normal in my
experience, Borland's JBuilder seems much
better than MicroSoft's J++, and indeed
the latter thoroughly fucked up my hard drive some time ago.)
Database
languages: Dbase and Paradox
refer to database-programs which include their own programming
languages fit for working with databases. (Other well-known one are SQL
and Fox.)
I spend some time learning some of
these, but they seemed to me a waste of time in that a general purpose
programming language should be able to achieve the same often with
less fuss, at least if you know how to program. This still seems to me
to be the case, and indeed learning Delphi seems to me a much wiser
investment.
4. The moral and mathematical
experience of programming: The nice thing about programming is
that it is applied mathematics, can be applied to very many topics,
and admits rapid what-if analyses, calculations, and mathematical
modelling.
In this sense, programming is in many
ways a
Leibnizian dream come true: a universal mathematical language (or
family of languages) dedicated to the practical solution of problems
in reasoning of any kind.
But programming is also a moral
experience: Since the program you write is executable and meant to be,
and since being human you make mistakes all the time when writing
code, programming shows you what it is to be human and what it means
in practical terms to yourself to be fallible and limited.