What Is A Good Programmer?

What Is A Good Programmer?

Am I a good programmer? The short answer is: I don’t know what that means.

I have been programming for 52 years now, having started in a public high school class in 1973, which is pretty rare because few high schools offered such an opportunity back then. I have worked for 15 different employers across various industries. Additionally, I started two small software companies, one in 1985 and a second in 1987, which I ran until 1994. I retired in 2021.

Am I a good programmer because I have been programming for 52 years? No, doing something for long periods is not sufficient for you to claim that you are good. I played basketball for twenty years, and I was never particularly skilled. I’ve played guitar for about 50 years, and while I am decent, I’m not particularly special. Longevity is a positive aspect in that you have been able to remain valuable and employable, but it does not necessarily mean you are good.

Good is hard to define. If you compare programmers to each other, how do you decide which one is better? Does it have to be building the same type of projects in the same industry? The same level of experience? Knowledge of the same technologies? Similar titles? You could narrow down the comparison so much that it means little. If I build mobile apps, and you, for example, are named Linus and create an operating system, how do I compare to you? If you are building a superintelligent AI system and get paid 200 million a year, are you a good programmer, and I am not? Is pay even a way to tell a good programmer from a bad one? Maybe you worked for Google, and I worked for a non-technology company that doesn’t pay as well. Perhaps I was part of a team of two people building something, making $100 million a year, and your team has a budget of $100 million a year, and you lead a team of a thousand programmers. Who is the good programmer? Maybe we are both good, or not.

Is quality a way to decide? Maybe I shipped something working at a poor company with terrible QA, and you worked for a huge company with massive investment in process and delivery. Maybe my quality was good enough for my poor employer, and your stock price depends on your investment in quality. Who is the better programmer? Is that a fair comparison?

Say I have a small team, and you have a large team, but we both deliver something that works, comparable in complexity. Am I necessarily a better programmer, and you are not as good because you had more help? Perhaps I had a brilliant team member who did most of the work, and you did all the work since your large team was mainly useless—still not a great comparison.

Perhaps only you can decide if you are a good programmer, because you are confident in yourself. Yet, most of us have known programmers who talk a lot but deliver little. Being self-critical can be beneficial, as it keeps you from being complacent and never satisfied with being good enough. However, it can also lead to excessive self-doubt, resulting in a lack of motivation and accomplishment. Somewhere there is a balance between recognizing what you are good at and where you lack, but that’s a challenging balance to find.

Can others decide if you are a good programmer? I find this one a little easier to accept, although it can also be misleading. People may want to be associated with you because it seems beneficial for them or political reasons, and treat you like a god. Perhaps they are intimidated by your elevated position and have no choice but to act as if you are significantly better than they are, even if that’s not the case. Perhaps they follow you because they can see that you are capable, willing to help them, and that everything you deliver always works—people like working for leaders who seem successful. None of this means you are good; maybe you are just lucky or connected.

Is there some industry award that says you are good? Perhaps you excel at programming competitions, hold numerous certifications, or have a PhD in Computer Science. Maybe every actual project you deliver is terrible. Are you now good at those things, but bad at shipping, so are you a bad programmer? It could be because your employer is awful at supporting you, so no matter how good you might be, you can’t deliver if you are not permitted to do what is required to ship quality.

Who gets to decide if you are a good programmer? The industry, Hacker News commentators, your employer, your peers, that crazy guy who posts on X, or your mom? It’s tough to agree on what a good programmer is, much less who gets to decide.

When do you become a good programmer? Can you be a terrible programmer for a long time, then slowly or even suddenly become a good one? It’s still the same problem: defining what is good, who decides, and what kind of criteria or comparison can be used.

Ultimately, the definition of a good programmer is highly subjective and can be challenging to pin down. Do I think I was a good programmer? I do, yet do I think I could have been better? Every good thing I delivered could have been done better, faster, with fewer people, or in less time. Everything I delivered might have been improved by someone “better” than me in some way. Yet I was there, and we didn’t have a “better” person, so it had to be me. Sometimes the company couldn’t afford a “better” person, or didn’t want to hire them, or didn’t want to search for or pay for someone else. I was there, and generally, I delivered software that worked. I may be just good enough for the situation, but anyone could have done better.

Comparing yourself or others to theoretical alternatives is a tricky thing. I have seen a lot of software in my life, and some of it was amazing, and I was sure I could not have built it. Yet I have also seen horrific projects that I know I would have done a better job at, and sometimes found myself fixing other people’s terrible projects. Few people have ever taken over projects I wrote, so I don’t know if they would have felt the same way, or if I had never heard from them.

So, am I a good programmer, or not? I think I was, but what does that mean, since defining a good programmer is so hard? I know people have hired me several times because, in the past, I had done something they thought was good, and had team members who respected what I wrote (even when leading teams, I always wrote as much code as everyone else), and wanted to work with me. Maybe they thought I was a good programmer, perhaps they had some other reason.

In the end, being a good programmer is something you want to be, even if you don’t know what that means. Never be satisfied that you are good enough; always learn something new, and never be afraid to listen to others who might know something you don’t.

When you retire or stop being a programmer, you can look back and decide if it was a good life. That ultimately is good enough.


See my generative art at https://andrewwulf.com.