The development of video games can be seen through both technological and creative aspects. Since the technological aspect of game development is closely linked to the creative aspect, we can freely say that game programming is a world of its own. The gaming industry provides opportunities for experts to develop in various technology fields, offering a plethora of career paths. In this context, the gaming industry brings together Engineers and experts from different backgrounds, with diverse sets of skills that they have often acquired in other industries. What is interesting and characteristic of the gaming industry – all these roles are often highly interconnected in their daily work.
Video games are software products, so I believe it’s important to address the following questions: how does the development of such software differ from the development of other types of software products? Do all general rules and principles of software development apply here? What roles exist? What technologies are used? What is needed to start working in the video game industry? I attempt to answer these questions in this text, but first, for context, I will present my journey to becoming a Software Engineer in the gaming industry.
I am not among those who knew in advance that they would be doing this job. In college, I focused intensively on electronics, hardware and embedded software, followed by computer vision, image processing algorithms, as well as music and audio systems. However, college allowed me to touch upon classical software engineering through elective courses, which later became the main interest in my career. Working in the consumer electronics industry as a software engineer, I developed my skills in developing applications, systems and driver software. I spent most of my career developing middleware for applications on smart TV devices. Today, I work at Playstudios Europe as a Game Engine Developer.
Programming in gaming
Everything that game creators envision and create – game concepts, stories, character designs, world designs, game logic and mechanics – must find software support. All of this leads to various programming directions: gameplay programming, engine programming, system programming, programming within computer graphics, server programming, AI, programming of physical and mathematical logic, network programming and database programming. One should not forget about programming tools that gaming companies often develop to improve the development process or deploy new content in a game. Such tools are used by everyone – Artists, Data Analysts, Marketing Experts and even Programmers themselves. Ensuring quality continuously is often necessary, which is why QA Engineers, who design and program tests or test environments, are also involved.
Each subgroup of programming roles is an important link in the development chain and comes with certain challenges and responsibilities. Of course, not every game development involves all of these roles, but most large companies require all of them. In the development of smaller or indie games, it’s possible to encounter situations where one person develops several things (even technically unrelated). However, all of this leads to the conclusion that it is very important for every Programmer to clearly understand where their role fits in the development process, to ensure that those who depend on them can smoothly do their part and provide a high-quality product.
When it comes to specific programming responsibilities, several important programming domains in the gaming industry can be highlighted and briefly described, although each of them requires experts from different backgrounds. These are:
What do they do?
Gameplay Programmers write code that directly impacts the player’s UX. They are responsible for implementing the interactive aspect of the game, focusing on the construction of the game itself, its mechanics and logic, game rules, progression, as well as the interaction between objects within the game. They deal with everything that the user (player) directly sees, hears, or feels during gameplay. This includes in-game controls, audio and visual effects. Every visible object in a video game goes through the code of Gameplay Programmers.
These Programmers are often also responsible for programming the game’s user interface, and in the world of mobile and any other online games, they frequently encounter meta games. These are additional gameplay contents that to some extent follow the main gameplay concept and encourage players to play the game regularly, for which Gameplay Programmers are also responsible.
What technologies do they use?
The choice of technology varies greatly from company to company, or from game to game. It is conditioned by various factors such as the type of game, game scalability, performance requirements, the game engine used, the platform on which the game runs and others. However, it can be said that a Gameplay Programmer should be familiar with all programming languages, as well as all game engines/platforms in which the game is programmed. The most common programming languages encountered in gameplay programming are C++, C#, Java, Python and Lua. However, it should be noted that Gameplay Programmers also often handle visual scripting tools that allow them to create game logic and behavior without writing code (if the game engine used allows it). Even then, knowledge of some programming language is desirable, but not completely necessary.
Who do they collaborate with?
Gameplay Programmers primarily collaborate with the people who have conceived the game or a specific game functionality they are programming – therefore with Game Designers. This collaboration is necessary for Programmers to understand exactly what needs to happen in the game and how the game progresses. They also collaborate with Artists to understand how objects and characters should behave. Gameplay Programmers must have a good understanding of the game engine that the game uses, its capabilities and limitations, so they also collaborate with Game Engine Programmers. Finally, for the optimization and improvement of their code, they collaborate extensively with QA Engineers and Technicians.
What do they do?
Not all companies decide to develop engines from scratch, however, in certain situations, it brings some advantages. Using commercially available game engines also offers certain benefits, so it’s first necessary to decide on one of these two options. Nonetheless, developing a game engine involves creating a type of framework within which the game operates and which will be heavily utilized by Gameplay Programmers. Therefore, a game engine includes the implementation of various subsystems such as a rendering engine for 2D or 3D graphics, including animation and visual effects systems, then a subsystem for audio support in the game, a subsystem for physics and object collision detection in the game, as well as various subsystems responsible for purely technical matters unrelated to the game concept, like networking, memory management, script interpretation, AI, payment subsystems, game purchasing and monetization, marketing support systems, loyalty program systems and others. Engines often directly integrate 3rd party software in the form of libraries and other frameworks to enrich functionality or use already-made solutions. Additionally, game engines often offer standalone tool packages used by Artists, Animators, Designers and Gameplay Programmers, so programming these tools is also often the responsibility of Game Engine Programmers.
What technologies do they use?
The majority of commercially available game engines use C++ as the primary programming language. However, there are those written in languages such as C#, Java and even JavaScript (for some web-based games), or C (for some older PC games). Graphic Engine Developers encounter various graphics libraries – OpenGL, Vulkan, Metal, WebGL and others.
The technologies used by Game Engine Programmers largely depend on the platforms for which the game engine is intended. Game Engine Programmers are also tasked with porting the game to different platforms, so skills relying on Android or iOS programming, for example, are very useful for mobile gaming.
Analogously, for games executed on PC, familiarity with Windows, Linux, or MacOS operating systems is desirable. Porting games to consoles also requires some of these skills, including elements of embedded programming when adding support for different controllers, joysticks and other input/output devices. This leads to the desirable knowledge of languages such as C, Java, Kotlin, ObjectiveC, Swift and others.
Engine Programmers generally also understand various build systems, as well as mechanisms for integrating different ready-made software solutions. AI is increasingly present in gaming, so Engine Programmers may program or use such solutions.
Considering that Game Engine Programmers are largely concerned with game performance and ensuring the stability of games using a given game engine, they are also tasked with tracking various metrics and analytics to improve software quality. It’s important to note that not all game engines include all the mentioned technologies, languages and functionalities. Also, very often, multiple games from one studio use the same game engine, so Game Engine Programmers strive to develop as generic an engine as possible, with as many features as possible.
Who do they collaborate with?
Depending on their responsibilities and the comprehensiveness of the engine, Engine Programmers collaborate with other technical experts such as Server Programmers, Data Analysts, DevOps Engineers and, as already mentioned, Gameplay Programmers. Additionally, those who use tools within the game engine often have requirements for Engine Programmers. Finally, Game Engine teams typically include QA Engineers and Technicians with whom they collaborate daily.
What are they doing?
Many games today use the Internet in various ways. One of the most common uses of the Internet in video games is enabling support for multiplayer gaming. MMOG (Massively Multiplayer Online Gaming) servers are crucial components of online games that support a large number of players playing the game simultaneously and together.
In many games today, content changes dynamically. For example, adding new levels, characters, game items and so on. Games also often include various offers for in-game purchases through the user interface. Some games support cross-platform play, meaning they can be played on different devices without interrupting the game’s progress. In mobile games, a portion of the game’s logic is often executed on the server instead of on the user’s device. All of this falls under the responsibility of Server Programmers, along with analytics and telemetry, which are essential parts of any major game today.
Server Programmers develop tools for dynamic content distribution and closely collaborate with Engine Programmers because server code often communicates with the engine code. They frequently collaborate with Release Managers and many other roles. Server Programmers integrate 3rd party solutions into their code, but they also design and implement certain systems and microservices from scratch according to the needs of the game or engine.
What technologies do they use?
Like with other roles, the technologies depend on the specific environment and project requirements, but most commonly, these are programming languages such as Java, Python, C++ and C#. Additionally, Server Programmers often rely on cloud services such as AWS, Azure, GCP and others. Various databases are stored on the server side, making SQL an essential technology for Server Programmers. Server Programmers typically have a good understanding of various network communication protocols.
Challenges
All mentioned programming roles, although different, support and adhere to the basic concepts and principles of programming. The theory and principles of software architecture apply in all these segments, so it can be said that in that regard, game programming doesn’t differ much from other branches of programming.
Also, all Programmers use universal and conventional tools during coding, each in their specific development environment, which is no different from programming in other branches of the software industry. However, there is an impression that game programming still presents certain challenges that don’t exist in other spheres, making this industry exceptionally interesting and dynamic.
Firstly, the unpredictability of how users will play the game and on which devices (in the case of PC and mobile games), leading to the complexity of testing, is one of the biggest challenges faced by developers in the gaming industry. Another visible challenge is the dependency of one team on another, making it very difficult to evenly distribute the scope of a project among teams, sometimes leading to blocking, waiting, or extending the project.
Limitations dictated by hardware, operating system versions, versions of 3rd party software, server capacity and the like, are just some of the challenges to overcome. In certain cases (not uncommon), certain games or new game features are developed while the game is in production. This often entails changes to already tested or stable software that is in production.
Software systems in games are often very large. Designing such software, or devising architecture before implementation, is a particular challenge. The range of problems that any game Programmer encounters is very wide – that’s not necessarily a problem, but also a great opportunity to improve programming skills.
What does it take to become a game Programmer?
Although there is often a belief that specific knowledge of game development processes is necessary for programming in the gaming industry, it’s not mandatory. To become a Programmer in the gaming industry, one needs to possess only basic skills and interests related to it, depending on the type of programming they would like to pursue.
This text, among other things, aims to encourage people who would like to test themselves in the gaming industry without prior experience in game programming. There are no barriers to entry if one’s domain of interest aligns with any of the aforementioned. The industry is structured in a way that anyone who enters it learns very quickly, so unlike other programming industries, Programmers usually feel like they have several years of experience after just one year.
What do you gain from working in the gaming industry? Firstly, the opportunity for rapid development of programming skills. The reason for this is the large software systems, the wide variety of technologies used, but also the constant communication and interaction with Programmers of different skills and responsibilities, as well as the dynamism of the job itself. The industry and the gaming market are developing rapidly, which entails encountering new and modern technologies. The market demands new features, so daily encounters with various innovations are inevitable. And most importantly, the gaming industry will surely provide you with a lot of fun 🙂