The Tell-tale Signs of a Good Software Developer
A coder, developer, programmer, software engineer- all these appellations are synonyms. No matter what we call ourselves, the essence of this role is to write instructions using a specific set of semantics that can be translated by a machine to execute a given functionality. This much is understood by everyone who works in the field of software. The crucial and often debatable question is: what distinguishes a seasoned, mature and professional programmer from an average one, and more importantly, how do we recognize such an excellent and perspicuous programmer?
I am oddly reminded at this juncture of the Bhagavad Gita. In the second chapter of that admirable text, Lord Krishna expounds the virtues and acts of an enlightened person. Arjuna glibly listens to him for a long time, and in the fifty-fourth verse of the section, he innocently asks: “Hey Krishna, thanks for telling me about this state of enlightenment and all; but can I request you to also point out to me how does one recognize such a man of enlightenment, how does he sit, how does he talk, how does he behave, and so on?” This is a great question, not merely in the domain of religion, but in all walks of life. How does one recognize talent in any field? What are the characteristic marks in such an individual? Let’s try and answer this question in the field of software programming.
For over two decades now, I have had the opportunity of observing at close quarters different types of programming paradigms, and thousands of developers who work on them. At this distance, If I were to step back, and survey what I have seen and experienced, and trust my gut feeling, I am inclined to posit five characteristics to be the hallmark of a seasoned programmer.
Writing a program is akin to writing an essay or a novel. The overall objective of the task, the creative journey, and the style is more important than the specific paragraphs or chapters. Many junior programmers focus on the code at hand, and never pause to think if the code confirms with the programming paradigms they are expected to embrace and follow. Under the guise of writing Object-Oriented Software Engineering (OOSE), less experienced coders write structured code. They don’t pause to think about methodology. The moment the problem statement is shared, they instinctively jump on it to code. This is the first and unmistakable sign of a junior developer, who has not yet matured. When I observe inexperienced developer to observe, within a matter of minutes it becomes apparent to me that the coder hasn’t understood the methodology. Syntactically, the code may be right, but the essence and understanding are missed. Experienced programmers, on the other hand, stand out in the very first few lines. Every line exhibits a deep mastery and absorption of the programming methodology to be followed: proper variable names, accurate type casting, beautiful function definitions with generic parameters wherever possible, great flow and precise documentation, among others. Novice programmers forget that coding is not merely using language correctly, but something beyond it. It has a broader goal. They are yet to learn that technique is subservient to the approach, and not vice versa.
A seasoned programmer understands the larger picture of his work and prepares for contingencies well in advance. They don't live in sandboxes. They begin coding with the firm realization that a given flow of code is just one possible pathway of execution. Their seasoned brains conjure several other possibilities the execution may take. I once had the great honor of watching one of the founding contributors to Java code in a classroom in front of students. It was a simple enough problem of calculating the volume of a cube. Most of the participants had six to ten lines of code, but when this gentleman walked up the podium and painted ( yes, that’s how it seemed to my eye) his code, a whole new approach emerged with so many different areas of consideration - all of them important to ensure that code is self-sufficient and well modularized. When the final code was showcased, it was nothing short of technical artistry.
The biggest stumbling block to becoming a good programmer today is the Google search. The insidious culture of “copy and paste” is the worst habit one can form during the formative days of coding. It kills creativity, and along with it the ability to learn from thinking through a problem. While seasoned developers use Google too, they are wise enough to use it only to check if alternate solutions are better than what they have created, never to plagiarize.
The third mark of a seasoned programmer is the ability to take criticism objectively and adjust one’s individual programming style to suit the needs of the use case and conventions of the application team. Junior programmers tend to resist criticism and take it personally. They find it difficult to accommodate other points of view. That is natural. After all, they haven't seen much of the world, and have no exposure to opposing points of view. It takes a little while to understand that the jump from junior level programming to seasoned heights requires letting go of obstinacy and acquiring an elastic view of skill sets. The crucial learning, when faced with criticism, is to shift focus from the code to the solution, and do what is best from the application point of view. That shift in ‘gaze’, so to speak, is a sign of a mature and evolved programmer.
During the years I taught Java, innumerable young programmers would routinely become upset with me for chastising them without reason. They would come up to me and say: “Sir, the code is working. Why are you unhappy about it?”. My answer to them was, “A working code is not necessarily a good quality code”. Junior programmers invariably focus on the output. I don't blame them. Most of them were evaluated for output in their college days and they bring that mindset to the workplace. It doesn’t take great creativity to get a piece of code working, but to get that code to work in conjunction with other parts, to ensure it is modular and reusable, to test it thoroughly, and finally validating the code against the framework of the application-marks the transformation of an mediocre developer to a great one.
Lastly, good programmers with a deep mastery of technical skills are good teachers. This may sound counter-intuitive, and the experience of many in the industry would be the opposite. Let me explain. What I mean by good teaching is the senior developer’s ability to explain the framework, components, and interactions with ease. I am not talking about communication skill levels or language. The word practitioner is used when referring to such programmers. Since these developers understand the overall structure and flow better than most. Give them a whiteboard, and they can draw out the architecture in a matter of minutes. The quality and style of language are unimportant here, what stands out is their incredible understanding of the connection and integration points. Of course, the type of personality of the developer and their interest in teaching also matters. But given that everything else is taken as granted, practitioners can be the best teachers. I have had the honor of working alongside many such architects and senior developers, from whose insights, I have gathered a deeper appreciation of this fascinating field.
In conclusion, if you spot a programmer who is calm, composed, writes clean code with quality with the bigger picture in mind, and not always conscious of the immediate outcome; if you spot a programmer who can trash days of coding (without getting personally affected) because it doesn’t fit the framework; if you spot a developer who can quickly breeze through your code and pick the drift and quality of it; if you spot a programmer who thinks through a problem statement before attempting to code, and finally, if you spot a programmer who is patient and understanding enough to explain the application architecture and the role of your code in it - then chances are likely that you have bumped into a Senior Developer with a cultivated flair for software programming.
About the Author
Balasubramaniam N has more than 25 years of experience in IT, with special emphasis on programming languages and databases. In the last decade Bala has focused on evangelizing the full stack development along with platforms, tools and techniques for Big Data and Data Analytics. Bala is passionate about training and has supported the training needs of customers across the globe in skilling their employees to work of specific projects, and in demonstrating Proof of concept (POC) in transforming business processes using refined technical toolsets. At NIIT, Bala heads the Center of excellence for technology for the Corporate learning business, and also leads the Tech Academy - an internal initiative in skilling a qualified pool of mentors across domains. He continues to teach as much he can.