---
title: Learning by helping
teaser: How helping others made me a better developer.
tags: web,community,elm
author: Joël Quenneville
published_on: 2017-02-09
---

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

[Elm]: http://elm-lang.org/

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.

[elm-lang Slack community]: https://elmlang.herokuapp.com/

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?](https://images.thoughtbot.com/jq-learning-by-helping/vaT0TmhISWWr8M2Bm9Fa_how-do-i-elm.png)

It can be tempting to tell people to
<abbr title="read the fucking manual">RTFM</abbr>, "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?

and

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

and

> 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?

[patterns]: elms-universal-pattern

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].

[how to build a custom DOM event handler]: building-custom-dom-event-handlers-in-elm

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.

[beginner's mindset]: https://thoughtbot.com/blog/beginners-mind

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.
