Different programming languages, like different people, have their strengths and weaknesses. Some are simple; some are complex. Some are friendly to the programmer; some are friendly to the processor. Some cater to brilliant minds; some cater to other minds. I have spent a significant portion of my development career writing code in C#, which is accurately described as a general purpose language. It aims to be able to do most anything, rather than to be the best at any one particular thing.
After several years of living mostly in C#, I ran across Ruby and fell in love with it. It’s no surprise, because Ruby was designed to optimize for developer enjoyment. It’s very readable with low ceremony, and it takes no time to get something up and running. The down side is that it is not fast in execution. It’s one of the slowest languages in use today, but when I’m writing Ruby, I don’t care. I write in Ruby when speed of development is more important than speed of execution, or when I just want to have fun.
Lately I’ve been dabbling in Erlang, which I would put at the other end of the spectrum from Ruby. Erlang is a generation-old functional language that is all about concurrency and fault tolerance. Its runtime, called OTP (Open Telecom Platform), does a shockingly good job of solving a lot of the concurrency and uptime problems facing the software world in recent years. The Erlang language is clearly tailored to the needs of a concurrent runtime, and it achieves this goal brilliantly. One down side is the syntax. Erlang’s syntax is unusual, and it is not often described as pretty. Even among real lovers of Erlang, I haven’t heard anyone defend its syntax. We just accept the syntax because we’re more concerned with concurrency and reliability.
But is it ever possible to have our cake and eat it, too? What if we were so demanding as to ask for the beauty of Ruby’s syntax and the concurrency magic of Erlang on the same platform? Enter Elixir. Worlds are colliding. Elixir is a language that runs on the Erlang runtime but sports a syntax that looks an awful lot like Ruby. The best of both worlds? Could be. I’m just now gearing up to dig in and see. Elixir, I’m rooting for you.