One of my goals for the year is to learn a new programming language. It’s been a while since I learned a new language, and I feel like a lot of the languages I know well (Go, Python, C++) are similar to each other, so I want to try getting out of my comfort zone a bit with a language that feels weird to me.
Requirements
Here’s what I’m looking for:
- It’s significantly different from languages I know well
- Web apps are a first-class citizen
- Makes it easy to build small, simple apps
- I want the opposite of Angular, which feels overly optimized for large projects
- Supports backend and frontend
- It doesn’t have to have a frontend framework, but I want to be able to use the same toolchain for backend and frontend like I can in Go or Python.
- I don’t want to use something like Elm that’s frontend-only.
- I don’t want separate build chains for the frontend and backend code (and I’m fine writing vanilla JS with some light backend templating).
- Compatible with SQLite as a data store
- Has good support for unit testing
- Open-source
- Actively-maintained
Nice-to-haves
- There’s a good ebook available.
- Paid books are fine.
- Low abstraction / limited “magic.”
- I find languages like Angular and Vue to be too “magical” in that there’s a bunch of Node.js packages in the mix that I don’t understand. And starting out, it feels fine, but once I get beyond trivial programs, I realize the abstractions are leaky, and there are complicated systems under the covers that I don’t understand. The other end of the spectrum is Zig, which feels extremely easy to reason about.
- Static typing
Non-goals
- Maximum performance
- Most of the apps I write have tiny performance requirements. Usually, the only user is me, and other times, I don’t expect more than a few dozen users simultaneously.
- I don’t want to use something that’s slow for a single user, but I want to avoid things that make tradeoffs in the name of achieving high scale.