The following blog post, unless otherwise noted, was written by a member of Gamasutras community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
Start with a small game
Finish your first game.
If you're developing your first game and you've no idea about game development. Start with tetris / a basic platform game or an arcanoid game.
Always get feedback about your game. Start this process immediately after the first prototype is finished. Test your game with a brutally honest group of people who never played your game before.
Prototype as frequent as you can.
Don't be afraid of chuck out your prototype. It's not a big deal, only a few days of job.
Don't get the critics personal. Getting a feedback like "your game is perfect. I loved it !" does't help you at all. "The control isn't comfortable, levels are getting too hard in a short time" helps you much more. Beware that users aren't criticizing you, they're criticizing your game.
If you're developing your own game -please I beg you- don't make a clone game. Nobody needs a another bubble game. Clone game development causes you to not to learn the game design iteration process.
Avoid using game engines before having the knowledge of "what is a game engine?", "what is the benefit of using game engine?". Don't start with programs like unity, corona, game maker before knowing what happens in a game loop.
Find team mates. They'll motivate you and most importantly being responsable to a teammate is much more motivating then being responsable on yourself.
Find a mentor but don't ask questions to your mentor as a reflex. First research the problem, if you're stuck then ask for a keyword. Don't underestimate the power of google.
If you think you got a good idea, go for it. Nearly all of the successful indie game's have core mechanics which can be developed in 1-2 weeks. If they weren't continue development they wouldn't be successful.
Don't underestimate the game sector (especially mobile). All of your future consumers have a really high expectation. Publishing an unfinished game will unsatisfy your customers and will lower your reputation and your developing motivation. Instead of an unfinished big game, publish a finished small game.
Try to develop utility tools. Maybe it takes more time to develop a tool than writing it in a non-elite / long way but developing tools increases your motivation and makes you a better programmer.
I love the quote of Martin Golding: "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
If you think something wrong with your code. Delete it and write it again.
Don't try to write reusable code. Try to write readable, extendible, flexible code. Every game you develop will make you a better developer so most of the time all the classes you wrote previously, will be rewritten in a better way.
Search for an implementation or ready to use library before starting development of an algoritm. It doesn't matter you use it or not. If you decided to write your own implementation, at least checking legacy codes will show you what you should and shouldn't do.
Learn how to search on google. Seriously, I mean it. Internet is a big junk if you don't know the right keywords.
Be close to people who understands what you're doing and appreciates your work. Having conversation with these kind of people is the most instructive and improving sessions.
Networking is very important. Attend as many meetings, conferances, seminars as you can do. My closest friends are people whom I met in these kind of events.
If you feel sufficient attend to Game Jams. These activities are very important for networking, finding future team mates and also it is good for reminding yourself 48 hour is a damn long time.
Before starting developing a game have conversation with your developer friends. Tell them the algorithm that you're about to write or the alternatives in your mind and have a brain storm. This may gain you so much time and it may prevent you taking the wrong rode.
If you find your self in a dead end have a break. If it is possible, sleep. Your brain keeps trying to solve the problem. When you wake it's highly possible to shout "eureka".
When starting to a new language my learning way is: Find a nice book about -> Read most of it ( you'll forget everything but you'll have the keywords) -> Read some example code and analyze them -> Pick a goal and start writing-> If you get stuck look at the example codes -> If you cant find google the problem -> If you can't find related web sites you don't have the right keywords, ask a friend of yours who knows the language -> Search for the new keyword -> Write until next problem :)
Don't flatter your ego by looking your knowledge. Always keep looking the world and remind yourself how little your knowledge is.
Don't make random search. There are lots of things to learn so learn step by step.
Learn according to your projects' needs. You'll forget all of the things that you didn't practice. As conficius says “I hear, and I forget. I see, and I remember. I do, and I understand”.
Don't afraid of saying "I don't know this, can you tell me". Don't be slave of your ego.
My last advice is... Don't afraid of solution. If it is a hard algorithm it won't be easier any time soon so don't give up. If there is not an implementation of solution in your development language, there is a big possibility that it is written in another language. Try analyzing that solution. In every game you develop it's highly possible to getting stuck in such algoritms.