Preface
Design patterns have been around for a very, very long time (decades in fact), lighting the way through dark and troubled waters where scale, flexibility, access, communication, and optimization try to capsize your best coding efforts at every turn. You’ll see these concepts taught and embedded in most, if not all, Computer Science curriculums around the world, but they’re conspicuously missing from many a young game programmers toolkit (mine included when I first started out).
Maybe these skills are traditionally taught by more experienced developers and mentors over the course of a programmer’s career. Maybe games are supposed to be fun to make, leaving the more serious work to the engineers who specialize in creating large accounting systems, traffic monitoring algorithms, or global trading platforms. Maybe this skill gap has simply been overlooked in favor of game mechanics and amazing animations (not that those aren’t important bits – we’d be nowhere without them).
Whatever the reason, we need to break the current pattern of sending young developers off into the wilds with swords but no potions and start training for reality – a reality where games are still only play, but the underlying game systems need to be just as complex, flexible, and well architected as the software products we use in our daily lives!