I am a better programmer right now than I was 5 hours ago. That’s because I spent my evening teaching people about programming.
Our Node.DC Meetup group has been interspersing the usual presentation-format meetups with some collaborative meetups. We’ve struggled with a name for these collaborative meetups. They used to be called “Office Hours” or “Hack Nights.” Now we’re calling them “Node Nights.” Whatever we call them, the idea is that these are occasions to work together on projects, socialize, learn from each other, and ultimately produce something. But another thing we do at these meetups is dedicate some attention to people who are new to Node and want to learn. I’ve made it my role at these meetups to help out these people who are brave and curious enough to come to a tech meetup to learn about programming. I get great personal satisfaction out of it. But I realized today that as much as I may be helping them, they are helping me, too.
Our announcements for Node Nights always make the point that all skill levels are welcome and that we will be helping people learn Node using the wonderful Nodeschool interactive workshops in Learn You Node. We generally only get through the first 4 or 5 workshops over the duration of the 3-hour meetup. Without fail, the thing that trips people up — blows their minds — is the first asynchronous I/O workshop.
“How do I return the data?”
Here’s what I learned tonight: Explaining how this works — how this really works — is actually really helpful.
For the people I was talking with, it demystified what is usually described with magical metaphors. Smart people can get really confused when they are told that Node is single-threaded. By explaining that under the hood, threads are actually created to perform I/O without blocking program execution, things started to click into place for them. That anonymous function? That’s how you tell the program what to do when the thread that was reading the data is done.
What’s in it for me?
Feedback. Not just verbal feedback. Emotional feedback. That feeling of satisfaction people experience when they grok something for the first time — their emotional reaction causes an emotional reaction in me. And I think striving to create that emotional reaction causes me to think about and explain concepts in different ways until I get that reaction — until they get it. I’ve explained asynchronous I/O many different ways, and I think all that mental exploration has given me deeper understanding.
I urge you to try it for yourself. Choose a topic with which you’re comfortable, and find an audience who wants to learn about your topic.
Tech meetups are great for this — most of them would love to have more people offering to speak on relevant topics.
If you’re a Node programmer, see if there’s a local Nodeschool Event where you can mentor.
Or maybe the place where you work has opportunities — or you can create them there. My company, Social Tables, has periodic educational “Lunch and Learns,” where everyone has a chance to teach their colleagues about something — not necessarily work-related, even. Our engineering team also does periodic “Code Reviews,” where someone leads a discussion about a section of our code: it’s tricky, it stinks, it’s impressive.
I want to hear from you: How has teaching made you a better programmer?