In 2022, I wrote about how my tech stack has changed. Remix had just gone open-source so I naturally I tried it and I liked it so much that I switched to it as my default React framework. Along with it, I also switched out a few other things that I've been using till that point - Chakra UI, MongoDB, SWR, and Vercel/Netlify.
I didn't change my tech stack in 2023. I was quite happy with the stack that I had chosen. In fact, I'm still happy with it. Almost.
I did learn some Rust, did some Advent of Code problems the last couple of years. But being a web developer, I don't really want to build web stuff with Rust. Don't get me wrong, Rust is great for backend services but I'd rather use something that's built for backend engineering.
Enter Elixir and Phoenix
If you check the StackOverflow Developer Survey results from last year, Elixir and Phoenix are only being used by about 2% of the 90000 developers who responded.
Compare that to Node.js and Express or even Next.js, the adoption is way higher than Elixir and Phoenix.
So why do I want to learn a language and framework with low adoption? Well, first off, the sample size is really small compared to the total number of developers worldwide.
More importantly, however, I've always heard great things about Elixir and Phoenix. People who use it, love it. After some research, I found that Elixir has some desirable features:
- Elixir is built on top of Erlang and runs on the Erlang VM. Erlang apparently is highly performant but has a terrible syntax, which was why Elixir was created.
- Phoenix is the most popular web framework in Elixir land. It's fast, self-healing, and fault tolerant — all great things to have in a backend service.
- Elixir has great pattern matching. One of my favorite features in Rust is its pattern matching. Elixir has a similar built-in pattern matching feature that's quite powerful. I used it in a couple of toy programs and I think it's great.
These are obviously from a beginner's point of view. Experienced Elixir devs could probably tell you more about why they love it.
Does this mean I'm ditching my beloved Remix? The answer is no. I'm going to try building my backend services in Elixir/Phoenix and keep using Remix for frontend. This means I take on a bit of additional complexity in my git repositories since they have to be monorepos now. But I tested out a monorepo setup with Moon and it's quite good. I'll write about the setup soon.
I won't go much into why I chose Golang. It's pretty simple — it's fast, has types, has a good developer experience as far as I can tell. Apparently, it's also quite easy to learn. So I'll be alternating between Elixir and Golang for my projects' backend.
As someone who is self-taught and started off as a frontend engineer, I feel like there's a lot more backend and general software engineering stuff that I should learn. So here's some more stuff that I want to learn this year, in no particular order:
- Data Structures & Algorithms
- Compilers & Interpreters
- System Design
Learning by building
I'm a huge advocate for building side-projects as a method for learning new programming languages and technologies. So I'll do just that. I already have a few ideas lined up that I'm very excited to build. They're all gonna be breakable toys and they'll be stuff that I want to use to improve my life in someway. I'll talk more on the ideas and process in a later post.
All this stuff might seem like I have a lot to learn in 2024. I think so too but with consistency, I think I can get a lot done this year. People usually underestimate how much stuff they can get done in a year so they shoot for less. Even if I don't complete my list, I would have gotten part way there.
Shoot for the moon. Even if you miss, you'll land among the stars.
― Norman Vincent Peale
What are you hoping to learn or get better at in 2024?