Sign in to follow this  

where to start as a game programmer

This topic is 1179 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

+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...

Edited by Gian-Reto

Share this post


Link to post
Share on other sites

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.

Edited by BHXSpecter

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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/). Edited by Karsten_

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Hell, I still see modern books using c style strings.


True but when you need C-style strings (i.e interfacing with a C library like OpenGL (yes, technically a specification)), you really need them. I feel that books for Java and C# should cover this stuff better than they do. Software nowadays can rarely live entirely inside the VM.

Agreed though that C++ is a complex and ugly beast just like the majority of software problems ;) Edited by Karsten_

Share this post


Link to post
Share on other sites

 

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/).

 

 

I am not saying you will not find automatic memory management systems for C++.... all I am saying is that in vanilla C++, you are expected to this on your own. While Java and C# already come with (arguably maybe not the best) garbage collectors as a standart. 

 

Altough I have to say I am not 100% up to date on C++ as I only use it when I need to.... and apart from University that was only 2 years when I used an engine that was written for C++.

So I am in no position to argue with anyone about what C++ provides as default nowadays :)

Share this post


Link to post
Share on other sites

Hell, I still see modern books using c style strings.

I still see books written from the viewpoint that the reader should learn C before C++.

Yeah, and frankly most of it is laziness

These are nth edition books that never bother updating, just tack more and more chapters to the end. As a result, they are almost all awful for beginners.

As Karsten said, there is value in learning this stuff, but it should be treated like interop in other books, as an advanced topic and certainly not right away.

Share this post


Link to post
Share on other sites

This topic is 1179 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this