Coders Vs Software Engineers
The global Software industry is a multi-trillion dollar industry, set to employ over 26.5 Million software developers by 2019. As massive as this industry is, the number is true Software Engineers is tragically small.
I contend that there are three types of programmers:
- Coder Integrators
- Coders
- Software Engineers
Code Integrators:
They function at an application level.
Thanks to search engines and access to an almost infinite amount of free code online, the amount of code that must actually be written by most developers has come down.
A majority of them know to ‘Google’ or go to specific sites that provide free code repositories, copy the relevant code snippet, combine it with other pieces of code, compile it and see what it yields.
These are code Integrators.
The likes of these are analogous to automobile mechanics. They understand the ‘application requirement’, know to scavenge parts from various sources and put them together using a duct tape and bubblegum approach; some do a better job than others.
I am not trivializing their contribution. I am only categorizing them as code integrators.
Coders:
They function at an application level as well. They are more original than the Integrators. They are capable of writing original code when the occasion calls for it.
They function at an application requirements level. They do not necessarily understand the systemic implications of what they do. They have little understanding of the outcome the product that they are working on is set to achieve.
They code to what has been spelt out in the requirements document. They can effectively complete all the tasks that they have been assigned. If it does not complete the product and does not provide the expected user experience, it is the Product Manager’s fault. If their code is buggy, it is the responsibility of the Quality Assurance team, and if the project gets delayed because of the resultant iterations to perfection, it is the responsibility of the Project Manager.
Coders are analogous to Electricians or Plumbers. They are not Engineers.
Software Engineers:
A Software Engineer works at a Systemic level. He works for the business outcome and is hungry to create the best business impact that is possible.
For this, he interviews his stakeholders to understand their goals and needs. He knows the Engineering regiment of blue-printing/ architecting/ designing/ planning and organizing before writing his first line of code.
His choice of tools and technologies are relative to the outcome. He can identify the specific requirements that must be developed as stated, as well as those that are to serve as a guideline or as the lowest denominator. He can list out the implicit requirements that must be factored in, for he knows that the Product Manager may never be able to think of such Engineering elements.
He understands the infrastructure that is needed to support the product and is able to make architectural and design decisions to ensure stability, robustness, scalability, flexibility, extensibility, redundancy and availability. He can benchmark his system as to its throughput, concurrency and resource requirements. He is able to do all this, keeping costs in mind.
To him, the code that is needed to accomplish a goal is but a tool. His code is clean, structured and well documented, for he is thinking of its maintainability even as he writes his code.
He understands and respects his profession. He lives by the engineering code of ethic and responsibility.
It is not easy to be an Engineer. It takes years of hard work, learning, dedication, respect and maturity.
It is not titles, degrees and certifications that make you Engineers. It is thought process, a methodical approach to solving complex problems and the ability to communicate what, why, how and when you are doing, 360 degrees, that makes you a Software Engineer: It is Engineering to accomplish a Business outcome that makes you an Engineer.
What title do you want to give yourself?