I’m sure most that have introduced themselves into a general group of people as a Software Developer, have been met with this response or one of its variants, such as “is that like programming?” – While I’m fairly certain that every developer is fairly sure in their own mind of who they are and what they do, I’m equally sure that while we initially attempt proper explanations we all eventually degenerate our answer into a generic “I work with computers”, or “I’m in IT”. So then, who are we, and what is it that we do? Before we attempt to find a suitable definition for a software developer, let me first explain what we aren’t.
To best understand the developer’s role in a project or organisation, we should take a brief look at the industry. IT has become a catch-all phrase for anything that has anything to do with computers. This is, of course, a layman’s view, and should be corrected where possible and appropriate. Information Technology (IT) is yet in its infancy, but has reached the stage (as every toddler does) where it claims everything as their own. In the real world, IT is only coincidentally linked to computers, simply because computers are the primary tools being used in the industry. For the purpose of this discussion, we will consider the Information Technology- and Computer Industries as mutually exclusive. As developers, we use products from the Computer Industry to create products for Information Technology. Saying that we work with computers is sort of like saying that car manufacturers work with steel – it’s a fairly pointless statement. Similarly, IT is such a wide industry that saying that we work in it no more explains our function than stating that a fish swims in the ocean would suffice as an explanation of its biology.
Thus, having efficiently explained the inefficiency of such broad blanket statements, we are now more than ever in need of a succinct definition for our being, lest we lose our identity and start running through the streets naked. Come to think of it, that might not be all that bad… but I digress.
So what of the question of programmers? Is there, in fact, a similarity? More pointedly, is there a difference? Contrary to popular opinion, a software developer is NOT a programmer. Sure, much of your time is spent coding, but that’s really not what we do. I can almost hear the disgruntled objections of the audience, allow me to elaborate…
A programmer, in my humble opinion, is a more “pure” coding discipline. By that I mean that programmers rarely need to do anything other than code. In a programmer’s world, there are analysts that generate specifications, testers that make sure the software is robust, copy writers that draw up user documentation, and project managers that tie it all together. A programmer is usually someone that has a very deep technical knowledge in a particular programming language, an expert in their chosen technologies. If I appear slightly hesitant, it is because I don’t want to ruffle any programmer’s feathers. I have a solid respect for the profession, having pursued such a role for many years, and I want to make it clear that I’m not belittling it in any way. Nevertheless, a programmer needs to focus on one thing… programming. They need to push themselves to write better, more robust code in a shorter time than the next person. It is a difficult role to crack, and demands a very specific personality type.
Right, time to wrap this up… let’s get down to the crux. Here is the skill set that a good software developer should employ if they are to distinguish themselves in this ruthless industry:
- Be an advanced-level programmer.
- Understand the business value that the software will have, and help in the design process to maximise this.
- Understand software architecture, specifically the benefits of certain technologies for specific situations.
- Have a good appreciation for design considerations, their impact on the end user and specifically the user experience.
- Be creative in terms of visual design whilst maintaining a healthy balance between creativity and a professional appearance.
- Write software that can be easily understood by others, because your software inevitably will end up being maintained by someone else.
- Create a suitable software framework and, if such roles are delegated to experts, coordinate the work between designers and programmers.
- Manage the development process… this is very much a project management role; centred on the coordination of tasks performed by different people, risk analysis and –mitigation, planning, etc.
- Manage client expectations and –involvement.
In conclusion: A Software Developer is a person who is able to successfully combine the roles of Project Manager, Business Analyst, Software Architect and Programmer into a single multi-functional creative entity, with the primary goals of solving business problems and maximising the value added by the solutions. Naturally the versatility and efficiency of Software Developers will vary depending on the individual and their work experience, such that some Developers might not be as strong as others in – for instance – Architecture or Project Management. Nevertheless it should be the persistent goal of any Software Developer to continually further their abilities in all these fields.