My personal vice is computer languages. It has been argued that human language, much more than the vehicle of communication, might be the
actual substrate of thought. Humans can think only to the extent that their language permits them to. Computer languages for me
are the expressive means of programming thought. Programmers can think only to the extent that their programming language permits them to.
That's why I find it essential to be acquainted with many programming paradigms. People who close their eyes to alternative paradigms limit
their perception to a narrow field.
My first encounter with programming was ZX/81 Basic. My same-named cousin was into electronics and I saw the Sinclair ZX/81 at his home
during a visit. It should be evident by now, that this event has had tremendous impact to my life. Basic was so small that a demonstration
by my cousin was all that was needed to understand it. I coerced my father into buying me a ZX/81 the same year, but I was writing Basic
snippets on the borders of my textbooks even before that.
I then went to the NTUA and joined a small group of computerphiles sharing my infatuation
with computers. One had an Amiga, one had an Atari ST, but one had an Acorn Electron (which I later bought) and another had a BBC
Microcomputer. Acorn Basic entered my life. Disposing of line numbers and resembling COMAL in its syntax, it pointed me towards structured programming.
And a side-effect of approaching the Acorn world was the low price of a particular book: "LISP for the Acorn Electron". This small book
was my introduction to LISP. Although I didn't actually run LISP many times (external storage was a "tape drive" at the time...), just
reading it was very influential. Enough, in fact, to earn me a straight A in the LISP course during my first year in France.
Apart from Mechanical Engineering, which was my area of studies, I did a lot of extracurricular study of whatever caught my interest that
involved programming. "Programming in Prolog" by Clocksin & Mellish taught me this wonderful language (also very handy when I went to France),
and I also had access to a PC XT clone and a copy of a Prolog interpreter to try it out.
Turbo Pascal was the language du jour after PCs entered the scene (did not make us popular with professors though, who preferred Fortran programs they
could run themselves). But Turbo C was my first experience with the complexities of a modern compiled language, linking, makefiles and a zillion
ways for things to go wrong and your program to go down the drain long before it even reaches the stage of being executable.
At some point I don't really remember I learned about Forth. I was intrigued by the simplicity of the execution
and the circularity of the Forth environment, and was sufficiently motivated to actually write a Forth kernel for indirect threaded Forth (don't be
amazed, as a Forth kernel is a few hundred machine instructions) in 8086 assembly.
During my stay in France I actually worked with LISP and Prolog, and had a chance to learn about all sorts of non-mainstream languages. One of
them was CLP(R), distant relative of the Concurrent Constraint languages my
D.E.A. thesis was about. Working in AI also acquainted me with rule-based
systems. SNARK was the most close to me, as it was built by the late Jean-Louis Laurriere, with which I was wokring part-time.
Object orientation was a hot topic, although the field was a lot less rigidly defined than now. ObjVLisp was my introduction to metaclass-based OO.
C++ was not taught at the university, but was catching up in the world at large. And the book by Bjarne Stroustrup was a really enjoyable read. I was
recommending it at the time, along with Structure and Interpretation of Computer Programs as general
education regardless of C++ itself.
Functional programming was a natural outcome of the course in Lambda Calculus, which lead to Miranda, Haskell and Scheme. The latter then came to me as a
natural choice for a small scripting language for Ovrimos, and TinyScheme was born.
After I came back to Greece, I ordered Icon from the University of Arizona. It featured generators, goal-directed evaluation and SNOBOL-like text
processing.
Java and C#. Well, they are very interesting in their own right but are direct derivatives of others. They are
very interesting in their approach to software engineering, and have moved it forward very much from the time of C and 10,000-line
programs that pushed the limits of software teams, but programming-wise, they are nothing new. Aspect/J (and the lesser-known Hyper/J) do
fascinate me, though, and my hope for the next great thing lies with AOP, generative programming, Intentional Programming and the likes of them.
The latest in the zoo of varied programming languages is J. Not because I learned about it just now, but because I only found the time to study and
understand it during the summer vacations of 2007. On the one hand, my free time is less than before. On the other hand, I have not found other
stimulating programming languages worthy of inclusion in that list.
I am not going to talk about Clipper, Perl, Python, various Unix shells and such, which fall short of this criterion. While they might present novelties,
they do not rock my world.
I am in search of new frontiers in programming. The Computer Sign in my forehead is
pulsing with a faint glow. What will the future bring?