Sunday, July 8, 2007

Seven Wonders of Programming Languages

As is widely known, there has been a massive effort to vote for the New Seven Wonders of the World, an update to the classic list of antiquity.

A fun thought experiment is to list the 7 Wonders of Programming Languages.

Imagine someone is new to our planet, civilization, or computer science. You want to show them the definitive list of programming languages: 7 wonders. What do you pick?

Making a list is easy. Trimming a list is difficult, and that's the problem with Seven Wonders.

Especially when you consider all of the available languages. For a wonderful evolutionary map, see this photo from Wired.

My list is below. Roughly speaking, my criteria are:

  • Proven track record and legacy. Sorry, Groovy, much too soon.
  • Success either in terms of influence or outright usage. However, sheer popularity is not enough.
  • Consideration for brilliance and innovation.
  • Admittedly, there is some blurring of the line between pure syntax and the platform/libraries.
Here is my (biased) list, in approximate chronological order.

1. Fortran

Assembly is older, the Turing machine is much older, but Fortran takes the prize as the grand-daddy of computing. It is arguably the "Proto-Indo-European" of procedural languages. Indeed, it was ugly, was not as influential as, say Algol, and had major problems, but it has a strong argument for being "first".

2. Lisp

For decades, university profs have whipped out this functional language when they want to mess up students. After an initiation to the Algol-based languages, there is no preparation for a mind-trip without for loops or if statements. Massively influential in its space (i.e. non-procedural computing).

3. Smalltalk

Though Smalltalk never seemed to break out of its cult-following, it pretty much nailed OOP right on the head in terms of execution. Smalltalkers are rabid fans and the general community spawned a stunning array of ideas, from OO concepts to library design and development methodologies.

4. C

Does this language need an explanation? Though the syntax is still a bit smelly, even after all these years, this is the definitive iron workhorse, the Lou Gehrig of languages.

5. Python

Python is on the list for 3 reasons. One, it is an educator's dream. It is easy to learn and so friendly that the interactive window harkens back to a simpler time of computing. Second, it is extremely effective for handling the "currency of computing" -- strings. Finally, it is an excellent example of a language that "stays out of the way" even when projects scale in size (i.e. it can be used for newbie programming or high-end applications).

6. Java

Some may sniff that Java has been a hype machine for 10 years. Wrong. The hype has been huge at times, but I think Java is actually under-rated. With a strong lineage to C++ and Smalltalk, Java got a lot of things right. Reflect on the JVM, packages, naming of classes/files, Unicode support, reflection... the list goes on. One day, historians will say that the pervasiveness of Cobol "was like Java, only smaller in scale".

7. JavaScript

A tough call for the last spot. One can try to defend the theoretical side of JavaScript -- I once heard in a conference that the author was influenced heavily by Lisp. One can try to point out elegant examples of its use. But the truth is that it is inseparable from its platform and rides that tidal wave into this spot. Just as C gave us definitive access to the filesystem and sockets, JavaScript gives us the DOM, and Ajax. When you have connections like Google Maps, well, you get red-carpet treatement.

There's the list.... let the flames begin!

What's your list?

ps. Honourable mentions to C++, Visual Basic, Cobol, Perl, and APL.

20 comments:

Anonymous said...

What about Ruby? ...or let me say, Ruby on Rails? ;)

Dinh said...

Python should be replaced by PHP, the language that powers the web world

GMc said...

No, not Fortran, that's ridiculous. Who cares if it was first? It's a goofy imperative mess, ugly, bleh. You posted "seven wonders", not "seven artifacts".

1. Lisp (and family). Old, powerful, still widely *relevant*, with new tools and dialects still being developed.

2. Smalltalk. Ditto. Squeak rules!

3. C. The lingua franca of Unix.

4. Prolog. Just a whole different way of thinking about computation.

5. Haskell. Purely functional, a beautiful language which advances a revolutionary paradigm.

6. Objective-C. What C++ should have been.

7. Ruby. The candidate from the dynamic languages party, and the best of many worlds.

Close runners-up: Java - just hugely influential, but not included because, well, it's Java. Perl - ditto. OCaml - a wonderful language, but hey, Haskell won out for purity's sake.

Anonymous said...

JavaScript is not a programming language.

I'd vote for COBOL, despite being disgusting (I've never used Fortran) is still very prevalent in computing, my prof once said that there are more lines of COBOL in the world than every other programming language combined (I obviously cannot verify that).

Antonio said...

Er... Javascript is not a what? Go learn how Javascript actually works (rather than reading random scripts on DHTML Zone #23), then come back when you've realized it's a better language than many out there today.

I kind of agree that Ruby should be on there, but its place is kind of filled in by Smalltalk. Nonetheless, if Ruby isn't on the list, I'm not sure Python should be either. They largely have the same advantages, with the only real difference being one of approach. A purely functional language like haskell or an interesting base idea that'll be pushing things in an interesting direction like erlang should probably take Python's place (and erlang's pretty proven ;)).

Anonymous said...

I like the whole .Net thing. F# and IronPython on one platform. It is wonder for me.

I know. .Net is not language.

Paddy3118 said...

1: ANSI C.
2: Python. OO isn't everything. Python gets the mix right/ Readability counts.
3: SKILL (Cadence proprietary scheme dialect met me half-way with added infix notation)
4: Verilog. (Where would this digital age be without it)?
5: Forth. Elegant simplicity.
6: Javascript. For the Web
7: Postscript. I remember printing without it!

- Paddy.

Anonymous said...

M, I loved your list and idea so much that, in the wake of that other list of wonders of the world, I asked our own community of readers over at WhatIs.com what they thought were the 7 wonders of the programming world.

If we get some feedback, I'll make sure to use comment again here.

My list, in no particular order, would read as:

1. Javascript

2. Java

3. C

4. Ruby

5. COBOL

6. Perl

7. Python

Thank you for the inspiration!

Mike said...

Seems like Basic should be around somewhere

Michael Easter said...

Thanks for your comments, all, and for your lists.... good stuff. I haven't heard of some of them (e.g. Skill) and haven't used others (e.g. Forth, Verilog).

IMHO, PHP and Cobol don't make it because they didn't bring anything but sheer popularity to the table.

re: Fortran. My thinking is along these lines: I originally had the Turing Machine. The formal definition of "computability" blew my mind in university and still fascinates me. However, I felt that the Turing Machine wasn't a language per se, in terms of syntax. I also wanted one of the "old dinosaur" languages and melded the two with Fortran.

The syntax is hideous and minimal but the choice is a salute to: (a) its breakthrough technology (in its day) and (b) the inherent beauty of "computability" and the Turing Machine.

In terms of cars, the Model T is a wonder to me, not an artifact.

re: Alex. Thanks for the props... good luck with your site!

re: Ruby. Ruby is perfectly legitimate for someone's list. For me, I could not _remove_ one of my choices/themes for it. That's the inherent problem with "Seven Wonders": the allocation of finite resources. There is no #8.

Anonymous said...

Re: Fortran: I used it alot early in my career and though it made creating spaghetti a breeze, it could also be crafted into a thing of beauty when used carefully.

Also, we shouldn't judge it from our present perspective, tainted with experience of newer languages. At the time it was created, the only alternative was assembly language. Then, it must have looked completely god-sent, and must have started many people thinking about what else could be achieved with a language, leading to the development of other languages and what we see today. So, for paradigm-shifting, ancestral reasons alone, it deserves its place.

My personal #1 is LISP. I have never mastered it or even used it commercially, but there is something about data & code being the same that is utterly, compellingly pure, and is why JavaScript (which has the same basis) is very interesting IMO. It is only challenged for purity by Smalltalk IMO.

Regards,
Kit

Sandy said...

My list would be:

CIL
LolCode
COBOL
ANSI C
PHP
Perl
Java

Anonymous said...

How about today's relevance:

C --> Grand-daddy of 'em all
Prolog --> AI guru
LISP --> well, my all-timer
Java [AspectJ variants] --> Gives a whole new dimension to programming
-- I'm going for the rest only for sake of completeness
ECMAscript [any form]
.Net [C#, VB, all of them, actually]
Assembly [Specially for device drivers]

Anonymous said...

ridiculous

Anonymous said...

As much as you may not care, Visual Basic undoubtfully openned up the programming world to heaps of developers (and a lot of wannabees in the process). It deserves to be in the list somehow.

Anonymous said...

APL/J

F#

Forth(?)

Basic

Python

Anonymous said...

Surely, Pascal deserves a spot.

I started with Basic on an Apple II and C on on a PDP-11. But the thought of making a consistent living via programming (without cringing due to really bad "other peoples's" code) - never occured to until my prof taught us formal programming in Pascal.

Suraj Barkale said...

BASIC and it's variants. They gave common people easier programming environments (with debatable results).

Anonymous said...

1) Delphi
2) Assembly
2) C#
3) C++
4) Java
5) Ruby
6) ?
7) ?

Anonymous said...

Biggest gripe: Forth must not be missing! Kick out Javascript (which had pleasant parts but in the end did more to annoy me than to please me) or Python (it's not that great and pretty young - like Javascript). Or kick out both, if we should worship the "old ladies": this would leave room for including Rexx: certainly an old and once pervasive scripting language that I'd accept here rather than the two youngsters. For the others I'd say that even the younger ones are ok for me: Java is just too pervasive to be kicked out for lack of history. We might consider removing it from a language list, however, and place it as a "platform" - which is the more important and influential part of its real meaning. We might then place UCSD-p there, too, as well as Forth (although that one is remarkable in both roles: platform and language). Who else should be on the "7 platforms of repute"-list? Well, that's another question...