Therefore I follow this procedure:
1) Pick a feature or use case to implement.
2) Make it work.
3) Clean up the code.
4) Tweak for efficiency if necessary.
5) Rinse and repeat.
Today's 'feature' was a tiled map in OpenGL, just to get the ball rolling. After a few hours of playing around, I had it up and running. This basically just loads in some OpenGL textures, calls glOrtho, then draws some random tiles on the screen while you click to re-centre the map.
I had a preliminary version running in about 20 minutes but that drew tiles to the screen by calculating screen positions from the world and camera positions manually. I wanted to change this so that I just sent tile locations to OpenGL and it translated them for me, and that was harder than it looked; not in terms of complexity, but in terms of the number of different ways I could approach it, almost all of which were wrong. :)
Code line of the day:
glTranslatef(static_cast(-cameraX), static_cast(-cameraY), 0.0f);
And they say Java is verbose.