Learning Is A Circuit - A Year of Teaching
In December 2012, Keith Walsh and I started the training arm of our local Ruby User Group, dubbed “Get Your Hands Dirty With Ruby”. The third Monday of every month, an ever-shifting group of rubyists and aspiring rubyists shows up to hack on variations of the 7 Degrees of FizzBuzz challenge that is plastered all over this site. I’d like to reflect a bit on my first year in the teaching game.
I Don’t Have Heroes, I Have Role Models
I got fired up (Keith and I use the surfer term “feeling the stoke”) after extended conversations with and/or presentations from Jeff Casimir, Noel Rappin, Kerri Miller and Ben Orenstein at RubyConf 2012. Their passion and talent for teaching made me want to “give back” to my local community the way they did on a national level.
When I got back to my hotel room on the first night, I started this blog and decided to start going to my local RUG. At the first meeting I went to, 8 of the 12 attendees had never written a line of Ruby. I asked my boss for use of our office space in the evenings, he offered to spring for the pizza, and we were off to the races.
The Teachers Are Also Students
Prior to our first meeting, I put a page up on with a few programming challenges, with the idea that they could pair up and help each other through them. We let people make their own choices and then just wandered among them “facilitating” when challenge gave way to frustration.
We had some limited success, but it was clear that the challenges needed to be a bit more nuts-and-bolts, and that there was a large group that would need extensive hand-holding for their first time through. I created the 7 Degrees curriculum with the idea that by the time a student had worked through all those challenges, they would be familiar enough with the Ruby ecosystem to explore on their own.
“Graduation” challenges
After four or five months, when our entire group of very bright, enthusiastic people were still slogging through the first four steps of FizzBuzz, we hit on the idea of a “graduation from fizzbuzz” challenge. If you could do the first four steps “live” with an instructor verifying each step, you “graduated” and never had to do the challenge again.
The effect was galvanizing: the following month we had four people meet the challenge and now over a dozen have “moved on”. We added a similar challenge for the “RSpec track” and are now putting together a curriculum for Git.
Pairing FTW
Our biggest success has been a strong (some would say obnoxious) emphasis on pair programming. Alan Kay’s quote about “a different perspective is worth 80 IQ points” is certainly true in our case, but the positive effect on the community feeling in the group has been the most important side-effect, especially since programmers tend to be on the introverted side. Several of our students have grouped together on the side to hack on their own projects, pinging the instructors when they get stuck. It’s working!
It’s too easy as a coder to put your head down and hack, ignoring everything around you. With a pair, you get much-needed practice interacting with another like-minded human being who may be at a radically-different level of skill and/or experience. We’re as much about community-building and “soft skills” as we are about teaching the proper use of “.map”.
I Heart N00bs
Since we have had first-timers every month since we started, I’ve become the “newbie” track leader and Keith takes the intermediate track (which focuses on testing with RSpec). The more advanced students nudge us for help when they get stuck.
As it turns out, I love newbies. I love the challenge of translating computer concepts into real-world examples and watching their eyes light up when they get something for the first time.
For me, coding is about empowerment. We write apps that allow our users to do things they couldn’t do otherwise. I like to say “I give people superpowers”. When I teach, I’m giving the students that ability as well. “Go forth and do good!”
Learning Is A Circuit
The mantra I probably get the most mileage out of is “we don’t learn with our eyes and our ears, we learn with our fingers”. That’s why every time we complete a bit of functionality on the newbie track, we pass the keyboard to our pair. Lots of newbies feel like they need to know what they’re doing before they touch the keyboard (I hear “No, that’s OK, I’ll just watch” a lot), but that’s completely backwards.
Learning is a circuit: you take in the information, process it through your brain and then “ground it” by sending it back out through the keyboard into the world. It’s only when that circuit completes that we’ve learned something.
Once A Month Ain’t Enough
We only have our students 2 hours per month, as well as some interaction through our GitHub Organization. That’s not enough to teach much. In order to achieve what our students have (and some raw newbies from a year ago are full-time Ruby programmers now), they need to put in lots of time between classes with their hands on the keyboard and their head in the game.
Coders are auto-didacts: even people with full-on CS degrees readily admit they learned far more after finishing school than they did during, and many of us had little to no formal CS education at all and still accomplish some pretty cool stuff that makes a difference in our little corner of the world.
But with that mindset, the desire to challenge yourself, and the wealth of readily-available information from the tremendously-generous Ruby community, anyone can code.
But don’t take my word for it: try it for yourself.