I have something to share today. I'm going to teach you my favorite programming language!
Elixir has been around for several years, but has really been gaining momentum since 2015. It was written by José Valim, a major Rails contributor, but unlike Ruby, Elixir is based on a technology that goes back to the bronze age of computing—Erlang.
Erlang was developed for the telecom industry and is arguably the only relatively major programming ecosystem even more stable than that of Java. The Erlang Virtual Machine has been at the heart of "nine nines" reliability projects for decades. When someone picks up a phone, they expect an answer! Distributed EVM systems can be upgraded while running and have extraordinary fault-tolerance features.
Erlang has had a few well-publicized successes in recent years, such as Whatsapp, which used the technology to support hundreds of millions of users with only a handful of engineers maintaining a handful of servers. However, its terse syntax and immutable functional nature made it a difficult to most web developers of the past 20 years.
Elixir is built on the very same EVM but brings some of the developer ergonomics that made Ruby so beloved by so many. It also offers a full-blown macro system, which makes powerful DSLs possible and it has other powerful language features such as Protocols. This is probably why it didn't take long for a Rails-ish framework called Phoenix to appear.
Phoenix is amazing for web dev
| || PHP || Java or Golang || Rails || Node || Phoenix |
| solo dev speed || moderate || slow || very fast || moderate || fast |
| server performance || moderate || excellent || poor || moderate || excellent |
| numerical performance || poor || excellent || very poor || good || moderate |
| debugging || hard || easy || hard || very hard || easy |
| concurrency || no || yes || no || async || yes |
| fault-tolerance || no || no || no || no || yes |
Elixir is extremely performant for IO-related tasks. In one demo, an Elixir / Phoenix server running on a single machine managed to handle sending a chat message to 2 million simultaneously connected users. No other backend web MVC I know has performed at this level. Generally it's only lower level infrastructure written in compiled languages such as Java or Go that tend to run so efficiently.
In stark contrast to those options, Elixir gives up very, very little in terms of developer productivity. Being a younger language with a much smaller community, there are some gaps in terms of library support. For that reason, if your only concern is getting an MVP up quickly, Rails is still probably the go to. But you can move almost as quickly with Phoenix, and it can take real-time evented sorts of problems that Rails servers would have to hand off to third party tools such as Redis or a pub-sub service.
In a lot of ways Elixir feels like Ruby was in the mid 2000s. It's been around for a few years but just starting to really break into the international developer community. It offers tremendous benefits for individuals and small teams and it has a fantastic new web framework. There aren't many Elixir programming jobs available, but a lot of smart people are writing side projects with it in their own time. Startups are starting to see it as a competitive advantage. It's an exciting time.
Here are some quick bullet points about the project:
Regular screencast lessons
Lessons are mostly project based
For learners with some programming experience
Abundant free content
Freemium model for those who want more features
In many ways Elixir was a gift just for me. I'm a solo-entrepreneur and my interests have always drifted towards lower cost consumer-facing products, where Elixir's scalability and performance are worth a premium. I had a real struggle finding resources for learning the language while I was working on my previous startup, so in many ways Alchemist Camp is made for the 2016 version of myself. I hope a lot of other people can benefit from it too, though!