A question that is very common among newbies is "What engine/language should I start with?". They are confused since they are drowned in a huge number of technologies. They have questions floating in their heads all the time. "What are the advantages of C++, comparing to C#? Why should I choose CryEngine instead of Unreal? How will I survive if I use Unity?"
You know what, it doesn't matter what you use to begin
Let me tell you a little secret, which you may probably knew:
You learn game programming by programming games.
The best way to learn something is by actually doing it, and in this case, a game. You will learn more from this than by taking any course, reading any book.
One small note: restrain your desire to make a GTA-like game all alone, simply because it's impossible and you are expecting too damn much from yourself. Start with a very simple goal, such as Pong, Tetris, Pacman, or whatever simple game that you are thinking of.
Spot the key point? You should sit down and make a game, regardless of technologies you use. Collect knowledge and experience on the go, and you will slowly create a firm and solid background for yourself.
Another note (this one is bigger): finish your game! Create decent menus, put nice sound effects, and try to handle your level transition smoothly. These kinds of stuff cause more problems than your gameplay mechanics (as a programmer who spent a year just making prototypes, I can guarantee you this) than you may think. And when these elements are ready, you may find the work of tweaking small details tired, but exciting as well.
The good news is, suddenly, when your game reaches a point of maturity, you will see yourself get leveled up too. Then you might be able to choose the specialty that you want to work in a professional game studio (check out my other post: Job positions in a game studio).
But isn't that I should add a few factors to my consideration?
I made my first game with C and Allegro (this is a 2D game framework, but I bet very few of you know about this) in my university's Linux course. The game is simple, you have a tank, and your mission is to survive as much as possible among enemy tanks which are running around randomly and trying to kill you. There are no sprites, everything is drawn on the screen by specifying colors of pixels. I modified the game based on existing source code of the book Game Programming All in One, by J. S. Harbour.
This is an example of technologies should not be a problem for a newbie, but let us take another perspective. Game programming alone is freaking hard since you have to deal with geometric and physics problems. Picking a right tool may make game development less painful for a newbie.
I might suggest a few factors that you need to take into account:
- Community: "I am a newbie" = "I have tons of questions to ask". The bigger the community using the technology is, the more likely you can find the solutions for your problems, by either searching on QA network (StackOverflow.com, I mean) or asking an industry professional.
- Simplicity: When you just started out, a complex technology may make you confused and despondent. The fewer things that you have to keep in mind at a specific moment, the more control you are with your product.
- Future opportunities: Well, let's be realistic. Many of you want to break into the game industry. Learning to use a tool that is commonly in demand is very beneficial.
- Fees: You might not want to spend a thousand bucks to purchase a premium license of a game making tool, right?
On the other hand, there also are a few things that you should not prioritize, unless you have a good reason doing so:
- Graphics quality: As I said above, you are not expected to make a GTA-like right away. Making a stunning game is very tempting. In addition, to be honest, you are a beginner who is programming games alone, without any support from a skilled art team.
- Visual programming/scripting: It might look very promising, but deep down inside there is no different with programming in traditional languages. Switching from a text-based language to a visual one is easy, but the other way is trickier.
With that being said, I compiled a list of good frameworks or engines to begin game programming:
- SDL: This is not a game framework. It provides you low-level access to input devices (keyboard, mouse, and joystick), graphics and audio calls. This is good for you to understand the overall picture of game development. If you have previous programming background, this is a very good choice to start out.
Checkout my OOP assignment at university, written in C++ and SDL
- Unity: I highly recommend this engine, because of its simplicity and tons of tutorials available. Plus, many professional studios use this engine as their main development tool.
- Unreal Engine: I do not recommend it because it has many advanced features or amazing graphics quality. I do because you will have a chance to make games with C++ - the industry standard and a professional, well-structured game engine.
- GameMaker: Another beginner-friendly game engine. It is famous for its simplicity and a big community. It uses a simple scripting language called GML, which shares many common points with C/C++.
I've listed out a bunch of tools that I think it would be helpful for you when you start making games. In case the engine or framework you want to use isn't listed above, you know the things that you should (and should not) expect from your game making tool. I hope this is helpful for you, and please don't be hesitate to ask me questions.
Good luck, and have fun making games!.