I make things to help people learn coding skills. Most of my work is is closer to building edtech software than authoring education content, but I hesitate to identify what I do as edtech because, well a lot of that is basically surveillance tech which is not what I'm about lol.
A conversation at work prompted me to describe how I approach teaching a topic. I've been doing this for quite a long time now, so thought I might have some tips that could be useful to others looking to help folk learn.
Learn the thing myself first
This might seem obvious, but typically I'm teaching things I don't already know how to do, so I have to learn them first. The best time to teach something is right after you learned it imo, it puts you closer to the learner perspective, and you make fewer assumptions about what they already know.
It's worth noting any places you find particularly challenging or awkward, bearing in mind that these are highly subjective and won't necessarily be representative of what your learners find hard – they are still likely places you can make the experience easier for some.
Consider the conceptual elements
Often when you're trying to acquire a tech skill, there are both conceptual and practical elements you need to grasp. Abstraction, analogies, and mental models can be helpful here, but first you need to frame whatever you think those conceptual components are.
💡 Example: This year I've been teaching edge computing. The notion of client and server in web development is relatively well known, but adding a third thing called the edge poses a conceptual challenge. It affects your understanding of what happens when people visit a website, and what the development process looks like in that context.
🧰 Toolkit: When it comes to teaching the conceptual elements, varying the levels of abstraction in your learning experience can help – like using semantic waves.
Consider the practical barriers
With software development, we often have frustrating, time-consuming setup processes to get our environments in a state where we can begin learning. This friction reduces the number of people who manage to successfully engage, so I always consider removing barriers, at least for a first learning experience on a subject.
💡 Example: This is why I use Glitch so much, you can build applications without downloading or installing anything. I can also abstract a lot away behind the plumbing of a Glitch project and focus the experience on the core learning gains I'm trying to help people access.
There is a trade-off here between clearing the path of unnecessary obstacles and not glossing over understanding the learner will need to apply what they've learned in the real world – this can be a hard balance to strike and often takes multiple iterations.
Design the experience
I always try to teach hands-on, in context, in a developer environment. Editors like Glitch are great for this because there are multiple places you can include guiding information that the learner can follow at their own pace – they can also see the results of their edits live.
🧰 Toolkit: My goal is for people to come away from an experience with skills they can reapply in different settings. This can be hard to measure depending on the relationship you have with the learners, but I find the Raspberry Pi coding pedagogy research and practices like PRIMM super helpful for guiding design decisions – ideally, start with a working example and walk the learner through making a change to it.
Make it meaningful
Framing learning experiences in terms that are valuable and meaningful to the learner is a great motivator. Make it about what they gain by learning this skill, perhaps for a project or goal they care about, rather than just teaching it for its own sake. Putting the task or skill in its technological or cultural context helps.
💡 Example: I've recently been teaching people about using their own domains for their sites and applications, and explained why it's a good idea to do this as a supporting resource.
Community situated learning often provides additional motivation too – if you can encourage people to share reflections on what they've learned that'll help them retain their new skills.
Test it with humans
Whenever I'm working on a self-serve learning resource, I like to use it as a supporting asset for live training. Testing an experience with people in real time helps to reveal any implicit knowledge, anything I've inadvertently assumed people would already know but that they don't. I can then work to cover that knowledge in the experience, or at least indicate it as a prerequisite.
💡 Example: Earlier in 2024 I tested public facing learning materials for my company's products by running internal employee training.
When people attend a live training, giving them something they can take away, refer back to, and continue developing is ideal, so this one's a win-win.
🛼 That's about it! Check out my developer learning talk from 2023 for more tips.
Top comments (0)