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

Functional Fills with Vecto

25 March, 200825 March, 2008

I’ve been wanting to do exclusive-or functional fill in vecto for a while, so tonight I delved in. I added a pixel function to the graphics state and kept the default as the normal alpha-blending it was already doing. The pixel function signature is a bit clumsy, but it was…

Read More

Approximating elliptical arcs with Bézier curves

29 March, 2008

In doing my modulation work with curves and ellipses, I extended the vecto function for drawing an ellipse to enable an oriented ellipse. Lately it occurred to me that this didn’t go far enough in terms of functionality, and I began wondering about how to draw part of an elliptical…

Read More

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

2 February, 201530 June, 2015

Part 1 Part 2 Part 3 Part 4 Part 5 Postscript So far, we can print containers, but what about arrays? And what about “pretty-printing” strings – perhaps we need to wrap them with quotes. Well, we know that with the existing code, both arrays and strings count as outputtable….

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