Technology Manager, Poet, History Maniac. Also, a prolific writer on varied topics
There are many definitions, characteristics, and qualities of a good programmer and a lot of talented programmers and writers have already explained the same, succinctly in various mediums. So there is no point in me, adding yet another two cents to the humongous information available all around.
But what I would like to say here, is a simple one-liner that was advised by my mentor years back when I stormed into the software industry.
Good programmers are smart, not clever.
A smart programmer combines natural intelligence with the ability to judge the consequences of his action in the future. They know exactly what code they are writing, why they are writing, and how the code will impact them in the long run. In short, they are not Band-Aid developers. They believe in fixing the disease once and for all.
Clever programmers, on the other hand, are fast, quick, and know all the dirty ways in the world to make a code ‘work’. But over time the bandages and duct tape build up and one day the code simply crashes along with the reputation of all developers who had worked on it. That is why Steve McConnell had righty said.
“Programming is not like being in the CIA; you don’t get credit for being sneaky.”
And good, smart programmers follow the complete cycle of the Kubler-Ross model to conquer problems, learn from them, unlearn certain things and again relearn again. The cycle continues on and on and they become better and better in their work.
Let me explain.
The Kubler-Ross model was proposed by Swiss-American psychiatrist, Elisabeth Kübler-Ross, in her 1969 book called Death and Dying. It outlines the stages of emotions experienced by a person in relation to grief. This concept has since been extended and applied to any situation relating to change and betterment.
Kubler-Ross said the stages can last for different periods of time and will replace each other or exist side by side at times. In fact, she called them defense mechanisms or coping mechanisms that we need, to move forward and become better in our jobs.
And the mark of a good programmer is not to get stuck in any stage but to persist on till he/she reaches the 'Acceptance' stage of knowledge acquisition and problem-solving.
Let's look at how good programmers react in each of the stages.
Shock and Denial
"I can't believe it", "This is so frustrating", "Not to me!", "Not again!"
The denial is the first stage in the Kubler-Ross Model and is mostly short-lived. This is the natural reaction of the mind when it encounters an unsolvable problem or faces something ‘new’ that it has never seen before. You are numb due to your ignorance and you attempt to deny the problem away just like the ostrich hiding its head under the sand, hoping nobody will see it.
Bad programmers tend to remain in a state of denial for a long time and may even lose touch with reality. They try to either shove the problem away to somebody’s else’s shoulders or refuse to accept their ignorance and inability to solve the problem.
Good programmers face it heads on. They don’t get overwhelmed by the problem and after the initial shock, they try to absorb the magnitude of the problem in small bits. They communicate with other programmers, engage in one-to-one discussions, and do anything and everything possible to gather information to “break” the problem at hand.
Frustration and Anger
“Why me? “, “I cannot accept this “.
This stage comes when you realize that there is escaping the issue at hand. The realization finally hits and you become angry and the anger can manifest itself in several ways. You become angry at your incompetence. You become angry at the client asking for this ‘stupid’ requirement and you may vent your frustration at your colleagues for not able to ‘support’ you at this crucial juncture.
However, this is the ‘danger’ zone of the model, and anger can become more dangerous if it develops as underlying negative energy. This will block your mind and impede your progress. Bad programmers lose out at this stage and divert their energies in “blaming” others for their inabilities rather than focussing on the problem at hand.
Good programmers, on the other hand, give themselves time to weather off the anger and then channelize their energies in careful planning and preparation towards finding a solution. Whether it is approaching someone for help or learning a new language or even going back to basics, they are all game for it.
Depression and Bargaining
This is the lowest point of the curve and is the “make or break” stage for any programmer wanting to improve his craft.
When the stage of anger passes away, one may start thinking about ways to postpone the inevitable and try to find out the best thing left in the situation. Then the bargaining comes into the picture.
“What’s the point, if the system has to be changed in a year anyway?”
“Can the customer change his business process for now?”
“This code is way too mucked up to be refactored. No point of wasting time on it.”
“I am leaving this project in 3 months. Why should I care?”
And so on…
That said, bargaining can take different forms, but the objective is mostly the same; either get rid of the problem or live with it for now. This is an emotional stage for every programmer and succumbing at this stage can prove detrimental to him/her career. A bad programmer bargains into finding “quick fixes” or Band-Aids” while ignoring the real problem at hand. Over time, these quick fixes turn into quicksand and convert his code into a morass of unmanageable spaghetti code, that nobody wants to touch.
A good programmer, on the other hand, uses the initial bargaining thoughts for finding a long term solution for the problem. He dismisses the unworthy ideas and only persists with solutions that holistically work towards fulfilling the requirement. This is a very difficult stage in which the person tends to feel sadness, fear, regret, guilt, and other negative emotions, and persistence, and being positive are the keys of success here.
Lastly, learning and acceptance
"It's going to be OK.", "I can't fight it so I will prepare for it."
Learning and acceptance is not always a happy zone as this is the stage where you move out of your comfort zone and attempt to learn something new that you have never done before. You will make mistakes and you might be also low in morale and excitement due to the steep learning curve. For the first time, you start entering into the tunnel saying, “OK. Let me go in the darkness and hope for some light at the end of it.”
If you have come up to this stage, you are a resilient and persistent programmer who wants to learn new things and explore new opportunities. You have reached to a point of peace and prepared to take one, whatever has to follow next. Acceptance is the stage when positive energy comes back to the peak. It is important to celebrate this moment, as it is here that you go back to positive productivity. The road may have been rocky, but it is now time to celebrate, move towards a brighter future and expect more victories on the way.
Remember, acceptance is not the end of the curve. Rather it is the beginning of a new learning curve within you where you learn a lot about yourself and shift the glass ceiling of your limitations to the next level. Be proud of it and acknowledge the bravery, that acceptance takes.
Although she does not include hope as one of the five stages in this model, Kubler-Ross adds that hope is an important thread that joins all the stages into a seamless learning journey.
This hope contains the seeds of our change. This hope is a powerful indicator that even in the most difficult circumstances there is an opportunity for growth and learning. Hope lifts our eyes and spirit to the horizon ahead and within our hope, we see better days ahead, better opportunities, fresh attitudes to climb, and new actions to take.
As Desmond Tutu has rightly said.
“Hope is being able to see that there is light despite all of the darkness.”
Umesh Chandra Bhatt from Kharghar, Navi Mumbai, India on January 21, 2021:
Very interesting article. Thanks Ravi.