Computing - Languages - General


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 mathematical kind.

There are many programming languages, that can be organized in families. I have some or considerable experience with dialects from the following families

Assembly
Basic
Pascal
Prolog
Smalltalk

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 them.

Sixth, I should draw a distinction that is not very clear itself, but that is useful nevertheless:

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 scripting languages are Javascript, Python, Perl 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 Java, though Javascript is decent and useful as a scripting language 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 taste.
  • 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 documented languages.
  • 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.

last update: Nov 6 2009