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.
Agreed. I'm coming up to a decade of teaching CS in high school as well. The best times are when I don't know the answer to something I've been asked (and considering my classes go down the rabbit hole with topics pretty frequently this happens a fair bit :) since not only do I have to go learn about it I also have to learn how best to explain it and ascertain understanding of it in my students. The best moments are finding a really great way of relaying a difficult concept and having my kids have that "ahah" moment.[1]
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.
I'm definitely not going to disagree with this, but there's also a lot to be said for age and experience when it comes to understanding things. Being exposed to it once starts you off, but even if you don't think about or work at it consciously, the second time -- particularly years later -- unless you've been living under a rock, you're likely to see a massive improvement in your understanding right off the bat.
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.
> there's also a lot to be said for age and experience
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).
Deliberate practice is likely more effective than age, but I suspect that, as the parent comment suggested, simply letting a concept rattle around unattended in your brain for a number of years can improve your understanding of it the next time you encounter it.
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).
I've been TAing Computer Science 101 (Design of algorithms) four times now, and I cannot agree more with this post.
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.
Excellent. I 100% agree. The best way to learn about a topic, is to promise a group of people to teach them about it sometime soon in the future, and then go off and prepare. Just remember nobody expects a teacher (of any sort) to have 100% of the answers 100% of the time. Great learning exchanges happen when there is a question that can't be answered by the teacher, and the class + teacher together try to find the answer.
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.
(pre-emptive horn-toot warning/apology, its a career story, as my entire software career so far has followed from stuff learned and done on SO. If you read this I hope it makes you consider contributing to something like StackOverflow. The rewards can be much more concrete than "just" knowledge and a website score.)
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.
[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/
Yeah, StackOverflow is an incredible way to learn things. It's basically how I went from knowing nothing about functional programming to being obsessed with Haskell and category theory. In a pretty short time, at that.
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.
I think it would be a really cool idea if you asked different CS professors if you could make a guest presentation one class to talk about functional programming languages. Some of them would probably be thrilled with the idea.
DO actually prep and come up with enough material to fill the time slot, though. One of my professors asked me to sub in for him when he was busy but the material was fairly basic (intro to SQL) and I was an idiot and didn't even bother finding out what they had just read.
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.
> 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..
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.)
I've been focusing on the d3.js tag a lot lately. There's a lot of noise ("I want this graph. Can it be done?" type open ended questions), but it has been teaching me a lot and solidifying many things I kind of knew before into things I know. I hope I can get some form of career advancement out of it, but the effort is paying for itself so to speak.
Teaching is not just great for learning a skill, it is also the best marketing method I know. By teaching you build a following that sees you as an expert and is happy to pay for a small portion of your advice.
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.
It's a really good lesson I've heard delivered in a different way by doctors. They say in medical school the way you learn a procedure is to "Watch one, Do one, Teach one". Even though they have limited expertise themselves, the act of teaching forces them to approach the problem in a different way.
I can relate to this very much as I've learned and relearned a lot of the basics by tutoring other kids and now my own.
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.
There was an article in Science last year[1] that backs this anecdote up with statistics. Graduate students who teach in addition to performing research are better at designing experiments than students who perform research alone, despite the vast amount of time that teaching consumes.
Having moved to teaching after 10 years of software development, I can definitely relate to this post. I love how researching how to explain something has really made me understand concepts on a much deeper level. I appreciate things I never appreciated when doing pure development, and it's driven my hunger to learn more as opposed to learning enough to get a task done.
After the second year at my university I took a summer job to teach the first year kids C and functional languages. My understanding of imperative and sequential paradigm(and the functional) had never been so succinct before.
I used to be a teaching fellow at NYU for iOS programming - what OP says about teaching to learn is absolutely true.
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.
It really was exhausting. I'd be up so late doing my own work and preparing for class, I'd get up 15 minutes before class would start, and drive. I'd park my car in the Professor's parking lot to avoid looking for parking so I could get to the class on time. Only once was my car towed. :)
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.