What transforms a good programmer to a great programmer? It takes more than coding and technical knowledge to make a program. After all, programming is very much like a craft—where you diffuse your imagination, and other qualities, with the knowledge of the craft to make something new. This is what distinguishes a James Gosling or a Tim Berners-Lee from a hoard of other programmers. And most importantly, the qualities that make them great were not in born. They can be acquired and mastered.

So, here are the five skills that, according to me, are the qualities of a great programmer.

Problem Solving

“There are very few inherently hard programs. If you are looking at a piece of code and it looks very hard – if you can’t understand what this thing is supposed to be doing – that’s almost always an indication that it was poorly thought through. At that point you don’t roll up your sleeves and try to fix the code; you take a step back and think it through again. When you’ve thought it through enough, you’ll find out that it’s easy“.

-Bernie Cosell

Why do you code? To solve a problem. Therefore, before beginning, a programmer must know how he can solve a problem. To do that, he should break a large problem into smaller problems and solve each one individually. Once the solution is planned, a great programmer will always sequence the solution in a way that is easy to understand, implement, and test. Only then, he will be able to get rid of the “inherently hard programs.”

Scenario Analysis

What happens if this argument is null? What if none of these conditions are true? Is this method thread-safe?

These are some questions that every great programmer asks. A great programmer is always good at anticipating the challenges the program has to face. He relentlessly searches for the scenarios where the program has to work. An ordinary programmer does not challenge himself. He takes the happy path and assumes that everything will go down well, as per his plans. But, a great programmer knows no short cut. He thinks like a tester and hunts down the shortcomings till the programming is perfect. He even understands that the unpredictable will happen and develops his program to cope with that.

Nomenclature

“There are only two hard things in Computer Science: cache invalidation and naming things.”

-Phil Karlton

The quote is not an overstatement at all! Naming all the components of your program is a huge challenge and great programmers know that. A great programmer will always use a naming convention that is self-explanatory: reading the name of the code itself will explain its nature and purpose.

Naming a code is not as easy as it sounds. Sometimes, the nature of a code changes as you develop it further. In such cases, its name should change as well. In other words, renaming is as important as naming.

Consistency

“A good architecture is consistent in the sense that, given a partial knowledge of the system, one can predict the remainder.”

-Fred Brooks

Consistency is perhaps the biggest challenge for a programmer. In an ideal world, a program should be so consistent that our brain should not worry about exceptions. This is applicable to all the fields: naming, grouping, divisions, structure, error handling, GUI, documentation, logging and so on. For example, if you have written two relevant variables together, you should always write relevant variables together. This way a person can easily identify a variable that does not have a relevant pair. A great programmer uses consistency to reduce complexity.

Learning

“It’s a curious thing about our industry: not only do we not learn from our mistakes, we also don’t learn from our successes.”

-Keith Braithwaite

Only a great programmer is always open to learn. He learns about an existing code, before adding a new code. He learns about a feature before adding it to an existing program. He even learns from other systems to ensure his code sync perfectly with them.

Additionally, the software engineering industry is growing extremely fast. New language, tools, frameworks, and techniques are cropping up almost every hour. It is so essential to learn them and keep yourself abreast. A great programmer does not miss this opportunity.

As you can see, these qualities are generic and not technical. What’s more, they can be acquired, practiced and mastered. So, are you ready to walk the talk and distinguish yourself? These five basic and universal qualities can be the ideal starting point. The future can be yours. Start today, start now.

Source *  http://www.shibajidebnath.com/