Welcome to the Developer's Area of GrayCoreSoftware!
Making a game is really really hard work. You need to force yourself to have a good developmental process and follow it to the letter, and that requires a lot of patience and a lot of dedication. There are many books about process development, but when it comes down to it you need to write down (in as much detail as possible) what you're going to do, and how you're going to do it, with some estimates on how long each part is going to do it. I've found that if you multiply your estimates by 10, it will give you a more realistic picture on when you're actually going to finish it. Believe me, there are things that you think are super simple to do, but turn out to take an excruciatingly huge amount time.
Writing code is one thing. Testing it is another. People will use your application in ways you've never even thought possible, and things will break. If I were to break up my time into percentages, this is what it would look like: 15% Design (Mapping out the quests, drawing on paper the world map, designing all the functions to make combat entertaining, etc. etc.), 30% Coding, 30% Testing, 25% Graphics/Music (I can't draw to save my life, so a lot of time is spent finding people to do the graphics, sound effect, music, etc. etc.)
Development
All I can say is get a good notebook, because you're going to be doing a lot of writing and a lot of sketching. I keep all my bugs in a simple Excel file, but all of my design I manually write down in a notebook. I keep everything from quests, little sketches of towns, to a scratch pad of doodles that I do when I'm trying to figure out some high school geometry. If you're curious, here's a few screenshots of my notebook:
Sample Source Code
Here is some sample source code that I've written. What I typically try to do is separate all the game data from my code. I store all my data in XML files, and I read those XML files during startup. For instance, I have a class called Weapon which describes all the attributes of a weapon (ie. Weapon Name, Damage, Weight, Value, Number of Hands, etc. etc.), and in the XML file I have the actual attributes that describe a particular weapon (ie WeaponName="Dagger",Damage=1d4+3, Weight=75, etc. etc). This makes things way easier to maintain. If I want to tweak a value, I just modify some XML file. The code remains the same.
The Weapon ClassThe Main Loop
Testing
I do a lot of the testing myself, but toward the end of a project I find "Beta Testers" to try it out and report any bugs. Beta Testers can be anyone. Sometimes random people from the internet contact me and ask to be a Beta Tester, and other times my friends volunteer. When me or my friends are testing the game, I have a program called NCoverExplorer to figure out what code is being touched and how often. It's a good way of finding dead code. If you're curious to see what one of these reports look like, check out some samples:
Mar 24th 2009: 77%Feb 05th 2008: 75%
Jan 18th 2008: 73%
Jan 15th 2008: 62%
Source Code for the Space Invaders Proof of Concept
Over a weekend, my friend, Justin Mobijohn , and I made a game loop written in Java. I am providing the source code for it, in case you're a curious Java game developer, but the game does work. I provided a HowToCompile.txt that explains how to compile it as an executable jar or as a simple .class file.
Download binaries and source (including how to compile)
If you just want to browse the source code, here it is.
SpaceInvaders.javaGameObject.java
ImageManager.java
SpaceShip.java
Enemy.java
Missile.java