Recently I teach Python to a beginner once every week via pair programming.
It has been a while since I teach programming outside my daily jobs. The last time I taught was when I was a college student. I taught iOS and Rails programming to teenagers as an intern at one of the edutech startups in Tokyo for almost two years.
The beginner is currently working as a teaching assistant at one of the universities in Tokyo. His area is Biochemistry, and nothing to do with software engineering. He reached out to me because he thought he could optimize how he aggregate raw data and analyse them using Excel.
When I first listened to him and how he analyse his research data, it almost looks like a disaster. After connecting one of the research equipment to his laptop via USB, that equipment emits CSV every few seconds. That CSV format is fixed but not well organised. After iterating several experiments, he manually copied those CSV into one large monolith Excel sheet, wrote a bunch of custom functions, and visualised them as charts.
The worst thing is that his large Excel sheet is really heavy, and it took more than 3 minutes even just for opening that file on my M1 mac comes with 64GB. Of course, updating each cell takes forever. Sometimes it crashes, apparently from OOM. From the point of a professional software engineer, there is nothing more apparent task like this that you can benefit a lot from automating the workflow.
Then I started mentoring him in learning Python. His goal is to automate this redundant and long experiment workflow.
Well, this is very "easy" to write that automation task by myself and share that with him. It will not take more than 1 day to complete this single task. However, he has a strong motivation to learn Python, so I decided to tell him how to achieve that, instead of giving him the completed tool that he can use.
The reason why I decided to mentor him was that I owed him a lot. He is one of my acquaintances for a long time, and he helped me a lot in a different context. Let me remind you that I basically do not spend my time on mentoring like this, even for getting paid, at least for now.
After spending several weeks with him, however, I realised that this is a great learning opportunity for me as well.
He is a complete beginner. He asks a lot of questions that come out of my imagination. When I tried to explain computer science concepts to him, then I realised that I myself do not understand those concepts deeply.
It gives me a chance to refresh my memory and deepen my understanding of programming. This is a win-win relationship, I realised.
While mentoring him, one of the biggest takeaways is that there is no easy way to master one skill set. I don't remember how I get here, as a "professional" software engineer with almost 10 years of experience. But thanks to him, now I remember how important it is to be back to basics, be humble to new findings, and share that knowledge with other people.
Teaching itself is really a respectful manner. This should not be a self-satisfactory nor mansplaining-like. Teaching means teachers themselves also learn from their relationships with their students.
It'll take a long until he reaches his goal, but I'm excited about how much I would learn from this mentorship.