The game programmer is an essential part of the game development team, bringing the vision of the artists and designers to life. In this section you'll find the answers to the most common questions we are asked about game programming, as well as a list of suggested reading materials.
Start here: GameDev.net. If you know nothing to very little about programming or game programming, then visit this link. GameDev.net has provided a great beginning reference for individuals who want to get into the business of programming games. It answers many basic questions about where to start and how to do it.
While a college education is not essential, itâ??s rare to find any new programmers in the industry who donâ??t have a higher educational degree somewhere in their background.
Why is that? Well, math is DAMNED important these days! You will also find programmers a lot more interested in reading research papers and having deep discussions about applied physics. Luckily, there are lots of good books out there to keep you on track or to brush up your skills.
So which programming languages do you need to learn? You gotta know C and C++. There also is still a lot of assembly language for console programmers. Java is working its way in, and Visual Basic is a simple language to program basic tools. There are tons of great commercial compilers available, as well as several free C compilers available on the net. At Shiny, we mostly use Microsoft's Visual C++ Compiler.
There are books appearing just about every month now on how to make 3D games or write fast 3D code. You are going to have to focus on C or C++ from now on and use a good compiler. Some "Learn to program C++" books actually come with free copies of the Microsoft compiler. The trick is to buy the newest books, so check the publishing date. Also, stay current with the latest version of Direct X.
For a good list of possible books to buy, check out my book recommendations below.
The way to get your foot in the door with a video game company is to make a demo that looks really great and interesting. A gaming company wants you prove that you can carry through with a project and polish it off. Demo games are a great way to demonstrate this to a company. That means you will need to find an artist and an animator to help you.
The good news is, there are already several communities on the Internet where finding like-minded team members to create a great demo is fairly easy.
I tend to keep an eye on the developers that are winning competitions, and yes, we have hired demo coders at Shiny.
For some 3rd party ideas, read this article: How Do I Make Games?: A Path to Game Development. This article provides a starting point for building traditional demos and a good learning roadmap for game development. It points out that you should start small and move up. Do not try to make the next great First Person Shooter, but program a small Tetris clone and build from there.
Remember one thing though -- programming takes a LIFETIME to master, so hang in there. Grey hair or even baldness is a normal thing in this business.
Remember, that you probably wonâ??t get your first job as the lead programmer on any project. Expect to make tools, editors and stuff like installation programs or interface coding. Keep your eyes and ears open, and learn from who ever is willing to show you stuff! My first programming job was for $5,000 a year, but I got to learn from some REALLY talented people. I doubled my salary EVERY year.
Like every business, it's often not about WHAT you know, it's who you know. So if you get the chance to go to trade shows or hang out with professional game developers, you should seize it. You can learn a lot from them and also they are a great pipeline into real jobs.
Either way, make a great demo and don't shop it around until it's looking great! Be your own worst critic. Don't leave it up to the head of development of your FAVORITE video game company to tell you that your stuff sucks, ESPECIALLY if you kinda already knew it could use some work. SO BE PATIENT!
Be specific. We look for people who specialize in a certain area, but have secondary talents, too. There are several different types of programming positions that need different skills. Look through each type of programming role and see which one interests or best describes you. Honestly assess your skills and apply for the positions that are right for you. If you are good enough, the hiring company will give you a chance to expand your skills once you have proven yourself.
The different programmer positions presented here are not necessarily separate in every organization. Consider the different programmers as roles rather than positions. A programmer will often take on several different roles in the company. Therefore, you many find that a senior programmer often works on the game engine, builds the tools and develops artificial intelligence.
A Lead Programmer generally has at least five years of experience in the industry and has had his hand in most, if not all, of the different aspects of programming games. The Lead Programmer is expected to be an expert in one or more of the following areas: artificial intelligence, 3D Rendering, 3D animation, 3D math, physics, multiplayer, or audio.
The Lead Programmer is partially a manager, and partially a programmer. He will lead the programming team in deciding analysis and design issues, what technologies to use (i.e. using Direct3D vs. OpenGL), and decide what work to give to different members of the programming team. He must have the capability to fill in and code various parts of the game and help out other members of the team as needed. He also works closely with the other leads on the art, design and production teams and helps develop schedules and determine milestones. The Lead Programmer not only has to write complicated code, but he has to know how to work on and lead a team.
An Engine Programmer helps design and construct the base or the engine on which the game will run. He develops the really low-level programming and optimization behind the graphics, rendering, and base functionality behind the engine. For most gaming platforms, an Engine Programmer needs a solid understanding of C/C++, possibly Assembly, mathematical concepts, graphics, collision detection, object oriented programming, and database management. Generally, the Engine Programmer has a very solid understanding of DirectX, 3D concepts, and physics and the ability to implement them into a game. Most of them are experienced and have worked in different roles on teams with published titles.
A Tools Programmer often helps in writing the engine and constructs tools to help the artists and game designers interface with it. He writes the scripting tools that allow the designers to specify actions for the computer controlled characters; he designs plug-ins for graphics software to help artists integrate textures and backgrounds into the game; and he creates map and level editors for level designers. By creating these tools, The less technical members of the team can turn their game ideas into computer code and creations.
A Tools Programmer needs to have a strong understanding of the game engine, good knowledge of Windows Programming (Microsoft Foundation Classes (MFC) or Win32s), good communication, and knowledge of user interface design. A Tools Programmer must document his tools to make them easy for designers and artists to understand and utilize. The better the tools, the faster designers and artists can add their creations to the game, and the sooner the game is published.
Multiplayer Networking Programmers will definitely have a place in future games, especially with the advent of the Internet. Most PC games do not ship anymore without a multiplayer component and consoles are quickly becoming network compatible. Network Programmers must know their field solidly as it can be a very difficult type of programming due to the number of unforeseen problems. Therefore, if you want to become a Multiplayer Networking Programmer, you must understand how to set up a client and server architecture, develop security, write code using basic network protocols (e.g. TCP/IP or UDP), concurrency, multi-threaded code, synchronization, DirectPlay (the Direct X interface to networking), and possibly Winsock. A Network Programmer must also have an understanding of Database management and administration if his company provides any sort of massive multi-player service on which to play the game (e.g. Battlenet, Everquest).
An Artificial Intelligence (AI) Programmer gives the computer apparent intelligence and codes the non-player entities of a game. AI is a heavily researched and broad topic. It branches into the areas of Robotics, Biology and Psychology. A beginning AI programmer must study basic algorithms for games and concepts behind AI, such as path finding (like A*), patterns, and decision trees. When he understand those concepts, he can move on to more advanced AI concepts and research the buzz behind buzz words like Deterministic Automata, Finite State Machines, Neural Networks, Genetic Algorithms, Fuzzy State Logic, and A-Life. While it is important to understand these concepts, an AI programmer must also be able to code and implement these ideas, which is not always an easy task. Check out these links for a broad array of different sites that cover this topic.
The Graphics/Special Effects & Interface Programmer is a mix between a programmer and an artist. With 3D games becoming the norm, A Graphics Programmer must have a wide gamut of programming knowledge covering 3D graphics--making math essential to his role. The Graphics Programmer must know the physics in creating particle engines, skinning 3D models, and importing files from 3D animation programs. However, a Graphics programmer must also have an eye for art and be able to implement realistic and fascinating particle effects (like fire and electricity). He must have also have knowledge of Human Computer Interaction--to help design user interfaces and menus that are intuitive, eye pleasing and easy to navigate. On top of all that, he must be an optimization wizard and figure out how to get all this information to display in real time.
Generally, a Graphics Programmer is not born designing algorithms to implement quaternions and pixel shading. He learns to program simple animation and effects using 2D technology, then moves on to Direct3D or OpenGL, or some other 3D graphics API. Most books approach the concept slowly and don't except the programmer to understand the information implicitly. It takes time.
An Audio Programmer needs to know how to effectively access the sound card, load different sound formats, and program music for the game. Like everything else in games, sound is becoming more complicated and realistic at the same time making his job more complex. Designers are beginning to use sound to enhance gameplay through interactivity. For example, many games are tying artificial intelligence into the sound design by giving the computer controlled characters a sense of "hearing." This requires an Audio Programmer to have a solid knowledge of how sounds work, (interference, travel distance, blocking) how to make it work with the newer 3D sound cards.
The Audio Programmer must also take care of implementing music into the game, which is not easy. With the introduction of MIDI and the adaptation of the Downloadable Sound Standard (DLS), better music can be added to games for very little overhead. Like any programmer, an Audio Programmer needs to be aware of this changing technology and how to implement it.
Many companies design in house scripting languages as a tool for their games to give an easier interface for the designers to program events, decisions, and actions taken by the computer run characters. That is where the Scripted Gameplay Programmer comes into play (also known as a technical designer). A Scripted Gameplay Programmer needs to understand the basics of coding, so he can script motivations for antagonists, responses to the presence of player characters, and create complex levels.
With the large variety of games, the existence of a Scripted Gameplay Programmer usually depends the type of game. If the game is a racing game, most likely, a company will only need a level designer to design the tracks and the AI Programmer will program the artificial intelligence for the cars. However, for role-playing games, a Scripted Gameplay Programmer is very important. There could be numerous different encounters that have varying levels of difficulty and complexity, requiring many different scripts. Generally a good place to start as a script programmer is read about the different types of technical designers and level designers.
Learn scripts from games that provide open source to their scripts and see if you can create some complex scripts for the game. Learn to level design and design a few levels for a 3D game. If nothing else, it's good for your portfolio. Also, spend time learning how scripting engines are built and learn other programming languages that are used as scripts.
A Junior/Entry-Level/Intern Programmer is most likely where a programmer new to the video game industry will start. To be an Entry-Level Programmer, the first and foremost requirement of any company is that you LOVE to play games. If you do not have a passion for what you are doing, then it is unlikely that you will succeed (as in most things in life).
A Entry-Level Programmer usually has a degree in computer science and has developed some programs on his own. To get a job as an Entry-Level Programmer, you must develop game programs on the side and demonstrate your talent, ability to code, and motivation to finish projects. This is a good position to have when you are young and single. You can afford to take the low salary, and grow within the company.
An Entry-Level Programmer usually adds in small elements to the game and learns the basic tools and concepts behind game programming. It may not be the most glamorous job, but it is a great way to get your foot in the door.
Provide a list of the games and tools you're most proud of creating, and provide copies, if possible (especially if the game is a homebrew project, or something hard to find). Detail in your resume exactly what you did on the project, and what language you programmed in.
These are the top three sites I would recommend visiting. They have a wealth of information on game development, and a lot of the above links come directly from these sites.