Not too long ago, I remember getting into a pair programming session with a fellow contractor who was overseeing the project. We were meant to change the name of some class from one thing to another.
At the time, we were working with Objective-C, a compiled language. So I proposed what I would consider a simple and reasonable solution.
"Why don't we just rename the class and then follow the compiler errors? They'll tell us where we need to switch over to the new name."
The response was unexpected. He was furious. The way he saw it, all compiler errors were bad and we should never intentionally make them happen just to figure out where we need to edit the code. What the hell was I thinking, making the code turn red just to change the name of something?
In hindsight this is hilarious. But it is also a teachable moment.
It is indeed possible to have "years and years of experience" without ever having learned much. To do that, you just repeat the same year over and over again without ever taking any risks.
I am now convinced that the mark of a great developer is an unwavering lack of fear when faced with the unknown. Such a person has tried every solution and lived to witness the fallout - or what is actually more likely, the lack thereof.
This is not at all surprising to me. I come from the world of snowboarding, having watched athletes around me both rise and fall. One pattern always emerges. The very best aren't the ones who simply show up every day. They are the ones who show up with an agenda. Above all else, they're the ones who also have the guts to carry it out.
I remember the first day I rode into the big park and looked over at the house-sized jumps to the side of me. I was gripped with a mixture of awe and fear. Someone did a gigantic front flip over one of them, and all I could do was gasp in horror. Had you asked me if I would one day become that person, I would have said no.
And yet it happened.
Not entirely because I summoned up the courage and went for it one day. That's part of it, sure.
But that particular risk, that learning moment, was built on top of a mountain of smaller risks that all added up.
I started on the little jumps. Gained comfort. Moved to medium jumps. Gained more comfort. Tried new things. Fell over a lot. Got back up. Hit my head a few times (can you tell?). Did it again and again and again until muscle memory took over.
One day, the thing that used to make me gasp in horror became routine. I had done it so many times I couldn't imagine it going wrong. The fear was still there, but it didn't control me anymore.
That which is true in my little snow world is also true in this programming world.
If you want to learn and grow, you try new things. You take risks. You waste time. You make a mess and spend months trying to clean it up. You apologize profusely and then move on to the next thing.
Progress is not measured in years. It is measured in attempts at new things.
It is the slow process of replacing fear and superstition with understanding. It is breaking that house-sized jump down into a series of smaller risks, each of which propels you to something greater.
Things are going to break and people are going to blame you. Deadlines will be missed. You might get fired or gradually drift away from your peers. This sucks, but it is natural. It's how you learn.
When your time comes and you've got the gray hairs, don't be the one who is afraid of the compiler. Be the one whose wrinkles come from all the alligators you punched in the face.
Be senior. Not in years but new experience.