I had a lightbulb moment at work today.
I attended a fascinating presentation where all the words jelled together to make me feel very happy about choosing to work there. The last time this happened was when I joined a scrappy young bank back in 1996. In both situations I saw a positive and challenging vision of the future which I genuinely want to be part of. I wish I could share some of that vision, but I obviously can't. The word trustable featured, though. Trust is important to me.
One word in the presentation jarred in my head. It just seemed out of place, badly so, but I couldn't figure out why. I imagine if you looked at me while I was reading that word I would have looked like I was in pain.
It took me a while to understand why. It was the right word but I have, over the years, come to misunderstand it, to give it the opposite meaning to its usual meaning.
They word was Legacy.
A Legacy, in the normal, everyday world, is something you leave behind for future generations. It's something positive. It's something you'd be proud of. Something others will thank you for it one day, even if they don't know who you are, even though you are no longer there.
But in our software development world, where we tend to take everyday words and redefine them for our own purposes, "Legacy Code" is shitty code that no one is proud of. It's not the sort of thing you want to leave behind, but you do because you have no choice. You don't want people to know you wrote it. You wouldn't sign it like an artist does, or like the apple people did with their early computers.
I wonder what would happen if we started calling old shitty code "old shitty code" and asked people to write legacy code, meaning stuff they were proud of, that future coders would be grateful to work with.