Languages - General
I have some experiences with programming in many
languages, because I am interested in programming and programming
languages, for their own sakes, as a kind of logic or mathematics; for
what can be done with them, namely creating something useful or
interesting with them on a computer; and because I like logic, and
consider programming languages to be a kind of dynamic logic (or
algebra), and indeed also as a good part of future mathematics.
But I am not a
professional programmer, have never been one, and I do not
have a degree in CS (Computer Science), though I do have academic
degrees in philosophy and psychology, for which reason my concerns with
programming must be seen as a labour of love, fuelled by my interests
in computing, mathematics, and my interests in literacy in things of a
There are many programming
languages, that can be organized in families. I have some or
considerable experience with dialects from the following families
My experiences with and some
ideas about these are described in their own files, to which the above
list gives links.
Here I have only some general
remarks on programming languages.
First, all general programming
languages are designed to do the same sort of thing, namely making a
computer (a piece of electronic hardware) do things. Therefore, the
more you know about the working of computers, and especially the - kind
of - computer you are programming on, the easier it is to learn to
program. (See: Computers.)
Second, different general
programming languages embody different ideas about what - good -
programming is, but it is easy to get lost here in a kind of
programming metaphysics (such as "If it is not Object Oriented it is no
good" or "Real Programmers do it in C"). Most of this is nonsense, but
it is remarkable how many programmers have beliefs of this kind. For
this there is a good underlying reason, though it is not metaphysical:
Third, once you can program
fairly well in several languages you will quickly see that under the
hood programming languages are more similar than would appear from
their written forms or original motivations, and that in fact, at
least for those who do have sufficient understanding of programming and
the computer (or kind of OS) they program on, many of the salient
differences between programming languages are esthetical.
It so happens that I do not
like jungles of brackets, that are very convenient for compilers, but
rather distracting to me, for which reason I have mostly avoided C
and Java, though I have programmed in them. But I have little
useful to say about them, other than that I don't like their
grammatical forms, and that any general purpose programming language,
if developed sufficiently well, can do what any other such language can
do, if perhaps not as fast, or not in equally readable code, or not in
a similar environment.
Fourth, I should mention
another group of languages I have little experience with, though I have
also written a little code in it: Lisp. My main reason to have
little experience with Lisp is that I have never found an
implementation of it that could do what implementations of other
programming languages could do, in terms of producing interfaces
(windows, lists, editors etc.)
I do not know why this is so.
Perhaps it is because Lisp was mainly developed and used in
universities, and perhaps also I am somewhat prejudiced against Lisp -
though I admire its designer McCarthy - by a two month university
course at the University of Amsterdam, where one learned nothing but
saying 'car' and 'cowder' while looking profound. (This says all that
is fair about the UvA, but not about Lisp. I do not know what the guy
who taught the course believed he was doing, except making money in a
very easy way. But to learn in two months that in Lisp 'car' = head and
'cdr' = 'cowder' = tail is about par for the level of most of the
teaching in the UvA. Anyway - it made me tend to believe for quite a
few years that Lisp is pure hogwash, a sort of mantra-singing for the
brain-damaged, which in fact it isn't at all.)
Fifth, there are some
languages that I have looked at and written a little code for, but
about which I can say little that is useful, other than that I have
tried some version of them at some point over the last 20 years, and
was not impressed enough to try more than I did: APL, Forth,
Ada, Eiffel, Mozart and Lua come
to mind. (There are more.) However, this is not a dismissal of these
languages, but only a way of saying that what I saw of them did not
meet my personal needs, prejudices or esthetics at the times I tried
Sixth, I should draw a
distinction that is not very clear itself, but that is useful
A general programming
language is usually also a scripting language, but a
scripting language need not at all be a general programming language.
What is a scripting language? A programming language - or a dialect or
subset thereof - that is specifically designed to write simple,
readable and brief code for a certain kind of task.
Four presently well-known
and Ruby. These all can do some tasks quite well, but are - at
present - no all purpose general programming language. The same us true
for Java itself, for this is interpreted.
As I said, I don't much like
for websites. Python is a nice and clear language, but at present is a
scripting language. Perl I found obscure, which is what a scripting
language should not be, but it may be good for you if you like
puzzling. Ruby I only know by reputation.
The main point of this
diversion is to make clear that scripting languages may be very fine
and the tool of choice for what they were designed for, but they are
not the same nor as powerful as (except perhaps in principle) general
programming languages. (The principle I have in mind says that the
presence of a few minimal routines of a certain kind are sufficient to
construe a Turing machine.)
Seventh, some words of advice
for those who are new to programming - say: those who didn't program
for more than a year, or who never wrote a decently working program of
several thousands of lines in some general programming language.
- If you are certain that you
don't have any gift for mathematics whatsoever, it is highly probable
programming is not for you.
- Programming is a
mathematical form of art, and much depends on intuition and personal
- Learning to program takes
time and trouble.
- If you are new to
programming, and do not have a degree in CS that gives you the
necessary knowledge, avoid undocumented or poorly or obscurely
- Here is a Documentation
Principle (that's hard to enforce but good to try to keep):
Source code without any comment should not exist.
And here is a nice quote on
the issue by one of Visual Works' (Smalltalk)
main developers at present, Vassili Bykov (from
his blog, March 2, 2006):
"Here is my beef with
comments, or lack thereof. It's communication, or lack thereof. I am
coming back to my usual mantra. I am a usability guy, and I have my
look at things. APIs are user interfaces. Programming languages are
user interfaces. Programs are user interfaces. A program is not
text that makes a stupid computer do stuff. It's text that tells
another human being how a stupid computer does stuff. A program is
a communication artifact."
Quite so! If it isn't worth
commenting, it isn't worth sharing with others - or yourself, in a
shorter while than you think.
Eighth and last, there is the
instructive and funny site 99
bottles of beer where one can find the song "99 bottles of beer"
programmed in over 210 - when I last looked: 1093 -
programming languages or dialects thereof.
It's quite instructive to see
the same task done in many different languages, and there are some
languages that make it totally incomprehensible what's done.