I am fortunate enough to have a workplace where we get interns quite often. Today is one of the interns' last day so felt like writing about teaching and how it helps both ways.
Having interns can be seen by some as time-consuming, less code quality, waste of resources, etc. I can assure it's not, based on my experience with it.
Surely, my statement depends on many factors; the intern's level, the mentor's level, the work environment, timing, etc. However, I have not seen this personally happening. A while ago, I stumbled upon one of MPJ's Monday videos (his channel is great if you're a web dev), the video topic is why teaching is good. Also, I read some articles which supported what he mentioned in his video.
Putting articles into practice
Before I read about teaching, I was very cautious with what I advise to interns. Because I thought:
- They don't have enough knowledge/experience to judge what I say (could be wrong) and most likely will take it for granted
- I feel that I'm not 100% sure about something I know (e.g. framework or algorithm) so it's better to not mention it
After reading, I realized my thoughts are partially incorrect.
- True that interns don't have enough knowledge/experience at work yet, it's only natural. However, this doesn't mean they wouldn't judge my advice. Even if they do something incorrect I advised, it teaches me and them on how to overcome this mistake the next time.
- My knowledge is always incomplete about something, but this doesn't mean I should not mention it. Most of the time, this happens
I mention something wrong => someone corrects me => I research it a bit => I learn something new => mention it to that person. We both have gained knowledge due to my first incorrect statements, this is amazing! Even if nobody knows that what I said is wrong, this makes me think twice before saying something I'm not sure of and go research more first.
How to deliver a thought
Explaining a thought out loud is not as easy as thinking it alone, especially if the language isn't your/their first language. Also, thoughts can make perfect sense in your head but are very messy. So when you speak them out, they come out in the same order as you think and eventually, the words don't make sense to anyone and probably to yourself.
Teaching taught me that when I get a question, do a quick processing of the question and answer by doing the following
- Make sure to understand the question, maybe by asking questions back which sometimes solves the problem already
- Find the answer then complete the missing pieces of it
- Break the answer into bullet points and reorder them in a logical/chronological order (depending on the answer)
- Speak in an understandable manner and pace with well-timed short pauses, it gives the listener time to digest what you said. This depends on who you are talking to and how many
- Check if the listener(s) follow what you say. This is also tricky because "Is it clear?" question can be quite useless. A trick I came up with is preparing a "problem" with my solution (which I already know the answer of) and discuss it out loud, then see if the listener would respond to it. If no response, repeat from step 1 with a different approach.
Of course, steps 1-4 are great to me, I managed an answer which has added to my knowledge. But number 5 is the most important part, all that I have done in 1-4 is useless to the listener unless 5 is good to go.
This process is just an outline and it fits me but it doesn't necessarily fit everyone. Find your own way and please share it in the comments if you already have one!
After over a year with interns, I have realized how organized my thinking has become and my answers make a lot more sense now than how it used to be a year ago. Communication with non-devs has even progressed because teaching can be to anyone, from anyone.