The Geography of a Program

I’m imagining my codebase as a kind of geographical map. Each class or type is like its own little community, and over time these grow larger as they contain more methods and properties. Sometimes they stay like neighbourhoods, but sometimes they grow into cities.

Maybe each module or framework becomes like a little province or country. And in each one is a different set of cultural customs and norms. Maybe in this place we use Strings for identifiers, while over there they use more strongly typed identifiers. In this province, lore is valued, so there are comprehensive docs, while in that province, maybe things are figured out more intuitively. And so on.

Does each place have a climate, perhaps, too? Is there an aroma to the fresh code as it blossoms in the spring of a sprint? Do the leaves fallen from aging syntax trees rustle and crunch underfoot as I traipse through a code path?

As a programmer, I tend to inhabit one area of this map more than the others. I’ve got to act like a local, learn the customs, or try to share my own, while my teammates do the same. Are we shepherds? Gardeners? Urban planners? Colonizers? How do we navigate such strange cities?

Speed of Light