A coder, developer, programmer, software engineer — all these roles are synonyms in the modern-day. 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 reminded of a dialogue in the Bhagavad Gita. In the second chapter of the text, the master expounds on 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 talking to me about this state of enlightenment and all; but can I request you to also point out how does one recognize such a man of enlightenment, in the sense, how does he sit, how does he talk, how does he behave, and so on? This is a great question, a nagging question that bothers most of us, 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 of a talented individual? Let’s try to answer this question in the field of software programming. For over two decades now, I have had the opportunity of observing and learning at close quarters different types of programming paradigms, software languages, platforms, and teaching thousands of developers who happened to work on them. At this distance, when I step back and reflect, I can think of at least five characteristics that mark a good developer/programmer.
First: Writing a program is akin to writing an essay. The overall objective of the task, the creative journey, and the style is more important than individual snippets of code. Many Junior programmers focus on the code at hand, and never pause to think if the code conforms to the programming paradigms and the style expected. For instance, under the guise of writing Object-Oriented code, less experienced coders would end up writing structured code. Thinking about approach and methodology does not come naturally to many developers. The moment the problem statement is shared, they instinctively plunge into coding. This is the first and unmistakable sign of a junior developer, who has not yet matured. And when this happens, you immediately know the developer is still evolving. Now, this is not a wrong approach. Syntactically, the code you write may work well, but the solution may not be optimal. Talented programmers, on the other hand, pause, think, and generate a mental model of what is required, only once that is settled in their mind, they put their fingers to the keyboard to write code. And the code produced in such a manner stands out in the first few lines. Each line will exhibit a balanced symmetry, an effortless style, and deep mastery of programming principles which will include proper variable names, accurate type casting, clear and unambiguous function definitions, rigorous logical flow, and precise documentation, among others. Coding is not merely using a software language correctly, just as an essay is not just about proper grammar. There is an artistry to it, which comes naturally to some, but in most programmers, has to be assiduously cultivated.
Second: A good programmer shows the ability to think and write “original” code when needed, and is equally at ease searching the web, picking a template, understanding it well, and massaging it to their needs. Of course, in both cases, strong conceptual foundations are imperative. However, one of the biggest stumbling blocks today, to becoming a solid programmer, is the obsessive dependence on Google search. The culture of “ search, copy, and paste”, without any application of thought, is the worst habit one can form during the formative days of coding. Not only does it atrophy creativity, but along with it buries the critical faculty of independently thinking through a problem before seeking a pre-made solution. Thinking is a deliberate habit, and difficult as well (That’s why it is a rare commodity). However, once a programmer learns how to think independently, and it becomes second nature, then googling becomes a valuable tool to check if alternate solutions exist and how they compare with what they have produced. But first, one’s mind must be applied to the problem, and talented programmers are good at it.
Third: Talented programmers learn to take criticism objectively and can confidently change directions anytime; while others, with lesser talent, resist any critique of their code, and often take it personally. Good programmers, when faced with criticism, attempt to see the rationale behind it. Once intellectually satisfied, they are capable of shifting focus from fanatical ownership of code to accommodating changes and what is best from the application point of view. That shift in gaze, to be solution-oriented, and not possessively code-oriented, is a sign of a mature and evolved programmer.
Fourth: During my active teaching days, I would deliberately refrain from praising someone just because the code worked. Disgruntled students often came to me and said: “Sir, when the code is working well. What are you unhappy about ?”. My answer was, “ A working code is not necessarily a good quality code”. Fresh programmers, just out of college, invariably focus on the output. Output was what mattered for them in college, and the same mindset is carried over to the workplace. It doesn’t take great creativity or talent to get a piece of code working, but to get that code to work with other parts, to ensure it is modular and reusable, to test it thoroughly, and finally validate the code against the framework of the application — is the sign of a talented and focussed developer.
Fifth: Good programmers can often explain their code well. Give them a whiteboard, within minutes, they can detail out the flow of the program. The quality and style of language are unimportant here, what stands out is their incredible understanding of the underlying processes, structure, resources, and integration points of the code. Hardcore programmers are categorized as nerds, geeks, or introspective personality types, but even those who tend to remain quiet become surprisingly articulate when talking about their code.
In conclusion, there is neither a magic wand to produce a good developer, nor a sure way of spotting one. Paraphrasing Albert Einstein’s famous quote, We can never teach someone how to code well, we can only attempt to provide the conditions and best practices to code. The rest is dependent upon the passion and commitment of the developer to hone their skills accordingly. To summarize, when you spot good developers, chances are high that they will possess a quick and sharp intellect, tenacity of purpose, an intuitive appreciation and understanding of coding structures, a methodical understanding of the problem statement, a willingness to learn new things, and above all, a passion for excellence.
God bless…
yours in mortality,
Bala
A very interesting read!
Thanks Asvin
Very useful Article for IT programmers.
Thanks Amma