What Makes a Good Programmer?

For me, it is very important to be able to answer this question. I want to know where I stand as a programmer, to know what it is that I lack and what it is that I have.

There are many articles out there attempting to answer this question.

Most of the search results I’ve come across (here, here, here, here) emphasize things like attitude, communication, understanding of the business, and personal interests.

These aren’t the attributes of a good programmer only, but a good professional in general. This is why I will try to narrow the scope down a little bit.

Programmers are in essence just problem solvers whose primary tool is writing code.

With this in mind, here are four main qualities that would make a good programmer that I’ve come up with so far:

4. Prefers abstractions over details, yet can effectively turn abstract ideas into concrete code implementation.

Indicates the ability to focus on what’s necessary. Indicates deep understanding.

Good programmer can easily switch between foundationally similar technologies.

It is highly unlikely that a good programmer who knows Java wouldn’t be able to quickly switch to C# or vice versa. Similarly, a developer who works in AWS be able to switch to Google Cloud. Those are a potAYto/potAHto type of situation. And this is just the most obvious example.

Good programmer rely on understanding rather than memory.

If you were good at math or science in school, then you know that STEM subjects were often easier than non STEM ones. Mainly because of the fact that if you really understood the foundations, you could quickly reason your way through the problem and get to the answer. You don’t have to do rote memorization like with other subjects. Similarly, in programming, you often need to know just enough to be dangerous, but that enough should give you the ability to deeply understand the domain of the work.

Good programmer has the rock-solid foundational knowledge and reasoning skills that can help them to infer all the necessary details.

Knowledge of a programmer is compact, yet through reasoning, search and play they can infer the necessary details.

Good programmer can filter the noise out and focus on the signal. Noise is the details and signal is the foundation.

It is often easy to get lost in the details and forget what is really important. When you work as a software developer, every day there are many endless meetings where people often get into the most boring and needless details. The information sifting process of a programmer is like a good encoder, it can do a lossy compression in a way that is as good as lossless.

Good programmer doesn’t need detailed instructions on how to build something, they only need the specifications of the end result.

This is where the importance of the ability to infer information comes into the picture. A good programmer needs to thrive in the freedom that comes with the ambiguity of the in-between. Yet, they need the concretion of the end result.

Good programmer is good at blackbox testing

Blackbox testing is the testing of the end goal while not worrying about the implementation details. A programmer who can think in abstractions must be good at this because they will be able to refactor their implementation as necessary as they move along.

How can this quality be tested?

So how do you make sure a person is good with abstractions and reasoning? These are the exact qualities that AI today is being tested for. An ability to summarize a given text. An ability to complete a sequence. An ability to create something based on the desired attributes. You can even have an open-book question that relies heavily on reasoning. As far as the “control”, or reference frame, goes, one way could be to actually compete with the AI summarizers.

3. Can work independently, yet able to obtain the necessary feedback quickly.

Indicates flexibility, adaptability, determination, and focus.

Good programmer tries hard to get things done independently before reaching out for help.

There are some people who prefer to ask rather than try themselves. This may indicate good communication skills, but as far as programming goes, you really have to try on your own and fail many times before you reach out for help. It may be very painful when you just start, but in the long run, you become very resilient and don’t get blocked as easily.

Good programmer knows how to not get lost in the sea of information.

Google is a powerful tool, but sometimes the results it gives can contribute to confusion. A good programmer should be able to know how to search for information, how to sift through it, and how to get what they want out of it. Googling is definitely a skill on its own.

Good programmer knows how to experiment.

Trial and error stimulate learning. With computers, it is much easier as, say, in a biological laboratory, as the feedback loop between your question and the outcome of an experiment is much quicker. You run your program, it crashes, you look at the error, you fix it. If only lab experiments were that easy.

How can this quality be tested?

Similar to the previous quality, this can be tested using an open-book question that relies heavily on reasoning.

2. Can get things done. Can fix things. In a reasonable time frame. Even amid chaos.

Indicates the ability to focus, solve problems, and perform.

Good programmer gets from point A to point B.

A programmer who knows ins and outs of a programming language and related technologies, but who can’t get from point A to point B with it is definitely not as good as the one who may not have those ins and outs, yet can get that path covered.

Good programmer doesn’t let perfectionism get in the way.

Every programmer secretly dreams of a perfect project. Usually, it is an app implemented to perfection with the right tools and patterns. Sometimes, when a person starts working on a project, they can get caught up in this trap, thinking that they need to do things perfectly, thus getting stuck early on and losing motivation quickly. Implementation details are just details. And as I mentioned above good programming is good at refactoring and black-box testing.

Good programmer can get distractions and hurdles out of the way.

There are many distractions and hurdles in the programmer’s line of work. A good programmer can live in a world where everything tries to get him off track.

How can this quality be tested?

This quality can be tested by asking a person to finish a task in a given time frame, while trying to distract them.

1. Can maintain focus and motivation for a very very long time.

Indicates the ability to focus.

Good programmer needs to understand why they do something.

An effective programmer does things in the order of their necessity. If things aren’t needed or not stimulating, they just won’t do it. And that’s great.

Good programmer is good at staying focused.

ADHD is an enemy of a good programmer and so is multi-tasking. The ability to do something uninterruptedly, even for 15–20 minutes is fantastic quality.

Good programmer is good at goal-oriented activities.

JIRA and agile are great in this regard. You have a task with acceptance criteria, you check out a branch and solve this specific task. It is quite similar to how quests in RPGs work. Once you finish your quest, you get a small dopamine rush.

Good programmer is good in the long-term, not necessarily short-term.

Getting things done is more of a marathon than a sprint, it’s not about spinning your wheels at maximum velocity, but sticking with the task until it’s finished.

How can this quality be tested?

Similar to the previous quality, this quality can be tested by asking a person to finish a task in a given time frame while trying to distract them.


I believe that the qualities I outlined above are the necessary attributes of a good programmer. I might have missed something, yet I believe I’m not wrong with placing my bet on the ones I chose.

As far as evaluating myself on these criteria, all I can tell you is that there is room to grow, but I’m not disappointed with where I stand at the moment.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store