As someone who's spent years working with developers, I've often found myself wondering what sets the truly exceptional ones apart. It's not just about technical skill, although that's certainly important. Nor is it solely about experience, although that helps too.
No, I've come to realise that what makes a great programmer is a rare combination of two essential skills: a sense of urgency and a drive for quality.
Let's start with the sense of urgency. A great programmer knows that time is of the essence. They understand that the best way to add value is by shipping software that users can actually benefit from. Unshipped software, no matter how beautifully crafted or cutting-edge, is worthless. It helps nobody, and it adds no value. This sense of urgency is what drives great programmers to prioritise, to focus on the essential tasks, and to eliminate unnecessary complexity.
But a sense of urgency alone is not enough. Without a corresponding drive for quality, you end up with software that may ship quickly but is riddled with bugs, inconsistencies, and poor design choices. A great programmer has an innate desire to structure things, to create order out of chaos.
As Yegor Bugayenko so eloquently put it, "A talented programmer feels [ambiguity, inconsistency, chaos, irrationality, and lack of logic] physically, while a mediocre one says 'Whatever works!' and gets on with it."
This drive for quality is what sets great programmers apart from the rest. It's what makes them take the time to refactor code, to write automated tests, and to ensure that the software is maintainable, scalable, and efficient. It's what makes them care deeply about the user experience, about the performance, and about the overall craftsmanship of the software.
But here's the thing: these two skills need to exist in tension with each other. A great programmer should feel equally uncomfortable when the quality of what they've built isn't as good as it should be, as well as when something is taking too long and thus no value is being added to paying customers. This tension is what creates a sense of balance, a sense of harmony between the need to ship quickly and the need to build something of high quality.
When I think back to the great programmers I've worked with, I realise that they all possessed this rare combination of skills. They were able to balance the need for speed with the need for quality, and they were able to do so in a way that was both efficient and effective.
So, what can we learn from this? Firstly, we need to recognise that great programmers are not just born, they're made. They're made through a combination of experience, mentorship, and a willingness to learn and improve. Secondly, we need to create an environment that encourages and rewards this rare combination of skills. We need to give our developers the autonomy to make decisions, the resources to learn and grow, and the support to take risks and experiment.
Finally, we need to recognise that great programmers are not just technical experts, they're also craftsmen, artists, and problem-solvers. They're people who care deeply about their work, who take pride in what they build, and who are driven by a desire to create something of value.
In the end, what makes a great programmer is not just about technical skill or experience, it's about a mindset, a way of approaching problems, and a commitment to excellence. It's about finding that delicate balance between the need for speed and the need for quality, and it's about creating software that truly adds value to people's lives.