Tips for aspiring game developers

If you're new to game development, building your first game can be overwhelming. At first glance, simple games like Pong or Lunar Lander may seem simple. This is especially true in the modern gaming era where remarkably well designed games are released weekly, if not daily.
Focus on incremental progress
This advice is true in all aspects of life. Any big accomplishment is just the combined output of many small accomplishments. Successful software developers (games or otherwise) have at least one characteristic in common - the ability to break large, complex problems down into small, simple tasks.
Say you want to build a Super Mario Bros. clone. Where to begin? The same place you should begin any game clone. By breaking the game down into smaller, more achieveable tasks. Rendering Mario to the screen. Moving Mario left and right. Allowing Mario to jump. Adding physics so Mario comes back down to the ground, etc.
Know when to take a break
Everyone gets exhasuted. Getting started building games can be exciting and it can be easy to find yourself up late banging out code. However, game development is complicated and demands careful planning, attention to detail, and the ability to understand complicated, interconnected systems. It's difficult to do any of this when we're exhausted. We believe there are three pillars to performing at our best: getting good sleep, eating healthy, and getting exercise. Take the time to take a break. Go for a walk. Eat some fruit. Drink some water. Generally speaking, take care of yourself.
Watch game development tutorials
It's ok to use game development tutorials. It can be a great way to get started. Even if you're already building games, watching how other developers structure their games can be very educational. The key is to be open to new ideas and new approaches. Struggling to understand why a specific design decision was made? Consider reaching out to the developer and asking.
Build word games
If you're really new to game development, beginning with word based games can be a great way to get started. Cloning games like hangman, Wordle, or sudoku will present plenty of coding challenges while reducing the overhead of developing game graphics and adding sound.
Keep a Game Development Journal
Building a game, even a simple one, involves hundreds of decisions and is likely to take a beginner days or weeks. Doe to lack of experience, beginning game developers will make some bad design decisions. Later, the implications of such decisions will become evident, but without any notes, it can be very difficult to remember why you made that decision in the first place.
The first time I built a Frogger clone, I took the time to structure my game levels in the following manner:
class Level:
self.lanes = Lane.get_lanes()
class Lane:
self.objects = Objects.get_objects()
self.speed
self.y
class Object:
self.x
I allowed the Lane class to control the movement of all assigned objects. This made sense until later when I was working on setting up the "frog on a log" movement. First, because each object didn't manage it's own movement (movement was handled in its associated Lane object), updating the Frog x-position was more complicated. Second, setting up the Observer pattern would need to be less conventional. At the time, I had limited experience with game design patterns so deviating from anything conventional wasn't easy for me.
Get involved in your local game development community
Many larger communities (Detroit, Seattle, San Francisco) have indie game development groups you can become a part of - no experience required! Even if you're just getting started, drop in on social events, introduce yourself, and listen to what others have to say. You'll make connections, hear about upcoming indie games, and hear what's going on from other aspiring game developers.
Work with a partner
Know others interested in being a part of game development? Ask them to partner up! Whether they're an aspiring coder, a graphic artist, writer, etc, they can help reduce your work load and help you deliver a more professional final product.