During the darkest hours of the design process when deadlines have passed, bugs are running rampant and the light at the end of tunnel is a dimly lit memory, the search for great programmers begins. These fabled wizards of industry can turn a dying program into a thriving reconfigurable and bug-free product at the drop of a hat. Design teams lucky enough to have one of these magicians on staff hardly understand the pain of delivering a product late, over budget or bug-ridden. Lurking in the back of the minds of engineers familiar with these individuals is a burning question: “What are the secrets to becoming a great programmer?”. It is a question that is best answered by examining the characteristics and traits of great programmers. Only then can an engineer emulate these behaviors in the hopes of one day becoming a great programmer.
Great Programmers …..
Write structured, maintainable code
The success or failure of any program is tightly coupled to how well it is structured. A poorly structured program will quickly descend into chaos as requirements change and features are added. Great programmers are masters at developing highly structured code that is adaptable to the changing needs of the customer. They also recognize that despite their expertise of C language constructs, writing clever, cryptic code is often not maintainable by other developers and therefore they focus on keeping things simple and easy to understand by everyone.
Recognize and reuse design patterns
Development cycles are getting shorter and shorter, budgets are tighter than ever and products are expected to include a plethora of advanced and standard features. Starting from scratch and reinventing the wheel with each new development cycle is not an option. Upgrading to new and more powerful microcontrollers cannot cause delays in the schedule or budget overruns. A great programmer is able to look at the problem or product at hand and recognize solutions that already exist and pull those patterns into the design in order to shave time and money from the development cycle. After all, who wants to reinvent something that has already been done?
Document their code in a clear manner
Documenting code so that it can later be understood by a maintenance engineer is in itself a work of art. Making sure that the right information is provided, that it is clear, understandable and up to date can be an enormous undertaking. It often requires skills beyond programming such as an understanding of the English language to properly convey clear meaning to the program. Great programmers document as they go and as they make changes to the code. They don’t rely on having time at the end to go back and comment their code.
Thoroughly test their work
Providing someone with code that has fatal flaws or bugs that is easily caught is an abhorrence to a great programmer. They pride themselves in being able to hand over their code and have it run flawlessly. For this reason great programmers have a deep understanding of how to properly test a system and how to force any bugs to rear their ugly heads. This is often done through static code analysis, testing and even code reviews with peers.
Are passionate about writing code
The fact of the matter is that great programmers love writing code. They don’t mind writing code into the late hours of the evening and into the early hours of the morning. They don’t only mind writing code but also enjoy sharing their experiences with other engineers and often spend many hours interacting with others on websites discussing the finer points of programming. This passion helps drive great programmers to be the best they can, resulting in their legendary status. The bottom line is that for them, writing code is just good fun!
Never stop learning and sharpening their skills
Stemming from their passion for their craft, great programmers have a ferocious appetite for knowledge. They consistently put aside time each week to read articles, books, write code and try new techniques. They recognize that this industry is changing quickly and to stay on top of it requires dedication to keeping their skills sharp! This can be done in as simple a way as using lunch hour every day to stay current or spending time over the weekend.
You will rarely see a great programmer back down from a challenge. It’s what they live for. They want to push their skills to the limit and beyond. They jump at the chance to rise to challenge where less experienced engineers would pass. Great programmers aren’t afraid of failure because of the lessons that can be learned and the fact that they often don’t believe in failure. They do whatever it takes to get the job done even if it is mission impossible.
Are humble and adapt to change easily
Pride and arrogance are traits that are rare in great programmers. One of the primary reasons is that they recognize their own limitations. Failure to do so often results in a humbling experience which puts their pride back in check. A humbling experience usually results in embarrassment, explanations, buggy code, etc. The great programmer knows that techniques and technologies change quickly and that expertise is fleeting and greatness elusive.
Strive for perfection but identify limits
Writing a perfect, bug free program that is elegantly written is a goal of every great programmer. There is a dream in creating a perfect system that helps fuel their own ambitions. It is present in most programmers but the difference is that the great programmer knows where they can fall short of perfection but still deliver a robust bug-free system. Despite the need for perfection, there just isn’t enough time in the design cycle to create and prove that the system is perfect.
Ask the right questions
It’s easy to ask questions about a system and get a basic understanding of how it works. Great programmers have a gift for looking ahead and being able to ask questions that peel away the layers of a system. Their seasoned experience is able to reveal pitfalls and stumbling blocks that might otherwise have been overlooked. They are able to peer into the soul of a product and bring it to life!
Great programmers are patient. Rather than jumping into a system and starting to bang out code they resist the temptation and instead architect it out first. They may go weeks doing research, developing flowcharts, state machines before ever sitting down to create the main function. When problems and difficulties arise, they patiently and calmly work the problem, knowing that with patience eventually the solution will present itself.