{"id":420,"date":"2007-12-06T22:55:33","date_gmt":"2007-12-07T05:55:33","guid":{"rendered":"http:\/\/www.elbeno.com\/blog\/?p=420"},"modified":"2008-07-18T08:27:47","modified_gmt":"2008-07-18T15:27:47","slug":"thinking-about-programming","status":"publish","type":"post","link":"https:\/\/www.elbeno.com\/blog\/?p=420","title":{"rendered":"Six languages worth knowing"},"content":{"rendered":"<p>&#8220;A language that doesn&#8217;t affect the way you think about programming, is not worth knowing&#8221; &#8211; Alan Perlis.<\/p>\n<p>I&#8217;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:<\/p>\n<ul>\n<li>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.<\/li>\n<li>Forth. This language is so small, there&#8217;s not much to learn, but I&#8217;m including it because it is definitely a different way of thinking. Stack-based computation.<\/li>\n<li>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 &#8211; executable data structures, for example. Also, Lisp fundamentally blurs the edit-compile-link-run workflow.<\/li>\n<li>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.<\/li>\n<li>Smalltalk. This is the one I haven&#8217;t learned yet, so I can&#8217;t say why it&#8217;s different, just that it seemed to fit in this list, from what little I know. Embodies the OO computational model.<\/li>\n<li>Erlang. I&#8217;ve recently started looking at Erlang, and to be honest I&#8217;m not sure whether it belongs in here or not. It seems quite similar to Haskell\/ML, but I&#8217;m giving it the benefit of the doubt for its concurrent programming abilities.<\/li>\n<\/ul>\n<p>Footnote: At university, I first learned ML, then in the second year C, with a few lectures in &#8220;Lisp for Customising Emacs&#8221;. Prolog and (I&#8217;m pretty sure) Lambda Calculus made a brief appearance, and object orientation was taught using Modula-3. It looks like <a href=\"http:\/\/www.cl.cam.ac.uk\/teaching\/0708\/CST\/CST.html\">these days<\/a> 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.<\/p>\n<p>Edit: On reflection, I would probably add Prolog to this list as well. Which would make it seven languages worth knowing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;A language that doesn&#8217;t affect the way you think about programming, is not worth knowing&#8221; &#8211; Alan Perlis. I&#8217;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&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-420","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=420"}],"version-history":[{"count":0,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/420\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}