If you learn as a student, you will always be a student. A better way to learn knowledge is to learn as a teacher.
My journey as a CS student
I had both my B.S and M.S degrees in engineering. I still remember how excited I was when I had my first programming course, and how confusing that course was. Yes, tech trends are always well marketed and exciting, but computer science major is boring: there’s no teaser, no pre-release count down, no fancy powerpoint, just blah blah blah. Normally what happens in a college classroom, is a super smart professor trying to feed you an overload of information, probably condensed from 200–300 pages readings, in 1.5 hour. It’s impossible to understand if you aren’t prepared enough before lecture, and lots of us can never be prepared enough.
Here comes the paradox: how do I learn knowledge before I know it, and how do I know what to learn if I haven’t learned that knowledge before? For me, it was until my sophomore year when I started realizing some ‘tips’: I tried to get early access to course syllabus just to know grading criteria before anyone does; used multiple professor rating systems, trying to figure out which mandatory course has the least workload; never filled more than 5 courses in one semester (cause that’s too much on my plate than I can eat); asked for past quizzes, assignments and exams from other students… I’ve been there.
My GPA didn’t increase. Worse thing is, my knowledge didn’t increase either. I still pass courses with satisfying grades, but I learn so little that I keep worrying about what my grades will look like in next semester, when knowledge system turns more complicated.
Learn a new study method
Few months ago I joined Microsoft TEALS program as an AP Computer Science teacher. Since then, I started to fill two extra hours every Tuesday and Wednesday in my routine, trying to prepare lectures and practice delivering key programming concepts in my classroom.
During my time in TEALS, I have to lead classes, go through exercises, answer questions and provide feedback. It’s fun but also challenging. I joined the program not only because I want to finish a semester, but also want to change the way CS education is. I want to make lectures fun, and eventually make my students love learning computer science themselves.
However, a funny fact is that I learned more than any student from my own course. In order to be confident enough in class and let knowledge flow, I practiced multiple times before lecture and make sure I really understand every details about a topic I want to talk about. My goal is to explain a concept (e.g programming language, or algorithm) to a person without computer science background with no obstacle. As a result, learning as a teacher works like a charm. My understanding of what algorithm, complier, recursion, etc. never gets clearer than what I have now.
I tried to use real world examples, games and diagrams when delivering key points. For example, on an algorithm lecture, I would show students live data center video so they know that’s where billions of programs get executed. We also play a game, in which I would pretend as a robot and follow steps designed by my students to brush its teeth, to make the class understand that algorithm’s nothing but a set of instructions. In another class for loops, we analyzed repeat lines in poems and songs, saw a water cycle in nature where water evaporates in air and comes down in rain again, and kids love that way.
Then I start to think: what if I learn for work and interviews using the same way? Can I explain a leetcode question to anyone without CS background and make them understand? Soon I started to invite my parents as mock interviewers and do white-boarding to them, and till now I haven’t found any pitfall for this learning method.
The Feynman Technique
I always wonder whether there’s an existing terminology for the learning-teaching method. Last month I did some research, and found out that Richard Feynman had summarized it years ago. It has four steps:
- Learn: Where you read, memorize, practice and summarize.
- Teach: Try to explain knowledge to another person.
- Fill Gaps: If you meet problems in teaching, loop through step1–2 again to figure things out.
- Simplify: Using examples and illustrations to make concepts easier to understand.
