Knowing by reading, Learning by doing, grokking by teaching
I am currently teaching an MCPD course for about 20 people, with various programming backgrounds but little to no .Net experience. It is an interesting experience, and I realy like teaching (I get to speak for several hours and they have to listen to me :-) ). Plus, it is a good way to get a close up visual of how the new developers think.
I firmly believe that the only way you can really understand a topic is by having to teach it to someone. You can know something by reading about it, and you may even be able to recall it when you need, and you learn by doing something, but you are only assimilate this stuff when you teach it to someone, because then you have some sort of a coherent mental model in place.
Case in point, transaction isolation levels, I know this stuff, I have certainly used it in many places, I just don't think that I was ever able to really grok that before I had explained it to a class of people. This required not just explaining how it works, but the why, when and where. At the end, I came up much smarter, and I was the teacher :-)
The guys (and gals, but Hebrew is a sexist language, so I am just going to use guys from now on) in the class has various experiences, from assembly programming (and what fun it is to explain OOP to an assembly programmer), through C++ guys, to classic ASP programmers, to .Net programmers that want to know it better. That is an interesting (and challanging) mix.
There is the official curriculum for this course, and I am sort of horrifyingly following that. (At one point, I had to stop the class and do a code review of the example solution, it was very... instructive as a worst practice example.) I have a problem in teaching people stuff that I am not actually using, I feel like I am speaking in two voices here.
Nevertheless, I literally can't teach them the stuff that I use. Not because of the limitations of the course, but simply because to do that would be actively harmful to them. You can't (and shouldn't) try to grasp OR/M before you have a good understanding of SQL and how ADO.NET works. I can figure out how trying to teach IoC would go: "Oren said that we shouldn't use new Xyz()"
It would be harmful because they first need a good foundation, and only then we can build on top of that. I do insist on Single Responsability from the get go, though :-)
Comments
Couldn't agree more...
I've done presentations on LINQ, REST, RDF etc and each time I've come out the exercise with a completely new level of understanding.
Teaching understanding is what teaching should be about, and in order to even attempt that you have to truly understand the topic yourself!
At my last job I was constantly mentoring. One day another programmer asked me, if I remember correctly, "Why are you always helping us and explaining things?" I responded, "Out of selfishness." He was rather perplexed until I explained to him - so I can understand better.
I just changed jobs and I'm trying to get my team to start using TDD. I started to explain unit testing and RhinoMocks to them, but then I realized that I need to teach them first of all, why we need unit tests, then about loosely coupled systems, the law of Demeter, orthogonal design, continuous integration, ioc, and that's just the tip of the ice berg.
Are we post happy today? =)
Comment preview