Teaching

Category : hku


As a teacher at the HKU, my most important job is to enable others to grow. In this day and age, with there being so many tutorials available online on just about any subject you can imagine, it’s very easy for a beginner to get overwhelmed. That’s where a teacher can be most relevant. Not just in the classes they teach, but in the conversations they have with the students. Listening to what they want to accomplish, inspiring them to discover something new, asking tough questions to make them reflect on their own process, giving critical feedback, and helping them out when they are stuck. These are things you cannot get from a tutorial online.

Courses

I teach a variety of classes to both our first and second-year students, and not just the Developers, but the Artists and Designers as well.

Processing

Their very first programming classes. We use Processing with Java for this, because you can get something visual on your screen in just a few basic lines of code. This first little success is very important for their motivation and subsequent understanding.

The classes for this course used to be mixed, but now I only teach the Aritsts. This allows me to focus on their usually different (visual) way of thinking, and put the code in that context. The subjects we cover remains the same between Artists and Developers, but for example the Artists work with images and frame-by-frame animations, whereas the Developers have to do collisions.

Unity

I think this might be the most important course of their entire education. Their first time working in a Game Engine, Unity. The classes used to be mixed here as well, with everyone getting a little bit of everything, but luckily we’ve now split the classes, of which I teach the Artists again. Because of this, I can focus on the way an Artist would use the Engine.

The Engine is the place where the entire player experience comes together. The person with a vision for how that should look and feel, is the Artist. That’s why it’s so important for them to be able to work with all the different systems in an Engine, so they can implement the art towards that vision.

This course covers half a year in their first year, during which time they learn the basics of Unity, covering particles, camera’s, materials, terrain, lighting and light baking, post-processing, animation timelines, interactive triggers, the ShaderGraph and VFX Graph, which they have to implement in a cutscene and scene transition.

Basic Maths

It’s important for developers to have at least a basic understanding of the maths they have to deal with every day. That’s why in these classes, we cover vectors, angles, basic collision, forces and friction, matrices and bit-wise operations. They then implement these principles in a simple game in C++, using the SFML framework.

Rapid Prototyping

One of the most important skills of a Game Designer, is being able to build a prototype, preferably in a Game Engine, so they can test their ideas without needing a Developer. It’s also their most important communication tool with the rest of the team, similar to sketches from an Artist.

The only way to really learn how to rapid prototype, is by doing, so in this class the students participate in a number of short Game Jams of about 5 hours, playtest their prototype, and make an iteration based on feedback. At the start of every Game Jam, I share some tips and tricks for how to write prototype code.

Developing AI

In this course, we cover the basics of building an AI system. For this, they have to implement their own version of the A* Pathfinding algorithm, and implement at least two AI Agents, using for example a Behaviour Tree or a Utility System.

C++ for Game Engines

In this short course, students need to apply their C++ skills in a new Engine, namely Godot. Due to the short nature of this course, it was sadly impossible to cover anything meaningful in Unreal, but it is a good practice to work in a different Engine for a change. This will make learning a new Engine such as Unreal at a later point easier as well. I also cover Engine Architecture during these classes, part of which is analysing open source game engines, and we automate the Build process using Python, to optimise the workflow in Godot.

Networking

Perhaps one of the most complicated subjects in development, due to the difficulty of debugging a system that needs to run on multiple machines simultaneously. Here we cover the basics of TCP/UDP connections, with Sockets and Ports, and then implement a game system on top of that, with a server and multiple clients keeping their game-state in sync, building Networked Objects and implementing Remote Procedure Calls.

During the first class of this course, I challenge the students to set up a network client that communicates my server that’s already running, send chat messages to it, and receive messages from it. All messages sent to the server are displayed on the big screen for everyone to see, so students can see the result in real-time. For those interested, I’ve published the server code, that’s written in C++ on Linux, on my Github. The students themselves use C# and Windows to connect, highlighting the fact that it doesn’t matter what language or OS you use, it’s all just streams of bytes in the end.

Supervision

Supervising might be my favourite part of being a teacher. As a supervisor of first-year all the way to fourth-year graduation students, this is where you can really help people grow. By sitting down with them, understanding their projects and what they’re trying to accomplish, guiding them in their research, inspiring them, but also to ask tough questions and make them reflect on what they’re doing, all to support them in making a better product and also for them to grow as a person.

Of course, by seeing and guiding so many different people and projects over the years, I learn a lot from them as well. New situations, challenging technology, difficult teams or clients. As a supervisor, you’re constantly adapting to the different indivisuals, teams and projects, and figuring out how best to deal with each unique situation along the way.


About Vincent Booman

Hi, my name is Vincent Booman. For me, development is not about a specific language or software, it's about what kind of impact they enable.

Follow @Feathora