Hi there! 👋
I’m Richard, and I made this workshop. I hope you like it! I’ve run it for Frontend Masters as well as for Pluralsight, and in person at a bunch of conferences. (If you’d like me to run it at a particular conference, have the organizers ping me!)
I released the material I’ve made here under Creative Commons so others can use it to run their own workshops. If that’s you, great! Here’s some info about it that may be helpful in teaching this workshop.
The slides I use with the workshop include speaker notes. If you’ve seen me give this workshop before, you may notice that I’m not following these notes very closely.
This is because I made the notes for other teachers, not for myself. In general I prefer not to use speaker notes, but I thought it would be unreasonable to expect other teachers who wanted to use this material to watch hours of video to figure out what words the slides were designed to complement. Writing speaker notes seemed like a nice way to save other teachers a bunch of time, so that’s what I did!
If you spot any mistakes in the speaker notes, or have any questions about them,
please don’t hesitate to ask me in the
#teaching
channel
on Elm Slack.
The Intro and Advanced courses are each designed to be a full-day workshop. You may not have a full day to work with, but I figure it’ll be helpful to cover how I use this material. The schedule I follow is typically something like:
- 30 minutes - help everyone get set up, buffer for late arrivals
- 2.5 hours - cover parts 1-4
- 1 hour - lunch
- 4 hours - cover parts 5-10, with a couple of 10 minute breaks sprinkled in
Definitely get through part 4 before lunch if possible. Teaching gets harder after lunch because humans are programmed to get sleepy in the early afternoon. Part 4 introduces types in the Intro workshop, and you don’t want to introduce types to sleepy students.
I gave a talk about teaching Elm to beginners
which has a bunch of my thoughts on the subject. The
#teaching
channel
on Elm Slack
is a great place to chat about workshops, exchange tips, etc. Come say hi!
One big piece of advice I have for this workshop is to minimize the number of new concepts you introduce.
The goal of the workshop is that students will be able to build Elm applications on their own. This requires digesting a ton of new information, and piling on even more on top of what’s absolutely necessary is harmful to those students who are already struggling to keep up.
For example, I only use the term “partial application” to explain that concept. I very deliberately do not introduce the term “currying.” If a student asks “is this currying?” I give a short answer like “Yep!” and move on quickly.
Why not mention it, though? What could it hurt to throw that in?
Students who have been cruising through material might easily absorb this info and move on, but imagine a student who’s really struggled to keep up. Imagine them thinking “wait, I already don’t understand partial application - and now I need to learn currying too? What’s the difference? Is there a difference? Should I raise my hand and ask, or is that a stupid question? Argh, this is so frustrating!”
It can feel shameful to admit publicly that you don’t understand what the
teacher just covered. Especially when everyone else seems to have gotten it.
Double especially if you’re sitting near that one student who’s always raising
their hand and asking stuff like “so it’s an applicative functor, right?”
They make it sound like this is the easiest stuff in the world! Are they
going to laugh if you raise your hand and say “I still don’t get why
(List.map negate)
compiles. Can you explain how that works again?”
If a student is struggling, they generally won’t say so out loud. You won’t find out until you see the mistakes they make on the exercises. Just know that some students in every class will struggle, and that extraneous info that’s a nice-to-have for students who are cruising through the workshop may be detrimental to those who are barely hanging in there.
Remember, the goal is that students will be able to build Elm applications on their own. Minimize the number of new concepts you introduce so you minimize the chance that they’ll get overwhelmed and give up before reaching that goal!