make a game; you will learn a lot. even a simple 2d game like a chess simulation is a great exercise in software engineering, for several reasons.
- Games are a LOT of work. Most hobbyist games are never finished. Sticking with one from start to finish is a great execise in discipline and perseverance.
- Games of any significant level of complexity require a lot of thinking about performance. Most programmer's first game looks something like this:
while not game.time_to_quit():
for each entity in game.entities:
entity.update()
game.render_frame()
which will always pin a single CPU to full utilization. Try again!
- Games require a wide knowledge of data structures and programming techniques, like kd-trees, pools, and (if you're really serious about performance) stuff like cache-aligned allocation and flywheels.
- There are always tons of cool features you can add that will stretch your coding ability to the limit. Try adding a save-game feature and watch yourself pull your hair out designing a decent data model. Add 'instant replay' abilities without destroying memory performance, and build an AI to see why functional programming rocks your socks off. Add network play and learn how to write really performant network code. Add pixel shaders and learn the basics of GPU processing and how awesome it is.
- Games are the type of project that is 'never done' in the sense that there is almost always some improvement left to be made.
- Most decently built games separate the engine from the game itself. Learning to do this properly is a great way to learn good techniques for designing good abstraction layers.
- Games are fucking awesome. The first time you have code moving a lolcat around on the screen, you'll shit your pants with excitement (YMMV). Part of the fun of programming is building stuff, and being able to see what you're building is very rewarding, especially if people play what you're working on and (if you're really good) they like it.