Programming Language Hitlist

I’m frequently finding new and interesting programming languages I want to learn. I’ve really enjoyed working in Javascript the last few years and find the incredible pace of change in the web world exciting. But, there are some different and fascinating ideas in other languages that web developers generally don’t get exposed to or only get small glimpses of.

So with that in mind, here are languages that I would love to learn and, in some cases, have already started doing so.

Clojure / ClojureScript

Oh Lisp, how wonderful and terrifying! Odd syntax, macros, immutable data. So many unfamiliar concepts on one hand but extremely elegant on the other.

Clojure, being in the Lisp family, has all those features and runs on the JVM. In particular, I’m currently playing with Clojurescript, which compiles to Javascript.

My experience thus far has been both fun and frustrating. In Javascript I’ve started writing more functional code and have been using Immutable.js for immutable data structures, so those aren’t that new. I think the syntax is mostly what is holding me back right now. I’m used to object.method and a C-like syntax. But in Clojure I frequently know roughly what I code I want to write but don’t know exactly the syntax/functions to get there. I see things like -> and # and am totally lost. But I’m getting there and it’s exciting.

One of the coolest parts of Clojurescript is it’s libraries. Om, a React wrapper, demonstrates incredible render efficiency and a model that is simple to understand. In a React-based application I’m currently working on, I’ve been doing something that is similar to what Om does (re-render from the root). I’m using the Flux architecture to accomplish that and while there is a fair amount of boilerplate code involved, there has been a nice simplicity around the code that is easy to understand.

core.async is another interesting library. I have barely read about it so I’m still very much trying to grok it. But, it seems the basic premise is that rather than have callbacks or promises you have channels. Channels are completely new for me but from reading it seems that they allow you to write you code as if it’s synchronous which simplifies things greatly. This sounds somewhat like the the upcoming async and await in ES7. Again, I have not yet used it and only done some quick reading on this so take it all with a grain of salt (and let me know if I’m wrong because I really want to understand)!

Rust

My entire career has been working with high level languages. Javascript, Perl, Ruby, ColdFusion (yes, you read that right) just to name a few. I did some C in college and enjoyed it someone but never really studied hard to understand manual memory management. And quite frankly it just didn’t interest me.

Now, after being a programmer for many years, lower level languages are more intriguing. After struggling with performance issues and endlessly tweaking code to garbage collect at optimal times and tweaking the JVM, being able to drop down to a lower level is appealing.

Rust is interesting is that it gives you that low level control if you want it but doesn’t force it on you. In my very very limited experience with Rust, it felt similar to other languages I’ve used, which is great. It’s statically typed but has type inference.

Rust has an unique idea of “ownership”. From what I understand, variables have an “owner”. Only that owner can ready/modify it. This allows you to guarantee that the variable isn’t modified as you’re trying to do something with it. In Javascript, you can pass objects around and anything can modify it at any time. So you start using Immutable objects or simply copying objects before passing them along. This idea of ownership would seem to simplify things.

I’m super excited to use Rust with the Tessel 2, coming out this August. The Tessel is similar to Rasberry Pi or Arduino but has a Rust and Node API. It seems like a fun project to play with Rust on.

Elixir

Elixir is interesting. It runs on the Erlang VM and has a Ruby inspired syntax. It has pattern matching like Scala, which would seem to eliminate the need to if/else statements. Since it runs on the Erlang VM, Elixir has lightweight threads. My understanding is that you could have hundreds of thousands of threads running at any given time which is crazy to me. My limited experience with threading has been somewhat painful. Managing the state shared between threads was awkward and I never felt comfortable with it. It would seem that Elixir makes threading very easy.

I never got heavily into Ruby but always liked the syntax of the language and the community around it. Elixir has a very similar syntax to Ruby and it appears that some in the community are gravitating towards Elixir now. My hunch is that this may be the next “big hit” in the programming language world, at least for Ruby developers.

It’s interesting to see functional languages like Elixir becoming more and more common. While they may not be the norm, I get the feeling that the software industry is sort of “growing up” and looking more and more to functional languages as they have some incredibly powerful (and sometimes very confusing) concepts that can alleviate pain points felts in imperative/object oriented languages.

Elm

I know nearly nothing about Elm. It only recently appeared on my radar as a language built specifically for the web. And it has a syntax similar to Haskell. Apparently it compiles to HTML, CSS, and Javascript which blows my mind. In a world where compile to JS languages are common, having something compile to HTML and CSS as well, from the same source language, is something new and exciting.

These are what’s on my radar for the time being. I’ve played with all except for Elm but hope to rectify that soon. My hope from trying new languages such as these really is to expand my mind and learn about concepts I’ve not seen before.

I’d encourage everyone to do some research on different languages and try something new out. You have nothing to lose!