1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

What to know in order to be able to do game programming?

  1. Oct 6, 2014 #1
    I just want to know what are the possible courses that one should take to have a background that you need to be able to work in the gaming industry?
  2. jcsd
  3. Oct 6, 2014 #2
    I think if you want really helpful answers you may need to narrow the field some. This has become an extremely broad field and your question as stated is like asking "How do I get in the movie business" The list of credits are similarly long in both endeavors because they each require so many different (and similar in each field) specialty elements.

    Game Design is very different from AI development is very different from audio/sound effects creations, etc etc. There are also many different approaches from large corporations to single individuals (a la Minecraft) and thankfully crowdfunding has made them viable. So please try to narrow down to what interests you most. If you're not that far into it yet, there are free raw tools, sponsored tools, commercial tools, game mod engines, and even online universities where you can "get your feet wet".
  4. Oct 6, 2014 #3
    I want to be able to work in a team that builds the foundation of the game. The gameplay, data etc. I don't really want video game design as a career but I think it would be pretty cool to join a game design team in my coop
  5. Oct 7, 2014 #4
    I'd say data structures, algorithms, graphics, AI if you're interested in that, and know your C++. Because I'm an amateur, I program my games in Java, which I found easier to get started on, but it's not so popular in the industry, except maybe Android or something. That's the basics, at least. Beyond that, I think you just have to go at it or there are some courses that deal specifically with game development. You can start simple, with side-scrollers or even text-based games. There are a lot of tutorials on the internet to show you how to do that.
  6. Oct 19, 2014 #5
    For basic game programming, I suggest simply taking intro CS courses up to courses related to Data Structures and Algorithms. Coursera offers two Algorithms course: one from Princeton and the other from Stanford. I think some other important aspects of game programming is knowing the various design patterns. I came across this article that I thought was pretty useful: http://gameprogrammingpatterns.com. Writing good algorithms is one thing, but don't forget that software engineering plays a big role in software development as well.
  7. Oct 20, 2014 #6


    User Avatar
    Science Advisor

    Hey preceptor1919.

    I used to do this so I am speaking from personal experience.

    If you want to program games you need to be prepared to learn anything and everything. Although a basic foundation of coding in a procedural language along with some standard computer science subjects like Algorithms, and Data Structures will be required - it's not enough to really do a good job.

    The thing about games and game engines is that they are really complex. Apart from all the design issues, data structures, and algorithms involved you also have a lot of API's (Application Programming Interfaces), Scripting Systems, Physics, Visualization and Rendering, and all of the other systems that facilitate the game simulation - from user interfaces, to networking systems - and the thing that makes it difficult is how things are integrated.

    The integration itself ends up making a lot of engines quite messy. It's not that the programmers aren't competent - they are. What happens though is that once you keep piling on features to engines that weren't really designed to work in a particular way, then the code gets fragmented and keeping track of everything gets more difficult. Engines are usually reworked to make everything cleaner and easier to use and maintain, but you can only do so much.

    To understand 3D you need to understand mathematics and this means geometry, linear algebra, calculus, and algebra as well. All of the spatial classification and rendering code uses all of this and if you don't have a good intuition for three dimensional geometry then you will need to develop it.

    The scripting language is becoming an essential part of making games: often you don't even need to touch the engine source code - all you need to do is learn the scripting langauge, the API, and how to use it. You can literally make very good and complicated games without touching a single line of engine code if the engine is well developed.

    Writing a game engine requires every kind of programming you can every imagine - and most complicated engines are written by teams of programmers who have many many years of experience under their belt. Everything from operating systems, to compilers, to data structures, to algorithms - and even all the way to the coding in assembler is needed at some point. If you name some area of computer science then chances are it will be in a game engine in one form or another.

    You can download a game engine source code if you want (Torque 3D is one example) - The professional engines themselves can be in excess of half a million to purchase, and professional companies do fork out the money. You don't need that of course, but it's a reminder of how complex and how much these things cost to purchase and develop.

    If you want to make a game then you can learn a good engines scripting language and go from there. If you want to understand the specifics, then you will probably need to get the source to a game engine and basically go through it step by step.
  8. Oct 20, 2014 #7
    Strictly speaking you don't need any courses. And a lot of academic course in comp sci teach you algorithms well, which is important, but the nitty gritty optimization for game programming and all the deep understanding of C and C++ and the underbelly and all they don't touch at all for the most part, and, in fact, most academic programmers get too caught up with levels upon level of OOP and other horribly slow, at the micro level, practices and it's been that way since the beginning. Although they often use pretty solid algorithms so much that is coded these days is a fat, piggish mess from hell and for all the talk about the magic of high level and auto memory managment and so on it seems like people produce even more and worse bugs than ever before when they knew more about and dealt with the depths more. Heck in the late 80s and 90s, for a while, almost all arcade type games and demos for home computers were coded by European hackers who learned stuff on their own (heck eventually the demos even became known as "eurodemos"). Most of the academic programmers from the U.S. didn't have much skills for hitting the metal or writing crazy tight code it seemed. And then you had some of the Japanese programmers doing a lot of console coding for Japanese consoles. Of course things have changed since then and much of modern gaming is too complex for a single person to handle and you don't tend to use assembler or hit the metal much anymore. However, it still pays to known how to not let the parts of OOP that bog things down occur and so on and so forth.

    Anyway some good stuff to know: everything about basic data structures and algorithms, the basic math and methods behind 3D graphics and rendering, basic linear algebra, quaternions, should have a truly deep knowledge of C and C++, where you really known what is going on at a deep level and what is slow and what is not and how memory management and so on and so forth work what the compiler might do in certain cases and so on an so forth (certain adventure type games sometimes use scripting type languages for certain things down in addition), these days it's also good to know extreme parallel GPU computing methods too, DirectX/OpenGL and such, all sort of tricks to help speed up this or that type rendering effect, how to do various types of animation and interpolation both through CPU or with GPU/HW assist, doesn't hurt at all to know the basics of mechanics in physics.

    Be prepared to be worked like a slave though if it's a big house team. In recent times I hear some reports that they tend expect lots of 7 days weeks, working during holidays, sleeping on the couch, etc. they like young people who will work like slaves like mad and then when they burn out they replace them.

    Tablet type games are the sort that a single programmer working for themselves can still write games all on their own though in a good number of cases (for Android it sadly means Java, yuck. For Apple it's better, not C/C++ sadly, but the custom Apple version of C++ is at least close enough and nicer to deal with and a bit more efficient than Java. For Windows tablets it's easy since it's just C/C++ I believe?). Things like Call of Duty are just so gigantic that it would takes insanely long for one person to do the coding alone and then you still need all the 3D models and graphics and sounds and animations and.... it's just mostly beyond a single person these days for that sort of stuff. Although it's not impossible to make PC type games all on your own even still.

    You can take course for the basics of C/C++/data structures+algorithms/linear algebra/3D graphics or learn some of most of that on your own.
    Last edited: Oct 20, 2014
  9. Oct 20, 2014 #8
    Thank you for all of your responses. The reason I'm asking is because I am currently in associate of com sci degree and I want to switch to engineering once I finish this degree(so I don't want to become too theoretical). But before I go to engineering, I would love to try working(even if it's just internship or coop) for a gaming studio here in vancouver(or anywhere actually, but my main target is EA here and Ubisoft in toronto) to do game programming.

    Right now I am learning Java and will try to learn other languages once I know the basics of programming.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook