I'm looking for books, websites, tutorials, anything that will aid in beginning the journey from novice to expert.
Websites:
GameDev.net [1] is definitely [one of] the best websites out there to begin your journey. As a matter of fact, I'd recommend reading the whole beginner's section and continue with the book section to get the idea on what you want to get specialized.
It's important to participate actively on forums. You get help from others and eventually you'll start helping other people; and that's how you learn the most: helping and teaching.
Game Career Guide [2] IMHO, is the number one resource to find schools on game development around the globe and get first-hand information on how to get "the party" started in the academia. They also got a good deal of articles that are worth reading.
Gamasutra [3] is a great portal for game development professionals. You can find job offers, news about the industry, game's postmortems, in-depth analysis (from the development side). That information help not only the professional, but the aspiring professional to get an idea about the field.
Books
I'd recommend reading " Game Development Essentials: An Introduction [4]" and continue with " Introduction to Game Development [5]". Why? Because these books talk about the whole deal. Games are software, but you also have to know about the jobs your partners from design, art and sound do.
From that point, you'll decide what suits you best: Coding/Designing/Art/Sound, DirectX/OpenGL, XNA/SDL/Allegro, etc.
A common recommendation among experienced developers: specialize. If you like programming, learn how to program well first (math, algorithms, graphs, object-oriented programming) and continue with games (because you need to know how to solve problems which get down to these 'basic' stuff). However, you can make games with the system console ;-). Use your imagination.
The same happens with art/graphic design, sound, writing. You'll get a wider set of tools on your field if you open your mind and absorb all the knowledge you can on your area of expertise.
Finally, I agree with Tetrad: "the best resource is experience". Hope it helps.
[1] http://www.gamedev.net/My post is directed in how to approach game development.
New to programming? How about a Language
Decide what language you would like to use. The basis for this answer will revolve around what you really want to do. Do you want to create XBLA games? Then you're going to learn C#. Do you want to create Android games? Then you're going to need to learn Java. How about iPhone games? You'll need to learn Objective-C.
At this point I wouldn't worry about what is hard and what is not. If you really want to make games pick a language and go. There are plenty of resources out there which will teach you the syntax.
Starting on the right foot
Many people have really ambitious dreams when they start game development. "I want to create a Game Engine!" You absolutely need to start small. Learn the boring stuff and attempt to find ways to give yourself some eye candy.
What this means is that if you choose C++, spend a lot of time with the language. Learn pointers, learn memory management, play with complexity of algorithms. Go find an open source project, download it, and see how they structured their game.
Along the way, do fun things. Create a console based adventure game that actually uses what you've learned.
If you have experience programming
Create a clone of a 2D game (2D! NOT 4D!). Pick one. Breakout? Tetris? Add your own twist to the game. The biggest key that I can tell you is to start small and work your way up. Create a project, show it to some people on
gamedev.net
[1] and get feedback.
Once you think you've got it down, then jump into the 3D realm. 3D is extremely hard. If you're new you are going to face plant yourself just has hard.
But I'm an Artist, or Sound guy!
There are plenty of programmers out there that are tired of looking at their own programmer art and listening to some really crappy effects they found online. Go to tigsource.com and meet some people. But be humble about it. If you have no experience in games and little industry experience, don't expect to get paid. Independents love what they do. So much that they don't really focus on the money initially.
Conclusion
Some tutorials and other resources from my browser bookmarks:
It isn't finished, but my book [1] has some chapters online that may help you.
[1] http://gameprogrammingpatterns.com/I have browsed some of these things. If nothing else, it'll give you a list of things you probably want to look up ^^
http://www-cs-students.stanford.edu/~amitp/gameprog.html
I think the best place to start learning to develop games is Gamedev.net, specially its For Beginners section: http://www.gamedev.net/reference/start_here/
If you already know how to program, I found this article specially enlightening when I started: http://www.gamedev.net/reference/design/features/makegames. It tells you the path you have to follow to start programming the most simple game ever.
After you start doing your first game, you will find that the GameDev forums are very good to search for questions and asking for them (but probably this Q&A site will set a higher bar ;-) ).
Well first off it depends on what subset of game development you're talking about. The path is going to be different if you're trying to become an artist, designer, programmer, etc.
Either way, though, the best resource is experience. Try, fail, research, try again.
For a novice coming into Game Design, and not necessarily programming so much, The Art of Game Design [1] is one of my favorite books(!) of all time. It's good to remember that game design can be done with pen and paper and that a finished game doesn't need to involve programming at all. Jesse Schell has incredible insight into the design and development process, and most of all about how to make games fun and rewarding. The added card deck of 'lenses' accessory is worth it too.
[1] http://artofgamedesign.com/First you need to ask yourself some questions regarding where to start.
What language do I want to program with?
There are pros and cons to each and every language in regards to programming.
Ill list them off.
C/C++ Pros:
Powerful Language with alot of freedom to tweak and modify code that is close to the hardware for better system performance.
A bunch of libraries, APIs, open source projects out there to help you start out.
Alot of programmers prefer to use this language. You are more likely to find more people willing to work on a project with you if its written in C++.
Portability with the right API and code structure. Every platform out there pretty much supports C++. Xbox, Playstation, Wii, Linux, Windows, IOS, Android. The list goes on. When it comes to portability, C++ is definitely the champ everytime. The only thing that really has to change is either your compiler, or the libraries. Libraries like SDL, naturally make the porting almost painless in alot of regards. You cant write a PS3 game in pascal because simply the SDK sony created doesnt support it. (correct me if im wrong).
Cons
C/C++ is a tough language. Its hard to read and follow up on whats truly going on alot of the time. The fact is, computers are complicated and C++ does absolutely nothing to try and make them less complicated. You are close to the hardware when you code with C++. There is alot of stuff going on under the hood you need to know about and unless you are a professional computer scientist you might end up spending more time fixing code then creating code. Its just really hard to use this language efficiently if you are new to programming. And if you arent using your time efficiently with C++, you are going to be stuck in development hell before you know it.
C# Pros:
XNA. Its a great introduction to game programming. It really takes you away from alot of the under the hood stuff. There are alot of online resources and tutorials. Also once you get good at XNA you can always move on to SlimDX if you want to use a more modern version of DX3D like 10 or 11. Theres no need to now, but eventually you might like to.
Intellisense, your best friend in the coding world. No longer do you have to go and open up a doc or a reference to figure out what method does what.
You can create a game and upload it to Xbox live indie game market place.
No need to worry to much about memory and garbage collecting. Alot of this stuff is handled for you.
Cons:
Some will say that portability is the bane of C#. XNA is technically only for Windows platforms. There are projects for Linux/Unix systems(sony, IOS/MacOSx, android, all fall under the Unix family) that allow porting of XNA games. The mono project is the answer to this. There is monoGame, Playstation Suite sdk, and other things coming out but they are still in their infancy. But typically if you end up developing on XNA, your targeting windows.
15 minutes of tweaks later, and I had a game that would not require steam to run and would could distribute to the world. Did I leak it? No. But other people did. And it was easy. Does it still happen now? Probably. Its not hard to go in and take DRM out. There are programs that provide obfuscation. But they arent completely fool proof.
Java: You can pretty much compare Java with C# so ill skip this language.
Python: Pros:
I love this language. Its just so pretty, and easy to grasp. Its definitely where every programmer should start. This is a language where you actually have fun. Everything just feels natural.
It is a dynamic runtime language that is compiled down to another language. For instance, CPython(C), JPython(Java), IronPython(CLI i.e.C#). This means, you can code in another language and use python within it. Alot of people use this for scripting because its just so easy to read and grasp whats going on.
There are ALOT of great modules(libs) out there. Almost anything thats on one language has a python implementation. SDL begot Pygame. QT begot PyQT. Ect ect. People love this language, and you have a huge number of resources out there.
Cons:
Bugs. The language does grow, and bugs do come up alot. Nothing you can do about it. For instance, on Ubuntu 11.10 I can not figure out for the life of me, how to fix a bug in pythons packaged IDE idle where you try to display auto complete with alt+space and it crashes on you. It can be frustrating. And of course when something is changed in the core language, if you have other modules installed you have to wait for them to reflect those changes. Either that, or fix them yourself. Which is a nuisance.
Python can be hard to migrate from to other languages. If you program with python and move to other languages. You find yourself thinking about alot of problems the Python way. The philosophy for python is there should only be one obvious way to do it. And for the most part the language sticks true to that philosophy. You may find yourself handicapped in that aspect when using another language.
IDLE is annoying and bug infested. Its interface is terrible and ugly.
I do like Pydev/aptana3 however. Ive been using it and havent found any gripes yet. But surely that will change.
Idk know much about the other languages out there. I dont use any of them like Ruby, Pascal, OCaml, ect. So i cant really comment on them.
So once you pick a language, here are my recommendations on starting points.
C/C++:
lazyfoo . net/SDL_tutorials/index.php
C#:
riemers . com
xnaresources . com/
xnagpa . net/xna4rpg.php
Python:
cs.simpson . edu/files/CS_Intro_Book.pdf
Also a very interesting thing, if you want to get a better look at how all the low level computer stuff works. This course was a true eye opener. There is alot you can learn from here. I do warn that its very complicated and challenging. But very rewarding as well.
www1.idc . ac . il/tecs/plan.html
(Delete the spaces, reputation still too low. :'( Sorry for dodging the spam limit for newcomers. But my links are great resources and the post wouldnt be as rewarding without them.)
I would add the python [1] language to the list, with its popular game library pygame [2]. Python is a vibrant ecosystem, suitable for a huge range of projects, including gaming.
Pygame has a rapid learning curve and it's excellent to beginning video game programming.
Happy coding! Francesco
[1] http://www.python.org/