How to be a second rate developer
"Yeah, but when would I actually ever USE this?"
I took a deep breath. Five minutes in, and he'd asked this twice already.
I was explaining a very complex programming technique to a group of experienced developers. I started by showing a few examples of how it's used in different Python libraries. I explained the benefits of the technique, in abstract, high-level terms. And I pointed out it's used extensively in the code bases for Django, Flask, Twisted, Pytest, SQLAlchemy, and a whole bunch of other Python libs you use every day.
I started this way to motivate everyone. Because here's the thing: this is such an advanced technique, it takes a while to learn.
You have to start by learning several Python features you've probably never used before, and the mental models for working with them effectively...
You have to un-learn certain things most Python devs believe about functions in Python, and replace them with a different, more powerful, more accurate understanding of how they fundamentally work... (That's a tough one, if it's not explained right...)
And once you've done all that, you have to take these bizarre pieces, and master putting them together in weird and unfamiliar ways. You have to learn how to reason correctly about the alien, final code constructs. Which is hard in a half dozen different ways, until you get used to it.
No wonder fewer than 1 in 100 Python devs ever learn this technique. That's a high estimate; I think it may actually be fewer than 1 in 10,000.
But when you DO learn master it...
You are on a whole different level than other Python programmers. Permanently, for the rest of your career.
Those devs who DO learn this technique, typically do it with weeks of intensive, concentrated self-study. Scratching their head, being baffled and confused and puzzled... and for a lot of them, I suspect, a few moments of wanting to bash their keyboard.
But I've figured out how to teach it in 90 minutes.
Anyway, back to this fellow:
It turns out 90 minutes was way too long for him. He had some voice screaming in his head, demanding to know the immediate practical application of every code snippet I showed them. Every little building block... every toy code example illustrating a key point... every demonstration of one small facet of the whole.
In his quest to be a better developer, he was his own worst enemy. I eventually had to gently tell him to shut up, and stop interrupting, so the rest of us could actually learn something.
The lesson for all of us:
If you're only willing to invest your attention in things you can learn in a few minutes... you're never going to learn the skills that separate average developers from world-class engineers.
Of course, you have to value your time. Of course, you have to pick and choose where you invest your available energy and attention.
But don't be like this guy, unless you never want to go beyond a basic level of mastery.