Learning by Teaching
—
I’ve started a weekly newsletter! If you want updates on this blog or my research, or just a weekly dose of the going’s on in information security and threat intelligence, you can subscribe here.
—
I grew up in a teacher’s family. This had a profound impact on my childhood and my education, especially, in almost exclusively positive ways. If you had asked elementary-middle school me if I liked doing summer school with my mom and summer reading lists to complete by the beginning of the first semester of classes, I would have answered with a resounding no. Now, though, I have the benefit of hindsight, and I know how important those practices were to my education.
I also developed a resounding respect for teachers and their place in society. I recently watched an interview with James Simons where he said he believed that one of the reasons the US education system is so jacked up is that, relative to other countries, we as a society don’t respect teachers enough. They don’t have the place in society that they deserve as the teachers of the next generation. I completely agree with that assessment, and I think we would go a long way if we rewarded teachers with the respect and societal position they deserve, as well as a meaningful pay bump across the board.
Over the last several years, I’ve had the opportunity to teach in different ways. In college, I helped a lot of my peers with software development studies, usually in exchange for them helping me with math or physics. Afterwards, I started live-streaming my studies and research on Twitch, usually pertaining to subjects like malware development and reverse engineering, offensive security and things like that. Now, I’m developing a formal course on Udemy for scraper development (subscribe to my newsletter for updates and a discount code once it goes live!) and I’m teaching kids how to code in Scratch and Python. Teaching, for me, has been an incredibly rewarding experience. I’ve always taken the stance of learning by teaching.
What is learning by teaching?
Learning by teaching is a common, well-researched mode of learning in the classroom that encourages students to learn a subject matter and then teach it to others, either by preparing presentations to show the teachers and students or in tutoring their classmates. The idea is that you learn the skill yourself to a point that you can start teaching a layman, and the questions the layman asks or the concepts that come up during tutoring end up bettering the understanding for both the tutor and the person being tutored.
I started learning how to code in high school, at first by sitting next to a classmate that taught me what coding was, and then by researching it myself at home and during class. By the time I made it to college, I’d taught myself roughly 75% of the 4 years of curriculum in college, a fact that makes the amount of money I spent going to college all the more painful… However, one of the ways I did benefit from college was in tutoring my classmates and working through problems together.
There were and still are some things that are just intuitive to me about coding. Like, in the beginning, recursion just made sense to me. I didn’t really have to whiteboard it a ton, I just did a couple of examples and it just clicked I guess. I didn’t truly understand the idea of recursion, it was just something that clicked intuitively. What made it truly make sense, the thing that made me understand it from a base level and truly understand how to apply it, was when I started tutoring classmates on recursion and explaining it on the whiteboard. I realized that, while it clicked, I didn’t really understand how and why it works, or how to apply it, until I started walking others through it. Object-oriented programming principles were the exact same way for me.
Further application of learning by teaching
After college, I went on to start in the information security field as an analyst, and boy I had a lot to learn. There was only one infosec course in my college curriculum, and it was… limited. It ran through the basics of the OWASP top 10 vulnerabilities, taught the very basics of SQL injection and cross-site scripting, and had a very basic CTF at the end. So, I entered the infosec field with very little formal, foundational knowledge of security, essentially just what I’d taught myself.
I started livestreaming on Twitch partially as an alternative revenue stream (I actually did alright, all things considered) and partially to livestream my journey in learning security concepts. I did streams on CTF’s, malware reverse engineering and development, exploit research, etc. I can honestly say I’m not great at most of the aforementioned concepts, but it was a cool environment to learn in and I think I learned a lot more by focusing on teaching the audience, most of which new more than I did, than by just learning on my own. The reasoning was that I might understand the foundational, basic levels of a topic like buffer overflows or a specific C++ syntax quirk, but I’d truly understand it if I could explain it out loud, even if the first couple goes at that were just me saying the wrong things.
This is a method I’ve seen Thomas Randall, a game development YouTuber I’ve followed for a while, use in his livestreams. He literally reads over pages and pages of docs for a specific technology or concept, explaining it to dozens or hundreds of viewers while he studies, live on Twitch, and pairs down that experience for YouTube videos. Michael Reeves has done the same things in some of his livestreams of developing robots, flying drones and babies with lasers in their eyes. It’s a fairly common concept now, and I’ve found a lot of value in it.
Most recently, I’ve had a lot of experience in learning by teaching. I teach several classes of kids every week how to code in Scratch (a visual programming language geared toward younger kids with no coding experience) and Python, and just about every time I teach a class, a kid shows me a different way to code something or asks me a question that forces me to think about programming differently. A lot of times, it’s having a fresh set of nooby eyes to look at something and ask questions that you’d never ask yourself. For the Scratch classes, sometimes the kids just have worked with Scratch way longer than I have and show me a better way of doing something in that language. I might be the teacher, formally, but I pick up a ton from those kids every time I teach a class.
For the Udemy class I’m developing on scrapers and spiders, I’ve realized that some of my development flows are overly convoluted or inefficient by forcing myself to write out those processes in a script. I’ll write the code, then write the script explaining the code, and think to myself “wait, why do I do it this way?” The act of explaining, of walking someone else through my own processes, actually refines those processes by default. It’s been incredibly helpful for me.
Teach more to learn more
I recommend everyone use this approach more often. You pass knowledge on to other people and you gain tons of knowledge for yourself. It also goes a long way in combatting imposter syndrome by getting you out of your head and showing you that you do have things that you can teach people. You can be talking to an absolute expert in the field you’re talking about and they still might gain something from it.
Learning by teaching creates a more collaborative world, one where we can all work together and combine our years of experience in different aspects of similar fields to build and break some awesome stuff in awesome ways. I’ve gained a lot from it, and I plan on continuing to use it wherever I can to benefit myself and others.
—
Random blog to read next: A Quick, Easy Case-Study on Open Source Intelligence – The Trump Campaign Indictments
I’m not active on Twitter anymore, for reasons I talk about in this blog post, but you can follow me on my Twitter page for new blog posts and announcements or subscribe to my newsletter!
Read the discussion