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.
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 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)!
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.
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 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.
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!