One of the newer programmers on my team asked me the other day why I hired him. I said “I saw you had a natural talent, and have potential.” We both kind of laughed because we knew his skill level at the time was very low. He was not that experienced. But, he had more questions about how I can detect talent and potential versus just someone who has really polished looking code.
I’ve been thinking about this a lot. I mean, I hate to say “I can just feel it,” - I made sure not to REALLY say that when I talked about what I look for in code review, so then what is it?
First, let’s take a look at the difference between talent and skill. Talent is a natural ability, whereas skill is a measurement of the mechanics of that ability. I think about musicians - talented performers can sit down and learn a song from start to finish really easy. A less talented person, or someone who just works really hard, has to practice a lot more. Finally, they get to the same skill level and can perform the same song.
I think when you hear the word talent, it invokes a certain guttural pride. No one wants to hear that they’re not talented - especially in what they chose to focus on or what career they picked. But, it can be true. You may be the hardest worker, and that’s truly admirable, it’s just not where your talents are. You might be a great doctor because you studied non stop and did all the work (whereas others went out and partied and are still attaining the same grades), but maybe your talent is in art. You can draw amazingly well for example. (I myself am not talented in hand drawing. Everything I create ends up looking like a turkey.)
So, some people are talented so the skill comes easily. Others have to work hard to have an equivalent level of skill. It’s not as natural.
How can you discover talented programmers without just ‘feeling’ it?
I don’t know… Sorry, big let down! But, let me try.
I think it’s the way they choose to create their code. It seems to have a nice artistry to it. You just feel good about the way the classes interact or how the methods are formatted. You feel like when you scroll through the code, you can stop at any one point and immediately understand what is happening here. It’s the artistry in the code.
If you get to know the programmer, it’s the way they talk about programming. If they talk about solving for the task or if they talk about creating something new. Are they solving problems or creating something they’re proud of? How do they communicate about it? Is it a love or a skill-set?
Does the programmer randomly learn and implement new things without thinking. That’s different than choosing to go out and learn more - this is more a byproduct. Can they not help but absentmindedly try out the newest technology? Do they refactor mid-stream while writing something that wasn’t even complete yet?
Do they easily think in abstract, understand groupings and orders, and recursion? These are all things that can be taught, but is that the natural way the programmer is? Do they imagine red, blue, yellow and black cars on the road - or do they imagine boxes that represent cars?
So, I’m still struggling on how to measure what I think true talent is… I hate to say “when you see it, you know it” but that’s where I’m at right now.
If you have any ideas or clarification, please let me know!