Here’s a little exercise I’d like all of you who do any programming to try. First, list your top five programming languages, in terms of your expertise (how well you know the language, not necessarily how long you’ve used it). Here are mine:

  1. Synergy/DE
  2. C/C++
  3. Ruby
  4. C#
  5. PHP

Next, list your top five languages, in terms of how much you’ve used each one over the last year. Mine again:

  1. C/C++
  2. Synergy/DE
  3. PHP
  4. Delphi
  5. C#

Finally, list your top five languages, in terms of what you’d like to be using more (regardless of actual available opportunities). Mine are:

  1. Ruby
  2. ECMAScript
  3. Lisp (any flavor)
  4. Haskell
  5. Synergy/DE (version 9)

As you can see, there’s a bit of a disconnect between the languages I’m using most of the time and those I’d like to be using. This represents a gradual shift in the industry, I think. We’re now in the post-Java era, when it’s assumed that any 2-bit language will provide at least some support for objects, automatic resource recovery, and safely wrapped pointers. Languages that lead the pack in this era are multi-paradigmatic: they make object-orientation a matter of pragmatism rather than orthodoxy, and they enable a functional programming style to some degree. The very best also facilitate dynamic programming — which, in a nut shell, means any equivalent of eval.

Being the old guy that I am, I can remember the era before Java (in fact it’s the majority of my career!), which I’ll call the post-Pascal era. At that time, any decent programming language provided facilities for structured programming. Object-orientation was still largely the stomping ground of theorists rather than application developers. BEGIN-END and CASE statements were all the rage, not to mention good looping constructs. External functions were used sparingly for utility routines. Although many programmers realized that a more radical use of functions might revolutionize programming, available memory, stack space, or plain old institutional lag usually prevented such ideas from being implemented.

I can’t help but wonder what will come next. Lisp has certainly demonstrated the staying power of functional programming, but might there not be an even more excellent paradigm in the future? Only time will tell.