Published: 15 June 2025
💡 All opinions expressed in these writings are mine only and are not representative of my employers' views.
Dear students,
It was a great honour to teach a wonderful batch of students from the Diploma of Game Development & Technology at Nanyang Polytechnic from Aug 2023 to Jul 2025. Starting this Aug, I will be leaving my teaching role to pursue a Ph.D. in Computer Science at the National University of Singapore.
The time I had with all of you are short but precious. Just as I've watched you grow in the past 2 years, you've watched me grow too as a new lecturer. It feels like there is still many more things to say to you, and to celebrate every little growth with you.
So, here is a brain dump of all the things that are still unsaid. My goal here is to give advice that would hopefully help you in your long-term personal growth. I am not going to waste this chance on giving short-term advice like "How to get an A this semester". I am going to talk about things that you could refer to even 10 - 20 years down the line.
There is only one chance for a parting message, so I better make this stick.
Read the error message!
So many young engineers among you have yet to learn how to read error messages. As it turns out, error mesasges don't just tell you that "there is a problem"... many times, it also tells you the solution to the problem!

Figure 1. Error messages from a Unity project. The solution to this error is clearly spelt out! What do you think it is?
Be comfortable with being uncomfortable
A common complaint I heard is that the C++ "fameworks" provided by lecturers are "broken". Maybe it contains memory leaks. Maybe code were structured in a way that you found messy. But did you realize that they are often small code "templates" rather than full-blown "frameworks"? What I mean is - the codebase is light, they are open for reading and modification, and the "bugs" are often easy to fix!
But that is not the point I am addressing. What I meant to point out is the spirit of fear that paralyzes us when we encounter errors, and the lack of a sense of self-agency when we are faced with obstacles.
As engineers, we are going to spend a majority of our career fixing things! Or we will have to spend time independently learning and researching on new emerging technologies. We need to get into the mindset of "since we are always going to be uncomfortable, might as well be comfortable with being uncomfortable"!
Never blame others

Figure 2: xkcd 1761 "Blame"
And that brings me to a related point. When we are struck by the spirit of fear and inaction, what would we often tend to do first? Blame others!
"It's the framework!" "It's the computer!" "It's the network!"
These may be true sometimes. Let's accept that there are always things that may happen outside of your control. But in all situations, there are also always things that are within control, and hence that means you would always bear some responsibility, especially with regards to how you respond to and rectify the tricky situation.
Ok... but still... the memory leak in *that* framework...
Sure, let's talk about that! As these code templates tend to be small, it should be easy to locate the problem if you understood how memory leaks occur (as we should have learnt from the introductory programming modules, and that one on "Computing Systems").
Note that in this discussion, we are not going into RAII, Rule of Zero, Double-Delete, Dangling Pointers, and other modern C++ practices. I am approaching this topic following what my students are familiar with at their current stage of learning.
We should know by now that any dynamically allocated memory (think whenever the "new" keyword is used) needs to be manually freed by the programmer. If this memory stops being referenced but also isn't freed (aka it has been "forgotten") that memory will not be deallocated as long as the program lives.
Understanding this, we can bravely dive into the template, and see if we are missing "delete" keywords or destructors where pointers are used. There is no need to wait for the lecturers to point that out and fix the bug for you!
And if you are writing a small game/program (which is definitely the case for any school assignments), and if the memory leak happens very early... it actually hints at potential problems with your own code! Are you perhaps carelessly instantiating multiple new objects into the heap, and on every single call of the update function? Have you thought of reusing objects or examined whether new objects even need to be frequently instantiated in the first place?
Get better at locating bugs
You know something is broken. But you're panicking because you aren't sure what is wrong. Well, the first thing to do is to reproduce the bug and locate the offending code snippet.
- Reproduce the problem in isolation (i.e. Remove all irrelevant moving parts, leaving only the portion of the program that is relevant to reproducing the problem)
- Bisect whether it is a problem with your code or its with others' code. Be familiar with your IDE's debugger/profiler and the practice of printf debugging.
- Report upstream once you are confident it isn't on your side, and...
- Just fix the problem if you can do it yourself
Break down problems into smaller parts
There is a class of recursive algorithms called "Divide and Conquer". Not every problem requires a divide and conquer solution, but we want to use that idea in our approach to solving problems.
We always want to ask ourselves, what is the next smallest problem I can solve? And when you have arrived at the smallest principal part of the problem (perhaps representable as a small object class or function?), it has now become a much more manageable task!
This is one of the methods of "computational thinking", and it's useful not just in software engineering and computer science, but also a good technique for solving many other kinds of general problems.
Reinvent the wheel!

Figure 3: Comic by Nate Beeler
Always reinvent the wheel when you want to learn more about something or when you want to innovate. Write your own game engine! Write your own compiler! Experiment and innovate! If everyone is satisfied with the first stone wheel mankind has created, we wouldn't get all the different kinds of wheels - or even "cogwheels" (aka. "gears") like spur gears, bevel gears, worm gears, and others that are so essential for civilization!
The best programmers that I have identified out of my students tend to be those who are curious about implementation details and enjoys re-writing the lecturers' frameworks.
But also don't reinvent the wheel
... if you are delivering something production-ready under set deadlines (e.g., for school assignments).
Unfortunately, the "best programmers" among you also tend to be "not-so-good engineers" - they fail to scope their projects and prioritize their tasks, and chose to spend time diving into implementation details than to fulfil assignment requirements.
If there is a widely-adopted off-the-shelf solution that is stable and suited for the task, use it!
Math is very important to your work
You really need to have a good foundation in math in order to be an effective and confident game programmer. If you've done your Final Year Project (FYP), you would know that when I hold consultations with students - and they are all working on deeply technical and challenging projects - I always need to scribble some math or numbers on some kind of scratch pad or whiteboard!

Figure 4. Looks like a good scene prop for a horror game. Blood scribbles on wall. Also, no confidential material is in this screenshot - as if anyone could decipher this spaghetti!
Math has always been, and will always be, a heavy part of game development. Too many people think it isn't. But it really is. You have to recognize this, and get better at math.
And instead of just game development, math is important to computer science in general too. Look at data compression, algorithmic complexity, cryptography, machine learning...
🤓 Math is wonderful when it works! So please don't dread it.
How to learn in the age of ChatGPT, and why bother?
Here is a very common question I always receive from some of you - "What should I do to get an A (or any grade, for the matter) for my assignment?"
This is the same group of students who will likely rely heavily on ChatGPT to complete their assignments - Gotcha, haven't I? 😉

Figure 5: The vibe-coding dream...
According to research, when you are distracted by short-term goals (for e.g., getting certain grades by certain deadlines), you would likely be pressured to use ChatGPT in a way that leads to:
- an increased tendency to procrastinate
- an overall decline in academic performance
- and an eerie side effect of increased memory loss!
Don't get me wrong about using AI. In fact, I believe AI can help you in your learning if you use it in a way that helps you grow as a programmer in the long term! If I am watching a student use ChatGPT in his schoolwork, I will watch out for certain good practices like:
- Are you asking for clarifications on specific concepts, instead of simply asking "Please show me the code" for everything?
- Are you frequently refreshing the chat session to keep ChatGPT focused on specific subjects, instead of simply going on long conversations about many different things?
- Are you truly reading the generated code and actively looking for inaccuracies before pasting code into your editor?
- Are you curious about ChatGPT's reasoning process (e.g., using Chain-of-Thought prompting, like "please think in steps")?
- Are you asking ChatGPT to search the web (most chat agents now implement the web-search feature) and do you click into the sources?
But how should I convince you to follow these practices when it's much easier to just copy-&-paste? Well first, you should have realized that for certain types of task (for e.g., implementing client requirements for Final Year Project, or fulfilling creative-coding tasks in the Game Physics assignments), ChatGPT hasn't been very effective in generating fool-proof, context-aware code. In fact, it often takes more time & effort to explain to ChatGPT the full context of your project and its codebase, than to simply code things out yourself (provided that you don't reach the limit of the context window!).

Figure 5: ... and the vibe-coding reality
You can imagine that, in the near future where AI is heavily adopted in our work and lives, real value-adding programming work would be the kind that AI would fall short. Hence, focusing on the long-term goal of strengthening your programming fundamentals is key. It is more important than simply chasing grades!!
Learn to communicate abstract concepts concisely
This is such an important skill! So often I have seen junior programmers pushing out complex programs, but failing to explain what it is even doing.
Learning to explain your engineering ideas in as little words as possible is all about exhibiting this very important trait that distinguishes senior programmers from more junior ones - thought clarity.
Being able to distill abstract concepts into digestable bites is a sign of a sharp mind. Exhibiting this skill shows that:
- you have a strong ability to organize
- you have truly understood those abstract concepts
- you will be a good mentor (or a teacher?) to your juniors
That's why leetcode-style interviews often requires you to think-out-loud. Not doing so is always an immediate-failure in these interviews. More important than getting the correct answer, these interviews are about testing your ability to sieve out business requirements, think in steps, organize your thoughts, and understand abstract concepts.
Companies that simply throw you leetcode questions to be completed in 45 minutes like you're sitting for an exam - they don't know what they are doing. I often fail these so-called "interviews" myself (too bad for them!).
Understand the Dunning-Kruger Effect

Somehow, programmers are a prideful bunch. Some of them who think that they are competent, think they are always right, and the rest lacking in their logical faculties. They think the technical skills they exhibit now (or for you, your GPA) is the best measure of their worth. They are condescending towards their peers (or even teachers - which is really unwise).
If you have not already heard about this before, let me introduce you to the "Dunning-Kruger Effect". It is a cognitive bias in which people with limited competence in a particular domain often overestimate their abilities.
Remember this - the smartest people I have met are kind, genuine, intellectually honest and humble. Learn from them and be like them!
Why you procrastinate
My theory is that you are actually just bored. However, instead of occupying yourself with meaningful, "high-effort" tasks, you gravitate towards empty, "low-effort" tasks.
I mean, the phone is just there, and you can easily occupy yourself by doom-scrolling on Tik Tok or YouTube, instead of going to your desk, turn on your PC, bring up your Visual Studio solution for your Gameplay Programming assignment, and get reminded that you still have 397 red squigglies to resolve (technical debt) before you can move on with work.
I do not understand what I do. For what I want to do, I do not do. But what I hate, I do.
- Paul of Tarsus, written in the Book of Romans between AD 56 and 58
You procrastinate because you are bored. You choose to procrastinate because it is easy to get instant gratification as compared to working on assignments. That is why so many young people are hooked onto:
- Pornography
- Ultra-short-form social media content
- Predatory video game mechanics (e.g., gacha)
- etc...
We are a society intoxicated by dopamine. At the end of each dopamine rush, we feel empty insde. This might explain the growing number of people with short attention spans. That growing sense of emptiness also leads to more of you being diagnosed with anxiety disorder or depression.
You are addicted to procrastination.
💡 How game design is found in procrastination
As game design students, it should be easy for you to spot signs that your attention is being monetized in exchange for your mental health. There are actually common patterns of addictive gameplay loops, applied even outside of video games!
Think of it as a cycle of: Do → Get Feedback → Get Reward → Repeat. See if you can find these elements of addictive gameplay loops in your procrastination habit:
- Easy to start, and easy to resume
- Focused on short-term goals
- Constantly providing feedback
To be honest, I cannot sufficiently advice on how to break a habit / addictions. For that, you would have to look for the school counsellors or a professional therapist. But there is one common advice I heard, and that is to surround yourself with people. Seek out meaningful conversations with friends and families. Share with them your plan to fight procrastination and let them keep you accountable on staying away from the habit.
It's not about how good you are now. It's about when you stop learning.
Let me tell you my personal history. I was never a brilliant student. I consistently scored Bs and Cs. My university "GPA" (if scored against a total score of "4") is only somewhere more than a "2". That was way, way lower than what was required to be admitted into a Ph.D. programme.
However, where others stopped learning, I continued even after graduation. Who says learning only happens in school? I started my business, worked on side projects, and learnt about game design and programming through observation and practice.
The focus here is just-in-time learning - i.e. constantly working on something that solves real-world problems, and learn just enough and maybe slightly more to accomplish it.
Working on side projects meant I was constantly learning even after working hours. Eventually, I was even trusted to lead engineering teams in the places I worked for. And with enough time and experience, I finally felt ready to apply for NUS' Ph.D. programme.
So to those students who feel they are not "up to standard", having received lower than expected GPAs or even failed subjects before - please do not give up! There is no need to focus too much on your GPAs now, or how much time you are taking. Focus on your long-term growth instead of short term goals. Believe it or not - hard work is a timeless virtue. It still matters even to this day and age.
And to my better performing students - don't stop learning even after you graduate. Keep learning, for others could still catch up to you one day. Your success now doesn't necessarily translate to success later in life.
Phew, thank you for reading! This is indeed a brain dump. I didn't realise I actually had this much things to say. But if there's anything more, I'll leave it till the next time we meet.
Or you may watch this space for future content, and subscribe to the RSS feed.
Catch up soon 😉