40

I consider myself an intermediate Python programmer and have been offered an opportunity to be a trainer for a beginner Python programming class.

I was wondering if this would really widen my programming repertoire. Has somebody had an enlightening experience after they successfully trained a group of people?

Does it also depend on those people -- whether they're programmers or noob students? (In my case they are intermediate .NET and Java programmers)

What should I expect from them?

One of my fears is -- what if I choked when one of them asked a tangled question. Is this normal?

5
  • Don't worry about (chocking) not knowing an answer. By your students pointing out an area you are unfamiliar with allows you to know what you need to learn for teaching next years students. Commented Sep 27, 2011 at 17:31
  • Thanks. But the training is NOT in university -- it's a one time opportunity for training some Java/.NET employees of a couple of small web development companies.
    – treecoder
    Commented Sep 27, 2011 at 17:35
  • 34
    Teaching anything will make you better at it, because teaching forces you to thoroughly understand it. Plus, you're essentially re-studying it as you're teaching. Commented Sep 27, 2011 at 17:47
  • 2
    Be your natural self and express the knowledge. Students are people like you and me who intend to learn from listening to you in the class room. When your students score high distinctions or come up with awesome solutions to their problems because of your teaching, it will show. The satisfaction you may get out of it could easily defy expression.
    – vpit3833
    Commented Sep 27, 2011 at 22:44
  • 2
    All the trainers that I have ever interviewed; have failed the interview for position of developer. Programming is not just theory. To be a better programmer you have to learn 'and' practice by making real world apps. Commented Sep 29, 2011 at 7:31

20 Answers 20

37

In my experience, teaching programming did make me better. It forced me to get a much better understanding of concepts I had previously just accepted or taken for granted. When I had to articulate ideas that were old to me but new to students, in a number of different ways (because not everyone learns the same way from the same examples), it eventually led to a deeper understanding of the material for me.

And yes, sometimes students ask questions you don't know the answer to. That's OK, you can tell them you don't know, come up with a possible explanation, and promise to look into it before the next class.

8
  • 1
    @greengit I would suggest you compare the languages, but make sure you really know what you are talking about when saying that one language is better then another because some students may disagree and have valid counter arguments. Comparing them and showing ways python makes different tasks easier then in Java/.NET is a great way to help present the concepts. Commented Sep 27, 2011 at 16:37
  • 2
    I would say keep comparisons to a minimum and focus on how to do things in Python. I assume they are already familiar with basic constructs such as variable assignment, loops/iteration, functions, recursion, control flow structures, etc... It may help to design a project they build during the course (if it's long enough for that). Commented Sep 27, 2011 at 16:58
  • 3
    @greengit Don't pretend to know something that you don't know. If you don't know enough to make a comparison, use it as a learning point and ask your student to explain how it works in Java/.NET and try to come up with a comparison together.
    – Davy8
    Commented Sep 27, 2011 at 17:17
  • 2
    @greengit I think it helps to not go in with the assumption that you need to know everything about the subject. That's like expecting a you to do a job without the ability to look up references. Just be okay with the fact that you aren't going to have all the answers, but you can help direct your students to the answers. Maybe give them key terms to Google.
    – Davy8
    Commented Sep 27, 2011 at 17:28
  • 1
    +1 for admitting when you don't know the answer. I see far too many instructors simply make something up on the spot rather then admit they don't know everything. I've also had some good instructors who would use as an opportunity, make the students find the answer, teaching how to look things up. That needs to be carefully done so you don't discourage people from asking questions.
    – Jim C
    Commented Oct 3, 2011 at 18:59
31

An old University of Texas study made the following findings.

People retain:

  • 10 percent of what they read

  • 20 percent of what they hear

  • 30 percent of what they see

  • 50 percent of what they see and hear

  • 70 percent of what they do

  • 90 percent of what they teach

Following this logic the best way to LEARN something and retain what you have learned is to make your best effort at teaching it to somebody else.

Even though I coasted through Comp Sci 101 in school I took a tutoring job for C++ and didn't actually LEARN C++ until I was forced to teach it to struggling students. It was like an orgy of lightbulbs going off in my head as I helped non CS grads with their assignments.

7
  • 2
    +1. My voting limit is reached :( Please point me to the link if any.
    – treecoder
    Commented Sep 27, 2011 at 16:35
  • 22
    Maybe you should stop referring to that table. willatworklearning.com/2006/05/people_remember.html
    – Shawn D.
    Commented Sep 27, 2011 at 17:02
  • 5
    @ShawnD. I figured as much... because you know what they say, 84% of statistics are made up. I think more importantly it should be taken for the larger message. I retain a lot more of what I teach than what I read. This is a given to me as a natural observation of myself. That was the point I trying to make.
    – maple_shaft
    Commented Sep 27, 2011 at 17:08
  • 3
    Nice statistics, +1. My experiences are largely the same. We have a saying here: Those who can, do. Those who can't do, teach. Those who can't teach, teach sports. Just kidding :)
    – Falcon
    Commented Sep 27, 2011 at 18:02
  • 2
    @Falcon, a different version of the last sentence is "Those who can't teach, manage" ;-) Commented Sep 28, 2011 at 7:50
10

I haven't systematically taught programming myself, only tried to explain some concept or issue to more or less outsiders. It was always an interesting experience, and I learnt something every time.

Indeed, Jan Comenius noted already a couple hundred years ago that the best way to really deeply understand something is to explain it to others.

So go for it - it will be a valuable, enriching experience for you. You will surely get hard or surprising questions - that's OK. Don't try to pretend you know everything - just be honest and tell them something like "I don't know, but I will get back to you with an answer". They will only respect you better for being honest.

0
5

In addition to what the other answers mention, don't forget that while teaching you can also learn from your students if you're open minded about it.

You mentioned in a comment that your "knowledge of Java/.NET is near zero". That's a perfect opportunity to learn from your students. Teaching isn't a one way process.

If you don't know the answer to a question, don't try to hide that fact. The biggest disservice that a teacher can do to a student is to pretend they know something that they don't. At best you lose their trust when they figure out you don't know what you're talking about, at worse you mislead them and pass on false information which is worse than no information.

1
  • +1 for " you can also learn from your students if you're open minded about it" I have experienced this when I taught a few night classes, years ago.
    – DevSolo
    Commented Sep 27, 2011 at 20:10
4

Yes, you will get a deeper understanding. I made similar experiences like the other answers you get here.

I made an additional experience: I got quicker in error analyses. You teach people, so they make errors, you never thought about. When you help them, you get an eye for problematic code (at least, I did).

One of my fears is -- what if I choked when one of them asked a tangled question. Is this normal?

I think, it is normal. And my scholars had no problem, when I was honest (and I provided the answer later). In the opposite - they saw that nobody must know everything. The most important thing is to know, how to get informations. One of my best lessons was, when I didn't know the answer and we looked together to the manual to get the answer. After that, they knew how to read manuals.

4

I've taught technical college level classes (but not on software development). Here's my take:

Will it make you a better programmer?

Not 1:1. You won't gain the same experience as you would writing programs - but that is not a bad thing by any means (read on).

Would it widen your programming repertoire?

Absolutely. You'll have new challenges, and will need to (re)learn some things that you never knew or had forgotten over the years. Some of that will be useful in the future. It presents you with many new challenges and concepts. You will need to approach technical issues from new perspectives, and you can learn a lot by taking that perspective and by solving those problems. If you can effectively teach somebody what they need to understand technical problems, it will often improve your knowledge of the subjects and extend your knowledge domains. As well, you mention they already know another language, some say one of the best ways to improve is by learning new languages.

Does it also depend on those people?

Working with professionals in a nearby domain changes the structure dramatically. They already know how to communicate with computers, to write programs. Syntax and logic will be quick for them to learn. They will ask challenging questions in the first week.

What should I expect from them?

I would expect they will benefit most if you have the ability to relate the course's content to the languages they are already familiar with: "Yes, subject is similar to Java in these ways, but different for these reasons". I would expect the pace they learn to be quite quick, such that you should expect to invest a good amount of time outside class in preparation (again, a lot to learn, but the topics would interest most developers.)

What if I choke when I'm asked a tangled question. Is this normal?

Well, they are as experienced as you are, but in another area (although related). explanations can be tough, and you can't be expected to know everything or to have the same area of expertise as all of them (combined). The ability to say "I don't know" is a good quality in a teacher. If they are experienced as well, you can often come to answer via a short discussion ("Oh, we solve that problem using this technique"). If that fails, you should find the answer by the next session (for you and for them).

3

When you can successfully teach others something, whether programming or not, then you truly understand it. Being able to teach others something most definitely makes you better at the skill as well. Students will ask you questions that will surprise you and make you think of the subject differently. You will become skilled in presenting the material in more than one way which will also lead you to a better understanding of the subject.

Being able to teach others has always been my litmus test as to whether I truly understand something.

3

I would say it definitely makes a difference. From my personal experience, I defend this because of following reasons :-

  • While reading, sometimes the mind become lazy enough to ignore the details or begin assuming things instead of giving a thorough read to understand the concerned top. That's the particular reason for having incomplete knowledge gains while reading yourself.

  • In case of teaching, it's all together a different story. Here one cannot provide assumptions but facts, so a thorough reading is done for teaching. Also, the teachers feels that it's his responsibility to provide the complete and correct knowledge, which again prompts for further proof-reading.

3

Absolutely yes. Teaching gives you a platform to polish your knowledge of the material as well as enhance your presentation layer.

Additionally it helps you build bonds with other developers which can later translate into effective development team relationships.

2

On top of what everyone else has listed ("You have to know the material well" etc) if you're writing material for the course, it's good practice for writing documentation, because documents - be they course notes or technical documents - are written to transfer knowledge, even in industry.

But when you're in industry, often the documentation is for someone you haven't met and won't meet, so it's easy to fall into the trap of documenting what you did and not what the stakeholder/reader needs to know.

When you're writing for students in your class it's easier to practice and develop that mindset of useful documenting, since you're in close proximity to your stakeholder/reader. Hell, if you're really lucky a student will put their hand in the air and tell you your notes suck, and then you've learned something you can improve on.

2

Yes. I have often found that I didn't really understand something that well until I tried to explain it to someone else, especially someone without all the assumptions and buzzwords that a practitioner builds up over the years, either in first person (as a teacher or mentor), or even answering questions online (such as here on Stack Overflow!).

In addition, students may bring a different insight or (weird?) methodology to the problem, broadening the solution space.

A teacher, to be useful, may not have the answer on the tip of their tongue, but can say "I don't know", research it or look it up, and help the students find the answer faster and with a higher probability than can the students on their own.

1

When you are forced to explain something from first principles, it will definitely force you to understand it better. I often use this idea when searching for bugs in code, I drag someone in and try to explain to them how the code works. I usually find the bug within a few minutes. Same idea.

1

I would say No. Being a teacher doesn't make you better - learning makes you better. If you have to learn to be a teacher, then you'll become better. Teaching only helps you retain what you know, but in the world of IT everything changes daily. Because of this, you cannot just rely on teaching, you have to get your ... bum... off the couch and learn.

I have met may IT professors who were ignorant when it came to their actual field.They had certificates, courses, papers on the wall, lots of "show". Sure they could talk the talk, but if you EVER got off of the prescribed course schedule they would flutter, stutter and fail. They couldn't handle the pressure of things changing. They didn't change with the times, they taught what they knew, which was obsolete.

So let's turn this around again, I've had a few professors that were amazing. They were developers, senior developers, lead developers, directors of application development, then they became programmers. They knew real world scenarios, they knew that 99% of the stuff in text books didn't prepare people for real life work, so they changed it up, kept it current.

12 years ago my grade 11/12 IT teacher gave me an offer. If throughout each school year I was able to break his security / firewalls etc. at school, he'd give me an A+ (100%) in the course, regardless of my work. Heck, I helped him plan the course as I working as a jr. developer back then. That offer he gave me made him (at the time) an expert at windows NT security. I did get 100%, I had to steal his UN/PW and then lock him out... it was the only way in the end... But needless to say he got better as a teacher and in IT because of teaching - he worked WITH his class - not on his own agenda.

So where do you draw the line? Draw it on the attitude of the teacher. If that teacher is willing to learn, they will get better. If that teacher is just riding the wave, getting paid, and could care less - they're going to get worse.

1
  • -1 Totally disagree. As you can see you are really in the minority here. Your opinion is important but I think you might learn something from the majority of teachers answers here. Sorry, couldn't resist the last pun, I was just reading a post about recursion.
    – junky
    Commented Mar 8, 2012 at 1:00
1

Having to solve dozens of "why won't my code work?" problems while teaching exercise sessions in an introductory programming course made me a whole lot better at comprehending code on the fly and simulating it in my head.

1

Based on my own experience as a teacher. I would say NO.

Because, while you do get better understanding of basics, by teaching kids and / or newbs, you are not making any improvements that relate to your actual profession.

Why does this happen ? - because programming is developing faster than people can study. New languages and frameworks appear, new tools, new concepts, new hardware. And professional programmer MUST know his domain. Or else - nobody would need him.

You might want to say - 'but you can study fundamental algorithms', - and i say to you - 'but you should have studied them in university'.

Other topic is work rhythm. "Teachers" are slow, they are not used to solve actual real world problems fast.

And last but not least - teaching is giving. When you want to teach - you cannot stop yourself ;) its just a call from inside, an unyielding urge to share your knowledge, to reduce stupidity around you, and, eventually, make the world a better place ;)

1
  • This is why you benefit by learning from your students who may have more recently picked up new, related knowledge you don't know, or perspectives you hadn't thought of
    – junky
    Commented Mar 8, 2012 at 1:05
1

YES!

Louis E. Frenzel wrote about exactly this a few years ago:

Write a paper or article or teach what you have learned. You have to know it to write it or teach it. There's no better way to learn for yourself than to have to explain it to others.

1

Not directly related, but...

I see this happen ALL the time at my grandson's Boy Scout troop. The older Scouts think they "know" something until they try to teach it to their juniors. I don't think that dynamic changes much no matter how old or experienced we get.

1
  • I love correlations like this!
    – junky
    Commented Mar 8, 2012 at 1:06
1

Many of the answers to this question have pointed out that teaching something means you have to learn it first and so you have to become better to be able to teach. I would say that this is almost right.

If you are responsible for developing the course materials, then you will have to gain a thorough understanding of the subject matter. Learning the material to this level will make you better, assuming you need to learn something you don't already know.

If, on the other hand, you are just a meat puppet reading off course materials prepared by someone else, then you can probably get away without knowing or understanding the subject matter. This is especially true for introductory courses. If you are an experienced developer teaching a beginner's class, do you really need to learn anything substantive?

1
  • I mostly agree, however I think a lot of the posts were saying that you learn by the process of teaching, especially when you are asked questions by your students, rather than the preparation of material that you think you know (though there is still value in that).
    – junky
    Commented Mar 8, 2012 at 1:03
0

Not only teaching increase your programming knowledge or skills, it is also useful to write programming articles and tutorials. If you can explaint a topic to others in an understandable way, it means you also know and understand that topic.

0

I think it depends on how well you personally decide to prepare. I don't like being made to look like a fool, so when I teach, I over prepare, go into much more detail in my notes than what I tend to bring up in class. That way I feel secure I can handle most questions. Anytime I've prepped for a class, I found some fine detail that I had either forgotten or overlooked until then. Designing exercises can be particulalrly challenging.

Prepping for people who are already exisitng programmers is a whole level of extra effort. You can expect to have some people in the class who hate that they are being asked to learn Python vice thier beloved C# (or whatever). They will challenge everything you say. You may have others who already have some knowledge and will ask advanced questions on the first day. In the first case, make sure you keep on topic and DO NOT get into discussing the differences between the languages unless the class is not behaving hostilely. Simply return to the material you are going to cover. In the second case almost all advanced question can be refered to later in the class (giving you time to look up the answer if you don't know it.) So that should give you confidence. I always prep some harder exercises for the people who are taking the class because they have to but they are already familiar with the subject matter. Sort of independent study for the easily bored. (And are they surprised when I pull out those advanced topic exercises for them to do while everyone else is struggling with an exercise they did in five minutes!)

Most programmers though, like to learn and will be eager to get started doing something useful. You can probably keep basics down to a minumum, this kind of class is bored by doing Hello World type exercises. Make things more practical and business useful. You can plan to cover more material with experience than non-experienced programmers, so more to prep. If you can make the exercises specific to the kind of work they will be doing, that is even better.

Students have a remarkable ability to interpret things you say in a unique way. Their mistakes may be things it would never occur to you to do. Helping them fix their mistakes and explaining why they are mistakes will help you in code reviews!

Not the answer you're looking for? Browse other questions tagged or ask your own question.