Ask a hundred people what the cloud is and you’ll get a hundred different replies.
Ask a hundred different people what a computer programmer does and what, if any, the difference is between a programmer and a software developer, and you’ll also get a hundred different replies.
Ask me what the difference is, and this is what I’d reply…
I divide people who write programs into three groups:
Anyone who can write some code that compiles and runs, which will do something they want when its given the right inputs. This could be a program, a script, some classes or a library. But, is it robust enough to handle inputs unanticipated by the coder? Is it the most efficient code possible? Can anyone else can compile and run it, understand how it works to improve, extend or fix it? Will the coder, six months from now, still be able to understand it or even know where to find it? Alas, all these are unknowns.
A programmer writes code (well, duh!), and also knows how to structure the code so that it is modular, robust and efficient.
A programmer is a coder with good habits. Programmers know how to write tests to ensure the correctness of the code, and value these tests because they make life easier when it comes to fixing bugs or making enhancements. Programmers know about version control and use it as an essential tool in their arsenal, which allows them to explore alternative implementations. A programmer will comment and document their code, because they know that it will help others who use their code, and themselves if they want to improve, extend or fix their code in the future.
A programmer who can do a whole lot more! Software development is more than just programming, and being a programmer doesn’t make you a software developer.
Software is a product and, as for any product, there are myriad activities involved in its making. These range from discussing requirements with potential users, assessing the strengths and weaknesses of available products, producing designs, assessing trade-offs, working with users to identify bugs and the need for improvements, writing user documentation, preparing releases, training users, providing support, and doing fixes and modifications. A software developer does not view their role as solely to write code.
And that’s the difference, to me. Though it is reassuring to find I am not alone, as this article by a manager of a small software company makes clear (the title says it all) Small ISVs: You need Developers, not Programmers.
From coder to software developer
How does this relate to the Software Sustainability Institute? My long suffering office-mate, Mario Antonioletti at the EPCC, said that coders and programmers produce code as a means to an end, whereas software developers see code as part of the end itself. A researcher who quickly puts together some code may not be interested in good software-development practice as long as the code produces results. I write programs as a fundamental part of my job as a software developer. The programs are an integral part of what I deliver, so I am interested not only in the results, but also in the quality of the code itself.
In addition to publishing research results in journals, there is a move towards ensuring that research data, and the programs that produce the data, are also made available. This will allow others to validate research results and build on them. Making programs available in this way will require researchers to value their code more importantly, and see it as another research output. It will require a move from the mindset of a coder into that of a programmer and, eventually, into that of a software developer. And the Software Sustainability Institute is here to help researchers do exactly that. Explore our website, check out our ever growing set of online guides or contact us if you want to know more!