My Collection

I am a connoisseur of programming languages. I collect them like some people collect hand tools. I believe that each language has a set of problems that it is particularly suited to solve. All sufficiently complex languages are able to solve any problem that can be solved by a computer program. However, each language is most expressive for some subset of problems. This set of problems are the ones that the language is best suited to solve.

I find myself cycling back and forth between a small group of languages. My favorite language is Clojure but it is the hardest to make best use of. It has a number of features that are outside the norms of other programming languages. But it doesn’t have support for some other features that are commonly supported by most other languages. This is on purpose. Languages like this are called opinionated. The developer of the language has strong feelings about how things should be done, so he builds the language to make doing things his way easier, often at the expense of doing them more conventionally. This can make it difficult to accomplish your goals because of the constraints the programming language designer has placed on you.

The languages that I have been cycling between lately are, Python, Clojure, Javascript, and Ruby. Each have their own advantages and disadvantages. Each has their own challenge to mastering it. Each time I return to one of them after a time away, I understand it better. Eventually I hope to have mastered them all.

I had thought I might compare these languages in this blog but I am running out of space and time. So, I’ll try to characterize each in a short sentence. Python is widely used by people that are amateur programmers because it is easy to learn and yet is capable of tackling problems of significant complexity. Clojure on the other hand is a power house of best practice principles. It is very good at what it’s designer, Rich Hickey, was interested in making it good at which is a class of programs he calls situated.

Javascript’s best feature is that it is available in virtually every browser. Consequently, you don’t have to worry about finding a copy and downloading it.  The rise in popularity of Node.js as a server side Javascript platform along with the availability of the NPM javascript code archive have gone a long way to making programming in Javascript productive.

Ruby is a comfortable mix of object orientation and a more conventional imperative style of programming. It has an extensive archive of libraries called gems. It was one of the first popular dynamic web site languages and still has a vibrant community using and extending it.

One of the development tools available to the Python community is Jupyter. It is a server that allows the user to create a notebook on a web page in which the user can combine textual notes, written in the simplified markup language Markdown, with live code cells where the reader can tweak the example code, execute it and see the results in-line on the notebook web page.

I recently discovered a package called Gorilla that plugs in to the Clojure build manager Leiningen and provides a notebook server to the Clojure community. I’ll have more to say about Gorilla after NaNoWriMo is over at the end of November.

Which reminds me to remind my readers that I won’t be posting blog posts during NaNoWriMo. I’ll be doing good to just write the 1667 words a day that is necessary to “win” NaNoWriMo without trying to post to the blog as well.

Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.