Those who teach(ninjasandrobots.com) |
Those who teach(ninjasandrobots.com) |
I did the StackExchange (StackOverflow) and start-a-blog approaches that this article suggests and it worked out beyond anything I could have expected. I think that good teaching is the best way by far to becoming an expert at something.
Right before I was graduating college in 2010 I got an email from my former employer who had offered me a job (I had accepted) talking about what he had in mind for my upcoming work. The email read, "Do you know anything about the new Canvas element?"
I didn't.
There wasn't a lot out there for canvas in 2010, just some pretty proof of concepts and bad tutorials. I felt like I had two choices: Try to build something with canvas to learn how to use it, which always felt like a good way to use very little of something, or try to learn by teaching, which in college seemed like the only way to understand something in depth.
Sidenote: I believe that if you can't explain it, you don't understand it. This is just as true for political/philosophical positions as it is for mathematical rules. This is also what separates reasoning from mere opinion on many topics (ie, one's opinion on abortion. Regardless of what it is, if you can't explain your position to me, you don't have reasoning, you have a vague notion gotten from parents or peers that happens to pass as an opinion).
So I took to StackOverflow like a fiend. Whenever there was a question asked too often, I'd write a blog post tutorial about it. After a year I had answered more than 10% of all canvas questions ever asked. (It did end up being a bit of an addiction. If I put StackOverflow on my resume, it will have to be under the header "Poor Time Management".)
StackOverflow is gratifying. Really gratifying. Forget the points, too, especially if you're in a niche topic. The people I was helping gave me the only encouragement I need[1].
I didn't realize it at the time, but after a while I just became a resident expert on canvas. Even really obscure questions like this[2] presented my mind with easy solutions after answering so many other questions. I didn't believe myself an expert until one day, I had forgotten how to do something, so I Googled the answer and clicked on the StackOverflow link.
The answer-er was myself. I didn't even remember writing the particular answer, but there it was, and past me literally (re)explained to future me some canvas trivia.
In two years I went from knowing zero about canvas to being one of very few visible human resources for canvas on the web. I got a book deal[3] and several job offers out of it. That means that contributing to SO and helping people ought to favor even the most mercenary among us.
I still receive a steady stream of emails from people asking canvas questions. I try to help where I can, but feel overextended these days. Even while being overwhelmed, I still get the feeling that teaching is the most important thing I could be doing.
I had considered taking some time off my job to do nothing but make JS tutorials, and try to make some "Bob Ross"-style learn to program with JS videos, update the MDN, and hold office hours in StackOverflow chat.
My "dream job" would be doing something like that full-time, maybe for a year, but I can't really afford to quit work for more-or-less charitable web stuff just yet. Someday though, probably in a couple years, I'll have the money to "buy" the time.
[1] http://i.imgur.com/POZmt.png
[2] http://stackoverflow.com/questions/10060242/html5-canvas-glo...
[3] The book contains lots of interesting canvas tips and quirks I've found in the past years (and a canvas performance chapter!) http://www.amazon.com/dp/0672336278/
I now want to try teaching people more directly, but it's somewhat difficult. My university is unfortunately really biased against functional programming (much less the interesting theory stuff). There are some cool meetups around, and I'll probably give some talks there in the near future--after summer--but it would have been cool to TA a class to. One day.
This is also why I think that having a good culture of education, both on the learning side but also on the teaching side--is so important for a company. That's one of the main things I'm looking for now when I consider where I would like to work.
That exact same thing happened to me recently. I'm glad I'm not the only one! It's a weird feeling! (Though I still wouldn't consider myself an expert on anything.)
To teach is to learn twice. -- Joseph Joubert
I taught CS to high school students for ten years. I found the most welcome questions were always the ones I had not considered. Especially if it meant admitting you did not know. There is something in that admission that builds student confidence. Preparing an explanation and going over it with the class awards a tacit accolade to them all that tends to inspire more questions.
I also started studying Karate about 5 years ago, and being given lower grade classes to teach helped my understanding of my own technique immensely (sadly it did nothing to alleviate the fact I was a creaky old man of 31 when I started ;P).
[1] One of the problems of teaching a set level of students though is you tend to stagnate at that level without your own side projects, which get less attention because of the time factor. That's about the only regret I have with teaching as a profession.
This is particularly true when you're still working your way through school. That time is more dense with learning about learning than any other time you're likely to spend; it's not something you might be concentrating on intentionally, but building up your abilities and knowledge result in the way and speed at which you learn changing and improving.
Like I said, I'm not denigrating teaching or its positive effects in this vein at all. But there's also something else (at least one something) at work here that might be playing a larger role than realized.
I would propose that deliberate practice (http://www.freakonomics.com/2011/05/04/deliberate-practice-h...) is more key than age (I could be goofing off for 40 years) and experience (I could be poorly repeating the same inefficient niche for a long time).
But generally, the idea is to help students learn, instead of just yourself. So, instead of lecturing, give them opportunities to explain the material to others, do study groups, etc. Even explaining material to yourself helps you understand it better (this is called the self-explanation effect, by Michelene Chi and others). So, you can embed prompts after questions that ask students to reflect and explain what they learned, or have students blog or keep a journal about their work (or contribute to stackoverflow, yahoo answers, or similar support forums).
Anyway, read How People Learn, a free book: http://www.nap.edu/catalog.php?record_id=9853
Having to teach something forces you to go one step deeper in your level of understanding. When it's only for yourself, you stop when you get the idea. And this is good enough. But when you know you will have to present it in front 200+ students, then you make sure you really understand it. You can't help it, your mind is trying to find edge cases, to put it in a another context, ...
Same as Nate, I first enrolled as a TA because it was paying my tuition fees. But I got a whole new enlightening understanding of the algorithms we study in 101: Divide and Conquer, graph algorithms (DFS/BFS/Dijkstra/Bellman-Ford/Kruskal/Prim/...), greedy algorithms, NP-hard reductions, etc. I now genuinely enjoy thinking about algorithms, or proving one algorithm is correct, or deriving the time complexity analysis. Now I TA really because I enjoy it, money is just a side benefit.
Last May I sent a shot across the bow, telling my research group I would be teaching a boot camp on C programming. I spent the next 2 months refreshing my knowledge, and putting together a webpage/wiki sort of thing and generating sample code, etc. By the end I had a great resource not only for others but for myself, and along the way I ended up recoding a bunch of stuff in C and now it runs ~ 80 times faster (than Matlab/Python).
Some students intuitively grasp one explanation, while others will require another. I had the opportunity to have the time and students with patience, and I became very good at recognizing when a student actually gets something and when they're trying to hide that they don't (which is something that a lot of intelligent students have mastered.) This enabled me to switch how I was explaining a concept at need, which required me to come up with new explanations on the spot.
When teaching arrays to students that couldn't name a programming language two weeks earlier, you become quick at developing a toolkit of different ways to think about concepts.
I learned that in college, and it's held true for many of the things I've tried to learn.
I think that's why it's so useful to talk through a difficult problem with another developer. You often arrive at an answer as you're discussing it.
Here's a post I just wrote on the subject: http://nathanbarry.com/marco-polo/
A lot of people fall into the trap of building solutions for non-existent problems. (I certainly have) By going out of your way to help & teach others, you notice what problems people keep having, and what solutions currently exist.
Crassly put, teaching is the nice way to do market research.
However, there are things that are more teachable than others. Math, science and basic school curriculums are teachable but a lot of management and marketing is not. Over the years I've seen so much damage done to my company through consultants that teach things that should never have seen the light of day. Perhaps some of them are poor teachers but I think the bigger problem is the assumptions that what worked in one situation will work in most others.
I don't think I'd be nearly as skilled or knowledgable about Objective-C, Cocoa, APIs, or mobile development generally if I didn't have to guide my students. The added benefit of my situation in particular was that each student worked in teams to get something pushed to the App Store - helping me figure out how to manage multiple "dev teams" at once.
If you want to get really skilled at something, teach it.
If you want to understand something, write about it.
If you want to master something, teach it.”
–Yogi Bhajan
I know my SQL reasonably well, but I had no idea what to actually say when confronted with an entire 50 minutes of dead time.