I love programming languages.
Once upon a time, languages were mostly practical things born of pure necessity. The closer to the metal you get, the more likely it is that ergonomic choices impact your final performance. So, naturally, the more performant you need your applications to be, the more willing you have to be to throw out all those nice-to-haves.
But today, we have more powerful systems, optimization tools, and techniques. This lets us get "real work" done without having to make as many of the same trade-offs did 5, 10, 20 years ago.
Absent those performance-based constraints, programming languages these days are instead a reflection of particular values held by some community of people building and working in that language. Those values motivate new goals and constraints, which in turn spawn new ideas. Or sometimes they draw on very old ideas, ones which are solid at their core but benefit from decades of building production-grade software.
In any case, I find them fascinating. So whenever I'm about to kick off a new project, I tend to use it as an excuse to learn a new language rather than reach for something I know.
At AWS, I learned GWT (which, while not a language, may as well be one for all the complexities it introduced to Java) to build the management software for the AWS Storage Gateway.
At Massively Fun, I learned CoffeeScript to build a massively-multiplayer version of Settlers of Catan.
At Amazon (round 2), I (re-)learned Perl to build our campaign attribution system that tracked millions of software installs.
At Oracle, I learned Clojure to build their next-gen cloud management software.
Project Able is no different. For this project, I've chosen Rust. A number of factors are driving my decision.
- The more I explore the depths of this project and where it might go, the more I realize that I'll probably end up needing to learn a real systems language to be successful. But I'm also a terrible programmer who can do more damage with a footgun than you can possibly imagine, so.... no C/C++ for me, please!
- One of my favorite languages off all time is Clojure, a Lisp-1 with a beautifully designed language and standard library, a thriving community of developers, a great package system, and a powerful macro system that enables user-land extensions to the language. Rust has many of these things, without runtime overhead.
- I don't want to have to work in multiple languages as I go up and down the stack. That's increasingly possible in Rust thanks to trends I'm seeing in the WebAssembly space.
So... my desk is stacked high with Rust books, my project workspace is created, and I'm hacking away. I should have more to share before too long.