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

Why programming is fun

8 July, 200629 July, 2007

This week I have been working with a colleague on optimising a piece of code. Last week, what we started out with (a first implementation) was taking over 80ms to run in my test case. We had confidence that the overall algorithm was the correct one for the job, so…

Read More

And it was done

1 March, 2008

Since I already had the binary search and interpolation code, it was just a matter of writing different samplers for ellipses and Bézier curves. ;; make a sampler function for a bezier curve (defun make-bezier-sampler (p0 p1 p2 p3) (lambda (k) (decasteljau p0 p1 p2 p3 k))) ;; make a…

Read More

More on ellipses

1 March, 20081 March, 2008

I think I will use the same method as I do for Bézier curves to step along the circumference. Another generalisation I had to make from the circle code is with respect to the normal. For a circle of radius r, centred on the origin, and parameterised by angle θ,…

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