Skip to content
Why is a raven like a writing desk?

Thoughts both confusing and enlightening.

Why is a raven like a writing desk?

Thoughts both confusing and enlightening.

Six languages worth knowing

elbeno, 6 December, 200718 July, 2008

“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.

Programming

Post navigation

Previous post
Next post

Related Posts

Lisping towards enlightenment

17 December, 200729 December, 2007

Me: a C/C++ programmer of 12 years (professionally), a Lisp dabbler (programmer is too strong a word to use here) of, let’s say ~3 months. I’ve done enough functional stuff to be comfortable with that side, but I haven’t (hadn’t) yet written a project big enough to get me used…

Read More

RotateAVI

11 September, 200629 July, 2007

Your new digital camera takes great videos, right? And you have a nice 2GB flash/SD/whatever card in there so you can take plenty. But there’s one problem: you have lots of movies in portrait format, where you were holding the camera on its side, because after all that is how…

Read More

How to print anything in C++ (part 1)

1 February, 201530 June, 2015

Part 1 Part 2 Part 3 Part 4 Part 5 Postscript I thought I’d have a go at writing some code that could print things. A pretty-printer, if you like. What I want to be able to do is this: // Print x correctly, where x is ANY type. cout

Read More

Comment

  1. Pingback: Why is a raven like a writing desk? » Blog Archive » Update

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

©2026 Why is a raven like a writing desk? | WordPress Theme by SuperbThemes