I am 16 years old and would like to know what i need to do in order to be able to create a simple 3D first person shooter game within 2 years such as this one I found on youtube which someone created on the unity game engine:

youtube.com/watch?v=RblLNUSr-oU

I have the basic computer skills which an average 16 year old probably has, but I have practically no knowledge of C++ language or any other programming language which I think is required to create a computer game.

I have watched a few youtube videos which helped me learn a couple of things about C++ and game programming. I also downloaded unity and watched a few tutorial videos on youtube and read through a few tutorial web pages explaining how to create a FPS game on unity but they all either required previous knowledge which I didn't have or didn't actually explain why they were doing what they were doing, I want to actually understand what's going on not just follow a list of instructions.

I am not looking for a career in creating games but I would still like to have the basic knowledge which would help me create one.

I understand that this may be an extremely difficult goal to achieve which may take a lot of time to learn but please don't discourage me from trying.

If anyone who is experienced in game programming could recommend the steps I should take in order to achieve my goal that would be great. I have made a list of the information I think I might need below but please feel free to add any other information which you feel might help me. (remember I have no previous knowledge of any programming)

Information:

1) The name of the programming language I will need to learn and anything else i need to learn.

2) Suggest and provide a link to a book that might help me or a place where i can learn/suggest a method of learning.

3) Suggest a free game engine which is easy to use for beginners.

4) Please provide links to any other useful resources which will improve my programming knowledge

5) How long it would take to achieve my goal

Dont forget I'm not fully aware of what information I need so anything you think would be helpful please include!

Before criticizing my goal please read:

If you seriously think that my goal is completely unrealistic for me to achieve within two years starting from scratch then please provide information on what I possibly could achieve with two years of programming knowledge starting or tell me how long it would take to achieve my goal. I would be happy if I was only able to create a basic template for a game where a character can move around on a flat surface, looking around with the mouse, moving with wasd and being able to jump. How long would it take to achieve this?

If you want to learn to program, it doesn't matter too much which language you start with, because you'll end up learning multiple languages later on anyway, so even if you have to "throw away" your knowledge of the first language you learn, you still learn some of the foundational of programming which is shared between most languages.

It is far more important that whatever language you choose, you stick with it for multiple years (think 5 years - plan for the long haul) before changing to a new language.

Some common language choices are: C#, Java, C++, Python

There are hundreds of languages, but about 10-15 "commonly used" languages. Once you learn one (which takes a year to learn the basics of, and multiple years to really comprehend), it's easy to learn others (in a matter of months).

If you are wanting to use the Unity Engine, the Unity Engine uses C# and their own scripting language called UnityScript.

I would suggest not starting with C++ because it's one of the hardest languages - but I started with C++ myself, and am glad I did. However, you have to press through the difficulty through a little self-discipline, because it does you zero good if you start to learn something and then don't follow through.

I typically suggest Python as a great first programming language - it's really powerful, really simplified (in a good way), and has alot of available resources to help you get started. It was also used successfully in several successful commercial games (though to be honest, most large games mix multiple languages together (usually two - the engine language and the scripting language)).

The first would be a nice thick comprehensive book that walks you through chapter by chapter. This would be a book dedicated to learning the language itself, so don't get one that has the word "game" or "videogame" in it. Don't get something that says, "Game Development with Python" or something of that nature. Get one that is focused on Python/C++/C# itself, without the game-related focus.

The second book would be a bit smaller, more "fun" sounding, and a lighter read. Less comprehensive, it'd be something you can read on the couch instead of at a computer desk, and you can go look up something in the second book if you didn't understand the author's wording of the same concept in the first book. The second book can involve games, if you want, but it doesn't need to.

The primary book you get should definitely be written within the last three years (2010 or later).

Note: If you go with C++, try to get a book written in 2012, since C++ just had a major language update in 2011 (called C++11), and older books would use outdated knowledge.

Eventually, you'll get more advanced books - but don't buy them now, wait until you program for two years before deciding what the weak areas of your knowledge are, then buy or check out of the library books focused on those spots.

I feel a good modern "primary" book and a second fun "couch" book are all you need, and the only expenses that you face. Any gaps in coverage will be supplemented by online tutorials, articles, and discussion forums.

When you need help, for whatever language, learn to try to solve it yourself first*, research it second (in the documentations and in your books), google third, then come here (GameDev.net) and Ask a Smart Question. We're standing by to help while we procrastinate on our own programming projects.

*And after trying it yourself, even if you succeed, look up if there's a more proper way to learn good coding style.

For the first two years of programming, hang around here. Don't try to 'advance'* too soon to 'General Programming' or 'Game Programming', stick in For Beginners, and you'll learn alot - there's no shame in posting in the For Beginners forum, and I start threads to ask questions in there occasionally even after seven years of programming. Read threads that you didn't start, and learn from it, even if it's discussing a different language. Ask questions. Then ask followup questions, until you actually understand or unless you feel you got into a programming topic that is too much too soon for your current level.

*It's not advancement - the For Beginners forum is actually the "For basic questions" forum, that even technical users ask questions in, for example when a 20-year programmer is learning a new language. It's the difficulty of the question being asked, not the skill level of the asker, that decides what questions should go in what forum. General Programming and Game Programming are for technical discussions of advanced programming topics, regardless of the asker's skill level.

Welcome to GameDev, and I wish you well on your journey! Programming can be very frustrating one month, and very very enjoyable and rewarding the next - but it took me nine months of programming before I realized that I actually enjoyed programming for itself, and that it was more than just a means to getting to the fun parts of making a game.

Information:1) The name of the programming language I will need to learn and anything else i need to learn.2) Suggest and provide a link to a book that might help me or a place where i can learn/suggest a method of learning.3) Suggest a free game engine which is easy to use for beginners.4) Please provide links to any other useful resources which will improve my programming knowledge5) How long it would take to achieve my goal

It sounds like the game engine part of Blender would be perfect for you. If it is eventually needed, then Python used in Blender would be one of the easy languages for your first one.

The other choices are XNA and C# or Unity and C# for my top total newbie recommendations.

I use Blender for some things and it is very powerful.

Personal life and your private thoughts always effect your career. Research is the intellectual backbone of game development and the first order. Version Control is crucial for full management of applications and software. The better the workflow pipeline, then the greater the potential output for a quality game. Completing projects is the last but finest order.

I've only heard bad things about the Blender game engine, so I don't recommend that.

You're already messing with Unity, so start learning C#. Not through Unity, just C# by itself. Pick up a few C# programming books, not game programming books. Practice, create lots of console applications. Then, start messing with Unity. You won't be a very good programmer after this, but you should be able to get some stuff done. Grab a book on Unity and go through it.

You can probably have something up and running within a few months. It wont be very good, but it'll work.