A Choice of Programming Languages

A long time ago, I read Eric Raymond’s ‘How To Become a Hacker‘, in which he advises a newcomer what skills and mindsets to cultivate to become a contributing member of the open source community.  He advocates learning five programming languages: C, Perl, Python, Java and LISP.

I know all these languages, and I offer a completely different list: Forth, Haskell, and Smalltalk.

Why not Raymond’s five?  C you will either use for embedded programming (where Forth is superior) or number crunching (where Haskell is superior).  Perl and Python are random accretions.  Java is a programmer specific pathogen.  Everything that made LISP glorious has either been subsumed by Haskell or was lost with the death of the LISP machines.

Why my three?

  • Forth: To program well, you need to understand the hardware, not just the abstractions of the programming language.  Forth represents the only hardware designs which have become more elegant and easier to understand over the years.  I’ve my doubts about ANS Forth, but Charles Moore’s latest experiments are seductive and compelling.
  • Haskell: When you have left the realm of the machine itself, the only reliable source of structures and idioms to organize thoughts about programming is mathematics.  Haskell is the closest thing to pure mathematics available today.
  • Smalltalk: The most charming tools ever created to get a programmer through his work reside in Smalltalk environments.  The pale attempts to emulate them in Java and C++ are laughable.  Any development environment must be compared to this standard, and all others are lacking.  The closest competitors, and they are distant, are the most integrated and ascetic of the Forth environments.

I realize this list has a peculiar flavor.  I think the distinguishing characteristic is that they are languages where a single individual can assimilate the whole structure from top to bottom.  In Forth and Smalltalk, this means understanding the environment from to its roots.  In Haskell, it means understanding the language, which is a mathematical abstraction, to its roots.

Not that I have actually obtained such an understanding of any of the three.  What makes these languages from ones you can understand into ones you can love is that it’s obvious from the shallows that you can plumb the depths if you just devote some time.

Leave a comment