DEV Community

Tien Do
Tien Do

Posted on

Why Elm, and How I'm Learning It in the Age of AI Agents

I watched a JetBrains interview with Zig's founder. He talked about keeping the project to a small number of trusted contributors — fewer than ten — specifically because it's now easy for an open-source project to get flooded with low-quality AI-generated pull requests that waste a small team's review time. My first reaction was that this could tip into one person dictating the whole vision. But as I've grown as an engineer, I don't think that's necessarily bad — if the founder's instinct is toward simplicity and not bloated features, it can work well. I see the opposite every day in my Rails job: people over-engineering, abusing gems and metaprogramming to make simple problems complicated.

I started learning Zig with Claude Code. Somehow, that reawakened my old attempts at learning functional programming — Haskell, Elixir, Clojure, Scala, all of which didn't stick — and I decided to stop Zig and go back to FP instead.

This time I picked Elm. I looked for the simplest FP language with skills that transfer to my day job as a Rails engineer, and to other languages I want to learn later — Rust, Go, Zig, Odin. I was intrigued by Elm's famously good compiler errors and want to bring that lesson back to Rails. Elm's model-update-view architecture — the one Redux and other JS frameworks borrowed from — is interesting too, but not the main reason. The real reason: Elm's GitHub repo basically stopped growing years ago, because its founder decided it was enough. That resonates with the simplicity mindset I've grown into — knowing when to stop, remembering why you started, even if it upsets people who want more. That kind of restraint feels rare, and more valuable now, in the age of AI agents.

How I'm learning it: not syntax first. I've loved video games since I was 18 or 19 — that's part of what got me into software in the first place — so I'm building a Space Invaders clone in Elm with Claude Code, no external assets, all of it generated as SVG by code, with interactive HTML explanations along the way to teach transferable concepts.

After a while I felt I needed more grounding, so I went to Exercism — three or four Elm exercises in so far. It's good for strengthening a TDD mindset, the same mentality I already use at my Rails job. I built my own AI skill for it: the agent has to ask me questions instead of writing the solution, and I write the code myself to pass the spec — otherwise I don't actually learn anything. I baked "stay focused on transferable functional programming concepts" into the skill itself, so the agent doesn't drift from that. I'm not trying to solve all 100+ exercises — just enough to grasp it, then back to the game.

One idea for later: clone a well-structured open-source Space Invaders repo, in any language, and have the AI agent extract the useful Elm/FP lessons from it — not copy everything, just enough.

Top comments (0)