where to start as a game programmer

Started by
12 comments, last by Serapth 9 years, 6 months ago

K so i want to be a game programmer and just starting out. Where do i begin should i learn an engine like unity and code script or should i try to build my games from scratch with directx i am struggling to build a road map. Any suggestions would help. i plan on doing this professionally in the future and could use some tips and guidance

Advertisement

Hello there and welcome to the forum,

I think you should set the whole idea of making games out of your head for a while right now,

because unfortunately you can't start with programming games immidiately.

My advise is: Try out some programming languages and see with which one you feel the most comfortable.

Learn (and understand ofcourse) the basics of this language. Then you might can get started with making

some small games, the first one will probably be a pong clone. If you made a few of these small games and

you are confident to move on, you can start making larger games, which are probably more fun to play.

For more information and some better advice see the FAQ.

My last advice is: Don't waste your time finding the best tutorial or book, just get one, start practicing and get your hands filthy,

because that is the best way you will learn.

Good Luck,

RaoulJWZ

Hey there and welcome!

I was in the same predicament as yourself when I was younger as with many others, but luckily there are plenty of resources out there to get you started :) I had no prior programming experience when I wanted to start programming. So I am literally going by experience here with what I am about to write.

Firstly, you should know one thing. Programming is tough! It requires problem solving and mathematics. It can be hard and stressful. But it can also be enjoyable, relaxing and also rewarding :)

As what RaoulJWZ has explained, don't start off with games programming, first learn programming itself. Grab a language, learn the basics then just play and experiment. You will learn so much through trial and error. Experimenting, breaking things, looking at source code with the language you're learning. If your code doesn't work, it doesn't mean you can't program. Learn why it's broken, try something else to fix it. Lastly enjoy yourself! It's a big journey but you'll get there :)

Here's a few languages you could look into, and eventually look into game engines available:

  • Java
  • ActionScript 3.0
  • C#

I would recommend starting with either Java or ActionScript and then eventually going onto C#. I went from Java->ActionScript->C# and found the transition easy.

If you would like me to recommend a preference, I would say ActionScript. Primarily because it's an enjoyable language to start with, with already premade libraries for creating graphics and sound on screen. Other languages have libraries that can do the same, something you will learn about later with programming!

You may see online many people recommend C++ if you want to get into games programming, but honestly I tried this and I found I gave up after a matter of days. It's a difficult language to learn if you have no experience. It is true this language is used in major studios, but why make it harder for yourself. Start easy! If you want to try C++ then go for it, you may find it easier than how I experienced it :)

But remember, have fun! Experiment, practice and take your time. Don't rush into it!

Best of luck :D

ActionScript 3.0 and C# Games Programmer of 3 years.

Well, since C++ is one of the most used programming languages, why not start with it? Sure, the paradigm is a bit differente than that of Java (OOP), but you can still apply what you learn from C++ to Java and C#. The syntax is not too different. Besides, when you're starting, the most important thing is to practice your logical skills. These guys have a great tutorial on C++ for game developers (includes variable declarations, classes, pointers [used in DirectX and other low-level APIs], arrays, inheritance, polymorphism, Windows programming, etc). It is quite easy to understand following the lectures and the textbook. I learned a lot from these 2 modules.

http://www.gameinstitute.com/game-development/game-programming.php

+1 to what others said. Learn programming, from the ground up.

With your goal of becomming a game programmer (emphasis on that, as a someone that wants to learn programming as a means to an end and not to become a true programmer might get a different response from me), you should really get into the whole programming world first before concentrating on game development.

Learn the basics, learn the differences between functional programming and OOP, learn what a compiler does and differences between compiled code and script files, and just start. Any language. Doesn't matter, really.

I know a lot of people will want to burn me for this, but 90% of the core stuff in todays languages relevant to game programming is interchangeable. The Syntax might be different, but all of them know Arrays, Methods or Functions, most will allow you to develop Object oriented, and all of them will teach you these basics.

If you start out with Python before moving to C++, or start out with C++ to find out you need to branch into Java later on does not matter that much. All languages will have their specialities you will need to learn (memory management for C++ for example, not needed in managed languages like Java or C#), all are slightly different in Syntax, but almost all of them share common ancestors (C, mostly) and are therefore quite close to each other.

When you "mastered" one language (no thing like that really, you can learn new stuff about a language even after years of working with it professionally), you should be able to transfer your knowledge to a new one in a very quick fashion, only needing to look up the Syntax and the languages specialities. There are more than enough resources about "learning Java for C++ developers" on the web and in books, so really, the more languages you know, the easier it becomes to adopt to a new one.

About starting with an engine or without:

I know a lot of people will tell you start from scratch, and start with easy games, working your way up. This is a very good approach and I would also encourage you to try it out at least two or three times. Nothing will tell you how every current engine works at its heart like writing your own game loops. Makes it easier to understand later on why an engine works the way it does (which is very different from how for example business web applications are built up internally, because they have no "endless loop" at their core).

Of course it is also pretty easy to take an engine, and start writing code for it to get objects moving quickly, if you already know how to program. A lot of engines are free and have good documentation and large communities (Unity, UE4 for example), all you need else is some free or stock art 3D Models, some game idea and some time to wire things together in the engine editor and write some code. You will see stuff moving in 3D in no time (altough it will msot probably still be moving in the wrong direction, if this is your first try ;) ).

Just be aware: No engine will save you from programming. No engine will give you all the game logic you need. And with 3D Graphics and Engines come all the complications of calculating your game logic in 3D Space now.

So really, learn to program, write your first simple games, then move over to engines, if you feel ready and are sure this is the way you want to follow. Some people will keep writing their games from scratch without the help of an engine, and for simple games, I even think that is the more sensible approach. It all depends on what you want to achieve, how you learn best, and also, what sounds more fun to you.

@ NoDamnH: C++ is just as much an OOP Language as Java and C#. That is one of the main differences between C and C++, AFAIK. The real differences between Java / C# and C++ is the fact that the former are managed languages (thus garbage collected), while the latter, out of the box, is not (memory management is done by the programmer itself). Then there are pointers that Java lacks, and other differences, but C++ is OO at its heart just as much as the other languages.

Maybe I misread your statement...

C++ is a multi-paradigm language (which includes OOP) as Java and C# are multi-paradigm languages.

This was my TODO list I never got around to actually doing, but figured it may be a helpful as a path of sorts to follow. A simplified TODO list, tweaked it to add games recommended by an article on GDNet (original was just Pong, Breakout, PacMan, and Tetris):

  1. Pick a language (pick ONE and learn it well until you are comfortable with the basics before moving to step 2)
    1. C++
      1. ?Tutorials
        1. http://www.cplusplus.com/doc/tutorial/
        2. http://www.learncpp.com/
      2. Books
        1. Programming Principles and Practice Using C++ Second Edition by Bjarne Stroustrup
          • Is a book designed to help you learn to program (if you have never programmed before) using C++ as a tool. It is also the intro course book for several degrees at Texas A&M University. Not to mention it is written by Bjarne Stroustrup himself.
        2. C++ Primer Fifth Edition by Stanley B. Lippman, Josee Lajoie, Barbara E. Moo
          • The usual recommendation for Beginner C++, but that phrase is a little misleading. It isn't a book for someone who as never programmed, but rather a book for a programmer who is experienced in another language and looking to learn C++ now. It covers C++ more in-depth.
        3. The C++ Standard Library Second Edition A Tutorial and Reference by Nicolai M. Josuttis

          • ?Covers the standard library in-depth.
        4. The C++ Programming Language Fourth Edition by Bjarne Stroustrup

          • I recommend this purely as a reference book. It too is written by Bjarne Stroustrup. You can certainly read it cover to cover if you like, but it makes a better reference than a book about learning due to its technical nature.

    2. Java
      1. http://docs.oracle.com/javase/tutorial/
    3. Python
      1. https://docs.python.org/3/tutorial/index.html
    4. C#
      1. http://msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx
  2. Pick a library
    1. Allegro - http://alleg.sourceforge.net/
    2. SDL - http://libsdl.org/
    3. SFML - http://www.sfml-dev.org/
    4. PyGame - http://pygame.org/news.html
  3. Make some simple 2D games (screenshots for clarification)
    1. Pong - http://www.wallpapermaven.com/cat/miscellaneous/download/Pong-1920x1200-31.jpg
    2. Worms/Snake - http://www.terminalstudio.com/screens/worm/big1.gif
    3. Breakout - http://www.mathworks.com/matlabcentral/fileexchange/screenshots/1604/original.jpg
    4. Missile Command - http://upload.wikimedia.org/wikipedia/en/8/86/A5200_Missile_Command.png
    5. Space Invaders - http://p1cdn01.thewrap.com/images/2014/07/space-invaders-618x400.png
    6. Asteroids - http://www.notmartha.org/images/other/2012apr/asteroids.jpg
    7. Tetris - http://kosmixmedia.com/static/031fa2e4385dfaf31c3b56135cdc3478.png
    8. Pac-man - http://www.arcade-museum.com/images/118/118124214343.png
    9. Ikari Warriors - http://www.arcade-museum.com/images/118/1181242122380.png
    10. Super Mario Bros - http://schmoesknow.com/wp-content/uploads/2010/11/7-Super-Mario-Bros-.png
    11. <insert your original game here>
    12. <insert your original game here>
    13. <insert your original game here>
    14. <insert your original game here>
  4. Learn DirectX or OpenGL
  5. Make simple 3D games (maybe even 3D versions of the list in item 3)
  6. Learn Game Engines
    1. Torque - http://garagegames.com/
    2. Unity - http://unity3d.com/
    3. Unreal Development Kit - https://www.unrealengine.com/products/udk/
  7. Start playing with making your own engine

[EDIT] Added my usually recommended books to the C++ section. Python's and Java's documentation and tutorial is well detailed and doesn't need a book. I don't know of any C# or Lua books at this time so I must defer to the links for them at this time.

I know C++ should be a number one and it's a perfect solution but I would exclude Java and suggests starting with it despite everything.

C++ is insanely complex compared to Java, C#, and Python. C++ could have been number four, it doesn't matter what the order is as it is just a list I created years ago as a path for me. The only new things that I did for this list was I added the usual books I recommend for learning C++ and updated the list of games according to the Getting started article on GDNet. As I stated, Java, Python, and C# have decent documentation and tutorials to where there is really no need for a book on the languages, but C++ is so complex that you should consider getting books by acknowledged sources to learn the language.

Java / C# and C++ is the fact that the former are managed languages (thus garbage collected), while the latter, out of the box, is not (memory management is done by the programmer itself).


Like Objective-C, C++ also has an automatic memory management system called RAII that allows developers to avoid manual memory management (unless they need it). What you might have been referring to is C which does require manual memory management (Though there are a few garbage collectors available for it too (i.e Bohem's, same one that Mono / Unity uses)).

I would suggest learning C++ first (because it really isnt considerably harder than others) but I certainly recommend looking at other languages whilst doing so to contrast between them and see where they may offer more or less flexibility. This will only make you a better programmer in the long run.

C++ does have some very good books that go deep into the language (because it is effectively the most used language (by proxy of C)). It is also great to be able to read a book on OpenGL and DirectX and use the same direct language that the book is inevitably using without needing managed wrappers etc.

Also, if I hadnt learned C or C++, I would have missed out on (in my opinion) the best tutorial series to have ever existed! (http://lazyfoo.net/SDL_tutorials/).
http://tinyurl.com/shewonyay - Thanks so much for those who voted on my GF's Competition Cosplay Entry for Cosplayzine. She won! I owe you all beers :)

Mutiny - Open-source C++ Unity re-implementation.
Defile of Eden 2 - FreeBSD and OpenBSD binaries of our latest game.
Technically RAII is an idiom. The memory management system would be smart pointers and stack unwinding, the usage of them would be RAII.


One of the big problems with C++, at least 2014 C++ is the way it's taught. There is so much cruft, and so many books teach you using the cruft. Hell, I still see modern books using c style strings.

This topic is closed to new replies.

Advertisement