A Game Developer and CG Spectrum's Mentor Firas Hosn explained the nuances of coding in Unreal Engine, talked about being a teacher, and gave an important piece of advice to aspiring programmers.
My name is Firas Hosn, I'm a Senior AI Programmer at Splash Damage and Department Head of Game Programming at CG Spectrum. I studied computer science at Ryerson University in Toronto and got into game development right after graduating. I spent a couple of years at a small Indie studio, Silicon Knights, before landing at Ubisoft. There I spent 9 years and got a chance to work on all of the major franchises, Far Cry, Assassin's Creed, and Watch Dogs.
Responsibility and Task Progression
My tasks went from simple tasks that were essentially supporting design, exposing variables, or adding new behaviors that were essentially an extension of something that already existed. These tasks tested my ability to understand existing code but didn't require any system design or refactoring. They were generally no longer than one-week tasks and don't require much planning and are considered low risk. A framework was in place and I was just putting in the grunt work. I.e. an Event system was in place and being used to drive input but perhaps a new event, throw a grenade, needed to be implemented. I could use previous examples and complete my task. I could and would also ask questions to senior developers in order to get a better understanding of the code base.
Eventually, I would go on to build systems. This is referred to as being a feature owner. Being a feature owner requires communication between different departments and also requires a lot of planning and testing. The stakes would be higher as there would be a lot of people dependent on said systems and any regressions would affect a larger amount of people than entry-level tasks that are usually more isolated.
The Game Programming Diploma
I helped put together the Game Programming Diploma by taking my career progression as an example. I wanted to make sure that students are familiar with their tools and game development terminology to start. Introducing students to all the different disciplines in game development and working towards an end product that had a core game loop. Once this is understood, you progress from a junior/associate level to a mid-level programmer. I wanted the course to reflect that.
The second half of the course starts to look at systems. A lot of tutorial videos focus on one feature, or a very simple game and leave out the most interesting parts, which is how AI and Multiplayer (from local to split-screen to online) can be supported. How are more complicated animations and states handled? How can you take a feature from prototype to polish level quality? This is currently all taught with Unreal Engine. A lot of my day-to-day tasks and things that I've learned in my years as a game developer are put into this course, including debugging tips, memory considerations, and scalability awareness.
Game Programming and Unreal Engine Coding
Game programming is like any craft. You have your tools (hardware and your development environment) and you have your objective. The better you understand your tools the better craftsperson you will be.
Game programming gives you instant feedback on your work, if you want a character to move around a map you will immediately know if it worked, and if it didn't there are ways to figure out what went wrong. This process is repeated to a point where you know exactly how to solve certain problems. New challenges will bring out new issues that can be solved using past experience and the same problem-solving train of thought. Game programming is great as you generally work with different disciplines, artists, animators, and other creatives and help them bring their work to life.
Coding in Unreal Engine requires you to have a good understanding of C++ as there is a large codebase already provided to you, luckily there is helpful documentation provided. Unreal Engine is easy to use and built-in visual scripting language makes it very easy to build prototypes without doing much coding. The best part is the same problem solving and logic can be applied to blueprints, you can create classes, functions, variables, etc. and it’s much more error-proof as you won’t have to deal with any syntax errors.
Thoughts on Unreal Engine 5
UE5 is great, it allows creators to rapidly test prototypes without much code support. As for programmers, a lot of the base classes and systems are easy to customize in order to support creating unique games. I think a lot of great work into the debugging and optimization tools.
For those who want to get into programming, I would advise understanding 'why' and not just be happy following a tutorial and having the exact result the tutorial has. Do more, stray from the tutorial path, push yourself to do more so you can really understand how the code works. There are a lot of great resources out there, but they tend to hold your hand and guide you from beginning to end. I would view learning to code the same as learning to ride a bike, tutorials and content are essentially riding a bike with training wheels on. When you are ready, work from a blank canvas and see if you can write gameplay code on your own without watching a tutorial.