Get the right people on the bus, then figure out where to go
— James C Collins, Good to Great, 2001
Great people make great companies. In the software industry the “10x” theory is widely accepted and often quoted by industry leaders. I totally agree that some programmers or software developers can be more much productive than their less gifted or less hard-working fellows. From my personal experience, the “who” is much more important than anything else in software development.
So what makes a great programmer? When we think of one, we traditionally imagine a geek wearing glasses and a stretched sweater, who has won a programming contest, and who can mentally multiply six-figure numbers and read a computer code right in binary format. Nevertheless, are there any other hints that would help us to sift out a great programmer from the crowd of good ones?
I decided to ask 65 people from both boutique software development company and a public listed software development company in Malaysia to list 5 traits of a “great” programmer. I intentionally emphasized that in becoming a great programmer, being just “good” is not enough.
47 answered me. Only 33 of them were folks directly involved in the software development life cycle (e.g. system analysts, system architects, and testers), the rest of the respondents (14) were from “non-technical” and “human” sectors (managers and sales professionals). I analyzed their answers by keywords and identified 6 traits of a great programmer. I discuss the traits below by portraying a great programmer as a “Master of many trades”.
1. The Artist (“passion” for programming)
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.
— Linus Torvalds
An Artist is a creative individual with great passion. This powerful force drives one’s actions and determines what one does with life. More than a half of the respondents used the word “passion”.
The great programmer in our study is not the typical “nine-to-fiver”. It is not the fear of financial instability brought him (or her) to this occupation, Programming is their most beloved hobby. From my experience, you can find the best programmers using their spare time building apps with their friends or learning about new technologies. “Living in a computer” isn’t a good trait for a sane world of consumers, but it’s just the right characteristic of a genius and slightly “insane” Artist whom you are looking for. So, during an interview for a software developer job, ask about the person’s hobbies.
Such passionate people are ready to fag away at the problem until it is solved even after the work hours are over. They have a habit of digging into the code, going into the heart of the matter and crave for understanding about what happens there when it is being executed, while mediocre programmers would leave the code as it is as soon as it fulfills its function.
One of my colleagues (a brilliant programmer) once told me, “If you don’t see any programming books on the bedside table, don’t hire him.”
2. The Designer (ability to “understand” and “design” what people “need”)
A lot of people in our industry haven’t had very diverse experiences. So they don’t have enough dots to connect, and they end up with very linear solutions without a broad perspective on the problem. The broader one’s understanding of the human experience, the better design we will have.
— Steve Jobs, Wired, February 1996
Anyone who creates tangible or intangible objects can be referred to as a designer. Wikipedia explains design as a roadmap or an approach for someone to achieve a unique expectation. My respondents described a great programmer as someone who can see the “big picture” and understand what clients really “need”.
I came to a conclusion that a great programmer would take a step further and understand, not only what client is asking for, but also what they “need”. It’s quite challenging for most programmers as they feel more comfortable in their hardware. Going beyond the computer and having the ability to see real people’s needs and how your business can meet them are what differs a great programmer from a good one. A great programmer would understand and feel for the business he works for and come up with his own solutions – not just execute an order.
3. The Carpenter (attention to “quality”)
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
— Bill Gates
If you have watched any of the antique reality TV shows, you would have come across beautifully crafted pieces of furniture that often are several hundred years old. They are made by great carpenters with great attention to detail and quality. Like a great carpenter, a great programmer takes pride in the workmanship and quality of the code. He writes a code that is maintainable the same way a great carpenter creates furniture that serves for hundreds of years.
From my personal experience, a great programmer writes codes for others. He knows that someone else might maintain his code, and he refuses to “lose face” before his colleagues.
Martin Gold once told, “Always write code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
When coding, remember a KISS formula: keep it simple and short. It’s a sure way to create the code that will be expanded and reused in the future – and won’t appear on the dustbin of history.
4. The Student (is curious and permanently learning)
The important thing is not to stop questioning… Never lose a holy curiosity.
— Albert Einstein
According to the respondents, to be a great programmer one must be a student for his entire life. Software developer training is a must as technology is always evolving, and the skills and abilities a programmer has today will be outdated in a couple of years. Thus, it’s absolutely critical that in becoming a great programmer, one has to follow the latest trends and never stop learning.
New software development tools, APIs and frameworks emerge every day. It’s challenging to comprehend such a mind-blowing amount of new information, but great programmers never lose heart because they know the secret: fundamental knowledge is changing but not so fast. The situation reminds me of a sea: a lot of rapid streams are raging on its surface, but in the deep, the waters are calm. Great programmers plunge deeper into fundamental knowledge. When you know the base, learning new frameworks isn’t hard at all.
I believe enormous pride doesn’t let great programmers drop behind new trends. They simply can’t accept the fact that anyone knows more than them. Many really good developers became pros after years of reading other programmers’ open source codes and learning from them. Don’t neglect someone’s experience, especially the great programmers in history, if you want to write better codes.
Great programmers always look back and ask themselves: “How does my code today differs from the one I wrote half a year ago? Is there any progress? How have my views on software development changed within this period of time? When was the last time I wrote something because of my curiosity, not just as a task assigned?”
5. The Mentor (loves sharing his expertise)
In learning, you will teach, and in teaching, you will learn.
— Phil Collins
A mentor is someone who shares his wisdom and knowledge with a less experienced colleague. A great programmer can’t wait to share his knowledge with other developers.
All programmers love grazing on the pastures of forums and groups. But great programmers come there to feed others. I believe it’s “pride” to show off your brilliant skills, but it serves well for both the mentor and people being mentored. Helping others is a powerful teacher: when you make someone’s problem and its context out, ponder over it and suggest a solution, YOU learn more!
6. The Doctor (“debugging skills” and “analyzing” the root cause)
Debugging is twice as hard as writing the code in the first place.
— Brian W. Kernighan and P. J. Plauger
Like a great doctor, a great programmer focuses on the root cause of a problem instead of just fixing the symptoms. If you treat only the symptoms, the true cause will still be there and the symptoms will eventually come back. Writing a code is only a part of a programmer’s job. When the software doesn’t work as expected, instead of spending hours blindly making changes, a great programmer would scrutinize the code until he finds the bug.
A skilled debugger must have a perfect mental model of his code. He wouldn’t start scribbling the code until he has thought out the program’s structure. A pro developer can mentally build the program even if he were looking at how the clouds float across the sky. Richard Pattis once said, “If you cannot grok the overall structure of a program while taking a shower, you are not ready to code it.”
Success in programming comes to passionate geeks. If your passion has spent itself or you have never had it, you may want to consider changing your profession rather than waste your time on writing codes that have no future! But if your passion is boiling in you, then never quit pushing yourself forward whatever painstaking efforts it costs you.
I believe that all successful people work very hard. Passion (or talent) alone is not sufficient to be a great programmer. To be the best programmer ever, you have to work hard and do your very best. One of my brilliant colleagues once said, “Genius is less about genetics and more about grit, practice and developing a craft”.
Richard St John calls people (like Bill Gates) that have fun working hard for “workafrolics”. Success comes when you have fun working hard!
“All good things come from hard work and doing your best”
-Greg Zeschuk (Game Developer)
If you are a businessman looking for a cool geek, I hope this article has given you ideas on asking the right questions for the job interview. Good luck in finding your Great Programmer!
Please tell me what’s on your mind. Do you agree with me? Think I’ve left out some important traits? Or do you have an alternative perspective?