The Secret of Great Programming is Motivation
GREAT Developers Stay ABOVE the mark, to HIT the mark.
The keys to being a good developer are well known. Greatness, however, requires something else altogether.
And Steve Jobs nailed this fact to perfection when he said.
“The difference between the best worker on computer hardware and the average may be 2 to 1, if you’re lucky. With automobiles, maybe 2 to 1. But in software, it’s at least 25 to 1. The difference between the average programmer and a great one is at least that.”
If writing code were a science, all developers would pretty much be the same.
Just as in art, no two developers have the same thinking or perception or the subjective truth while writing code for the same outcome.
While some struggle to produce the desired outcome, to a few, it comes almost naturally, as if an epiphany hits them at the moment they sit to create programs or solve a problem.
So that brings us to the quintessential question.
How do you identify a GREAT developer?
To my eye, all GREAT developers have 3 important traits.
· Perseverance — To find the solution come what may
· Practice — Keep honing their skills as a continual activity
· Proactiveness — a deep ability to connect details to the larger picture
And then, there’s one important quality they all share as well which builds the above traits in them.
That is self-motivation.
Yes. GREAT developers are self-driven people and have an extraordinary will to push through any odds. The willingness to stay motivated with a problem until it’s resolved (not to be confused with sitting on a problem), coupled with the ability to creatively solve it, is a highly desired skill or aptitude found only in great developers.
The biggest goal of such self-motivated developers is to get into a mindset where they produce high-quality software all the time, regardless of the obstacles, problems, and self-doubt they encounter.
And this mindset can be developed by following the teachings of a person who lived 2000 years ago.
He was a philosopher, a king and had developed the reputation of being an ideal, wise leader. Plato called him the “philosopher king” in respect.
He was Marcus Aurelius, one of the “five good emperors” in Roman history.
Marcus has remained relevant for 2,000 years largely due to his writings collected as “ Meditations,” which President Bill Clinton has said is one of his favorite books. “Meditations” is closer to a diary than a philosophical treatise.
As it turned out, Marcus Aurelius no matter where he was, even on the battlefield, he self-reflected and wrote his thoughts in this diary. This document is the definitive text on humility, self-discipline, personal ethics, strength, and is considered one of the best philosophy works of all time.
And this book is also one of the best motivational guides available to software developers to be GREAT in their jobs.
And some of the mind-blowing lessons we can learn from Marcus Aurelius can be as below.
Obstacles and Challenges cannot stop you.
“The impediment to action advances action. What stands in the way becomes the way.”
A developer earns his bread by solving problems. We all love to be able to do something creative for the world, for our customer. We love the accolades and the appreciations that come along with it.
But life is not always a bunch of roses.
We do get demoralized when the tester reports a serious bug in our code. We get in the defensive mode when a customer is “not happy” with the functionality provided by us. Our “developer ego” comes to our rescue all guns blazing in our defense and we fail to see the other side of the coin, the problem itself.
Any “bug” or “reported” issue is a great opportunity to self-reflect, see what have we done wrong and learn from our mistakes. We may notice that we didn’t write a test for an issue that we created, or that we didn’t refactor method that really needed that, or we haven’t followed some other best practices.
Every time that life presents you with an obstacle, you must choose to perceive it as quality feedback… And use it to determine your next move.
“Dwell on the beauty of life. Watch the stars, and see yourself running with them.”
Malcolm Gladwell asserts in his book, Outliers, that it takes about 10,000 hours to get good at something. 10,000 hours is the equivalent five years working at a full-time job. Yes, five years is a long time. But, more than the time taken, it is the “willingness” to learn that is important.
You can always say to yourself, “I am not very good at this yet. I am going to make a lot of mistakes. I am going to learn from my mistakes. I am going to ask for help. I am going to surround myself with people who are good at this and learn from them. People in the know will respect me because I am a willing student. I will give myself the freedom to improve continuously.”
The most important thing is the pursuit of excellence. It’s going to take a long time to get good. Sometimes we get lucky. A company might hire you to build up your coding skills on the job because you are a dedicated, conscientious worker. You might also get a paid sabbatical for your learning!!!
But, don’t expect recognition right away for anything other than your dedication to excellence and complete willingness to learn. All good things take time! Keep running after them.
Believe in Yourself.
“Waste no more time arguing about what a good man should be. Be one.”
So many developers have an opinion on “how a good developer” should be.
“Jack is a rock star. solutions come to him without any effort. He always gets the best assignments.”
“Mary is a code express. She can finish whole projects in one go.”
The truth is that we all very well know how Jack and Mary do it consistently. But we still fool ourselves.
The only way to be good at anything is to practice it relentlessly. We all know how high-quality code looks like, and how many bugs it has (zero, or close to zero). We already know what techniques people that wrote this code used. The only thing we need to do is repeat that every time.
Everything you’re trying to reach — by taking a long way round — you could have right now, this moment. If you’d only stop thwarting your own attempts. Get rid of your false “insecurities”, “weaknesses”, you are motivated to “fix” while conveniently ignoring the “real” issues.
Don’t fix what’s not broken. Instead, focus on the resources that are available now. They’re all for the taking.
If You Have Never Done a Task Before, Most Likely You Are Going to Mess Up. Accept it.
“You don’t have to turn this into something. It doesn’t have to upset you. Things can’t shape our decisions by themselves.”
Few people get it right from get-set-go. When I started coding for the first time, I found myself incompetent, not due to lack of desire, but rather to lack of experience. Nonetheless, I beat myself up. It took me a good while to accept the fact that that the odds of getting something right on the first attempt are not in my favor.
So, I let myself off the hook and did the mature thing. I planned for my failure. I accepted that I was going to get it wrong the first time.
In software lingo, the “first” release is not always very good. That’s why we have Alpha code. It’s not meant to be production quality. But, we have to go through Alpha code to get to Beta and finally onto a version that can handle the stress of a production release.
The slogan “It takes three shots to get it right” really hits bang on the nail.
If you don’t BEGIN, you will never COMPLETE.
“Begin — to begin is half the work, let half still remain; again begin this, and thou wilt have finished.”
We have so many reasons for NOT doing something.
“The HANA course starts next week. But it clashes with my project timings”
“I would love to enhance my ABAP coding skills to the OOPS version. But we do not have any projects in that. What is the use spending time on it?”
“My company is not investing in my training. What can I do?”
And thus we end up not even BEGINNING what we want to do.
We may have multiple reasons why we are not starting certain projects and implementing certain ideas, and the most common is the fear of failure or more precisely “the fear of messing about”. We don’t want us to be a victim of ridicule and half-baked knowledge.
Messing around is a vital part of the development process. It helps us to develop the sense and sensibilities to survive disruptions and stay ahead in the game.
When I cut short my messing around time, I find myself spending hours engaged in correcting mistakes that could have been avoided, had I known “what to be done before”.
So the best time to BEGIN something is NOW. Once we start working on our projects, we will find out that our tasks are not impossible. They can be hard or tedious, but they are not impossible.
Eventually, we will gain momentum and finish things that we’ve been putting off for years.
Bringing it All Together
Let’s face it, coding is unlike any other skill. It’s a distinct discipline requiring a special set of skills and experiences. Also, coding is not a manual activity. Other than slamming away at a keyboard, all the work is done in your head.
All this requires constant motivation, zeal and an insatiable curiosity to learn every single day. Each learning experience contributes to that “GREATNESS” of the developer and adds new perspectives. Coding, thus, is not merely a job in life, but a facet of a unified life of constant creativity and soul-searching journey.
For me, Marcus’s philosophy is not a silver bullet or a “one-cure-all” solution for all my problems. But it is certainly a great tool that we all can use to become better in our craft, better our perspectives, and be better prepared to face the disruptive future.
As rightly observed by Marcus Aurelius
“You have power over your mind — not outside events. Realize this, and you will find strength.”
About the author-:
Ravi Rajan is a global IT program manager based out of Mumbai, India. He is also an avid blogger, Haiku poetry writer, archaeology enthusiast and history maniac. Connect with Ravi on LinkedIn, Medium and Twitter.