Archive for December, 2007

Six languages worth knowing

Thursday, December 6th, 2007

“A language that doesn’t affect the way you think about programming, is not worth knowing” – Alan Perlis.

I’ve thought about this, and developed a short list of languages worth knowing. Not-so-coincidentally, each language in my list embodies a distinct computational model. In no particular order:

  • The ALGOL family. C and its descendants. This is often the first language someone learns (in my case BASIC). Changes the way you think because: you learn programming. Functions and pointers are the big things to learn. These languages are also very close to the machine in their computational model: they epitomise the fetch-execute cycle. For many people, this is all they ever learn.
  • Forth. This language is so small, there’s not much to learn, but I’m including it because it is definitely a different way of thinking. Stack-based computation.
  • Lisp and its dialects. The biggest change here is code as data, which unlocks the power of macros. Closures are definitely a new way of thinking – executable data structures, for example. Also, Lisp fundamentally blurs the edit-compile-link-run workflow.
  • Haskell. Lazy evaluation is the huge thing here. Currying and higher-order functional programming are also mind-stretchers, even more so than with Lisp. Pattern matching is also really important and fundamental to Haskell.
  • Smalltalk. This is the one I haven’t learned yet, so I can’t say why it’s different, just that it seemed to fit in this list, from what little I know. Embodies the OO computational model.
  • Erlang. I’ve recently started looking at Erlang, and to be honest I’m not sure whether it belongs in here or not. It seems quite similar to Haskell/ML, but I’m giving it the benefit of the doubt for its concurrent programming abilities.

Footnote: At university, I first learned ML, then in the second year C, with a few lectures in “Lisp for Customising Emacs”. Prolog and (I’m pretty sure) Lambda Calculus made a brief appearance, and object orientation was taught using Modula-3. It looks like these days they are still teaching ML, also teaching Java and C++, and have ditched Modula-3 (OO taught with C++? Yikes). I regret not learning more Lisp back in the day.

Edit: On reflection, I would probably add Prolog to this list as well. Which would make it seven languages worth knowing.

Book sale again

Sunday, December 2nd, 2007

Seems like we just had the last book sale… Saturday was this quarter’s already. Here’s the haul: