Learning by helping

Over the past year, I’ve been learning Elm. I did the usual things when learning a new language:

  • Go through the tutorial
  • Build a lot of toy projects
  • Read blog posts
  • Subscribe to the $LANGUAGE-Weekly newsletter

One of the biggest spikes in my knowledge came from an unexpected source.

I joined the elm-lang Slack community and started hanging out in the #beginners channel. A lot of the questions were “What is the syntax for X?” or “How do I do Y?”. The docs have the answers to all of these.

As someone who’s been in the software industry for a while, I’ve developed a few critical skills:

  • Searching Google
  • Reading documentation
  • Designing small experiments to test hypotheses

Google: How do I Elm?

It can be tempting to tell people to RTFM, “Google is your friend”, or “try it in the REPL”. This, however, displays a lack of empathy and self-awareness. The skills you take for granted aren’t immediately obvious to others, particularly those asking for help in a channel called #beginners.

Instead, I did the searching myself and would share the link to the appropriate section of the docs along with explanations as necessary. I slowly moved on from looking up syntax and functions to helping out with more conceptual questions such as:

Why doesn’t the compiler like type Html a for snippets with event handlers?


How do I add an input event to a <select>?


What’s with the duplication in type User = User String Int?

The result was that I quickly gained a solid knowledge of Elm’s syntax and core library. I also started to see patterns emerging. I was able to help with libraries that I had no knowledge of.

How do you build a custom fuzz tester out of a simpler one? Sounds like a map operation. Trying to combine three JSON decoders? I wonder if there’s a Json.Decode.map3 function?

As I got more comfortable, I’d not only look things up in the docs but also be willing to source-dive to explain why certain behavior worked the way it did.

Over time, I got a feel for the questions that tend to get asked a lot. I wrote up some blog posts on some of these like how to build a custom DOM event handler.

Throughout this process, it’s important to keep a beginner’s mindset. Often, answering a question was a co-learning process. I didn’t know the answer at first or had a very hazy understanding and over the course of a discussion we both left with improved knowledge. Other times, attempting to explain a concept exposed how I didn’t know the answer as well as I thought I did. Humility and the ability to say “I don’t know” turn these situations into learning opportunities.

Don’t wait until you’re an “expert” before mentoring or helping others out. The payoffs are massive, even when you’re a beginner. Always keep learning, always keep sharing.