From Teaching Assistant to Software Engineer
For three semesters at NUS, I was on the other side of the classroom. Teaching CS2100 (Computer Organisation), CS2030S (Programming Methodology II), and CS2106 (Operating Systems) taught me more about software engineering than any single course ever did.
Teaching forces clarity
When a student asks "why do we need generics?", you can't hand-wave. You have to explain it in a way that clicks — and if you can't, you don't actually understand it yourself. This ruthless feedback loop is the fastest way to deepen your own knowledge.
Debugging other people's code
As a TA, I spent hours reading code I didn't write, trying to understand what the student intended vs. what they actually built. This is, coincidentally, exactly what you do in a code review at work. The pattern recognition I built grading 200+ submissions directly translates to spotting issues in pull requests.
The connection to industry
Every concept I taught showed up again in my internships:
- CS2100 — Understanding CPU pipelines and memory hierarchy helps you reason about cache-friendly data structures. At GovTech, this mattered when optimizing database access patterns.
- CS2030S — Functional programming and type safety. The discipline of writing pure functions and handling errors explicitly is exactly how we write Go services at TikTok.
- CS2106 — Processes, threads, synchronization. When you've debugged a student's deadlocked program at 2am before a deadline, production concurrency bugs feel less scary.
Would I recommend being a TA?
Absolutely. The pay is modest, the hours are real, and grading is tedious. But the depth of understanding you gain is unmatched. If you're a CS student at NUS and considering it — do it.