Iâm not talking about those who are famous, well-paid, or the authors of big and popular products. They are not necessarily talented, even though their results are outstanding. Talent is something some of us have as Godâs gift. Very few of us⌠otherwise it would not be called a talent. We all know what talent looks like in music, sport, poetry, or the art of acting. We can tell right off the bat whoâs got it and who is faking it, no matter how hard they try. Can we do the same after a short interview with a programmer? I believe we can.
I decided to read what others are saying about the art of interviewing and how they suggest we detect the talented among all the other regular software writers. Jeff Attwood suggests paying attention to the personâs passion, communication skills, personal attitude, and the ability to work in a team. Joel Spolsky suggests hiring those who are smart and can get things done. Haoyi gives very detailed instructions for the interviewer with the focus being on the candidateâs ability to write code, discuss problems, reason about constraints, and be a person we would enjoy working with.
All of these make sense, but itâs not about talent. Itâs about finding a person who can effectively write and maintain spaghetti code and be happy about it (maybe with just a little dose of anti-depressants).
Imagine yourself recruiting yet another singer for a choir, which consists of people who have no ear for music. Would you need talent? I doubt a talented person would be able to sing in that choir. Well, maybe for a while, if you pay well enough. Just like any other team in any other industry, most software groups consist of average code writers, not talented programmers. Modern programming, especially in big projects, is not about talented individuals, itâs about the team work of mediocre coders. Thatâs why all interview gurus teach us how to find yet another coder: properly educated, trained, skilled, and ready to write yet another pack of Spring controllers. And, of course, enjoy it.
But sing? No.
So, what exactly is talent?
Itâs an innate need to structure things.
Just like a musician, a talented programmer physically canât tolerate what sounds wrong: ambiguity, inconsistency, chaos, irrationality, and lack of logic. A talented programmer feels these things, while a mediocre one says âWhatever works!â and gets on with it.
Let me explain by example. Over the last five years Iâve been using the same simple piece of Java code to interview everybody who is interested in working with me. I ask them to review it and find whatâs wrong. Try it now. You have five minutes.
How many issues did you find? Here are the answers. There is a prioritized list of defects I expect candidates to find. The most important are at the topâthey are about structural problems in the code. Mediocre developers are used to working with bad code and can easily put up with it. The class name is Parser, but it has get and save methods? Who cares, as long as it works! The pair of methods is not get and set, but get and ⌠all of a sudden save? Who cares, it works anyway! And so on. Mediocre programmers donât feel annoyed when they meet inconsistencies. Just like people with no ear for music, they donât hear anything wrong!
When I interview programmers, I donât pay attention to how much they know about Java, how well they understand OOP, or how many projects theyâve managed to complete to date. And, of course, I donât care how potentially likable they are. Instead, I pay attention to how much they hate to see what doesnât look right. I check how intolerant to chaos they are. This is what my Java test is for.
To be honest, very few of them exhibit these qualities.
And thatâs because very few projects (and project managers) need these qualities. Most processes and codebases are poorly structured. Any sign of intolerance of that structure, or honest attempts to introduce some discipline, only annoys mediocre programmers, who are always in the majority. A talented programmer constantly demanding discipline and consistency looks like a crazy OCD patient. Nobody understands whatâs wrong and simply ignores him/her, at best. Moreover, bad coding practices coming from popular frameworks and poor management principles are encouraged by Agile and its coaches. They train us to have no ear for high quality in programming.
The marketâs demand now is mediocrity, not talent.
Thus, donât worry if you feel that you donât have much of a talentâin most projects you will be far better off without it.
Unfortunately.
Do you think you have a #talent for programming?
— Yegor Bugayenko (@yegor256) January 5, 2020
