...and while you can train people to be competent, you can't train them to be exceptional.
Why not?
Every exceptional programmer I've ever met was unexceptional at one time. Something happened for them to become exceptional. I personally believe that while that "something" is most often "doing", "training" is often a big part of the equation. And that training is more often than not training their beliefs as much as training their skills.
Many of the best programmers I've even known never imagined themselves being able to do what eventually became their norm. For a lot of them, all it took was the guidance of a caring mentor or trainer to see the possibilities.
Regardless of where programmers come from, I take it as a serious responsibility to help them become what they can be. Not saying "can't" is the first step.
You become exceptional by being curious and never satisfied. I don't think you can teach that. I mean, you can blurt it out to people all day but it takes intrinsic motivation to stay awake until 2am because you want to chase some random thing down the rabbit hole.
"motivation to stay awake until 2am because you want to chase some random thing down the rabbit hole."
Agree. Obsession and curiousity is important. To me you either have that or you don't have that. (Edit: Of course it depends on the subject for sure. You can be curious about one thing but "phone it in" about something else.)
I'm not a programmer but I can write some things that are helpful to me. The other day I made some tea and I then thought "hmm I will buy a timer on Amazon". Then I though "no let me write something that I can use from the shell to tell me when N time period is up and what it is up for". [1] I then probably spent the next hour or so writing this little routine when all I had done was getup to make tea. Because even though I am not a programmer I decided it was more interesting than what I was working on at the time (which is also pretty interesting).
Back to something that I do know about (negotiation and strategy) I go with your first sentence for sure.
[1] In other words instead of using the iphone timer or any number of other ways to do the same exact thing I just decided it was more fun to write something to do what I wanted. And it was fun. And when I showed it to my wife that evening (as an example of why I think our 10 year old should do programming) she couldn't understand why I thought what I did was fun to do.
Programming ability (similar to other STEM abilities) are power-law distributed, rather than Gaussian [1]. From this, it follows that training has very high probability of producing competent programmers but very low probability of producing exception programmers.
Not necessarily. Surely there are people out there who have the potential to be exceptional, but never reach it, because they never got started, never realized they'd be exceptional, etc. Converting the potential exceptionals into actual exceptionals, is a very big win.
The kind of training necessary for becoming exceptional is entirely possible, but not scaleable, thus it's not a practical solution to the problem. I think the example you give supports that - mentorship tends to evolve organically from companies you work at, the colleagues you work with, etc. It'd be difficult to imagine good mentorship being assigned, and succeeding, at-scale.
Even the processes for training competent engineers are only barely scaleable. Most competent engineers are still being trained through colleges. Even newly emerging forms of training don't scale that well - take coding bootcamps with limited class sizes and the low success rate of things like Codecademy.
I think the assumption is that at the speed these companies are operating having to wait for a "trained" (assuming it's true) batch is simply to long. By that point they may be out of business.
The logical takeaway from that is that they don't have a viable busisness model, not that society should change in order to make their poor business model work.
Why not?
Every exceptional programmer I've ever met was unexceptional at one time. Something happened for them to become exceptional. I personally believe that while that "something" is most often "doing", "training" is often a big part of the equation. And that training is more often than not training their beliefs as much as training their skills.
Many of the best programmers I've even known never imagined themselves being able to do what eventually became their norm. For a lot of them, all it took was the guidance of a caring mentor or trainer to see the possibilities.
Regardless of where programmers come from, I take it as a serious responsibility to help them become what they can be. Not saying "can't" is the first step.