There are many characteristics on which a software developer may be evaluated. Many of these related to specific areas of expertise such that a developer may be an expert in a particular field but have no competence in other areas. One characteristic that is in constant demand across all software development is professionalism. Unfortunately this is far from universal.

Professionalism is all about attitude and behaviour. For me, it covers a few key areas such as integrity and commitments to quality and self-improvement.

Integrity is a cornerstone value that covers honesty in dealings with clients and coworkers. Professional relationships are built on trust, dishonest dealings will destroy this trust. At the extreme this behaviour can have serious negative legal consequences and affect your ability to find and keep employment.

Integrity also encompasses the ability to take responsibility for your actions or lack thereof. Everybody makes mistakes, I have significantly more respect for those who own up to them and assist in their correction than someone who'll attempt to shift blame or deny there is a problem. This kind of honesty engenders real confidence. Trust gained from pretending to be infallible only lasts until the first instance that your failings are discovered.

I've been relatively fortunate that I've encountered relatively few developers who lack basic integrity. Those few I have tend to leave a trail of disgruntled clients and contemptuous coworkers in their wake. This is hardly conducive to a long term career.

One thing I see more than I'd like, especially in codebases I've inherited, is a lack of concern for the quality of the software. This manifests in a system where everything is done in the most immediately expedient fashion. Concerns such as what happens in unusual or exceptional cases are ignored. This is often justified along the lines that the coder is doing "rapid application development" (a fallacy to which I could devote many posts). The result is a buggy, unreliable mess where adding new features quickly becomes anything but rapid.

Clients have a right to expect that when you, as a claimed professional in software development, develop a software system for them that you are doing it to an acceptable level of quality. Software is developed in order to meet business needs and to provide a return on investment. Low quality software is unlikely to meet business needs and, due to costs associated with downtime, errors and additional maintenance overhead is unlikely to provide a suitable return on investment. This is not to say that clients do not also have responsibilities in development, but their possible failure to meet their responsibilities does not excuse your own.

Professional software developers will distinguish themselves in that they will treat it as a career, rather than a job. This distinction defines how they will treat their own skill set. People for whom software development is a job have what I think of as a 9 to 5 attitude. They go to work, do their 40 hours a week and that's it. They'll pick up new things when explicitly told, or as required to within the context of their assigned tasks, but they never take proactive steps to learn new things or extend their skills. They can be quite competent, but they're never going to set the world on fire, and they're never going to amount to anything special within their chosen field. (They can still be great people in other areas, but that's outside my scope).

A software development professional will differ in that they take proactive steps to increase their skills and competence. This includes reading widely on software development topics, including traditional technical books, but increasingly blogs of people recognised to be knowledgeable in particular fields. It also encompasses taking time to acquire skills and research into areas of interest and new developments. Over the years I've played with a number of new technologies in my own time. Very few of these ever amounted to anything directly, but the learning gained has been invaluable and various pieces have shown up in client work over the years, leading to what I like to think of as solutions that are better than they otherwise would have been.

So why do I consider professionalism to not be optional? Ultimately it comes down to ethics. Acting without integrity or delivering low quality software are ultimately unethical behaviours. Those who are not capable of ethical behaviour within a field are not people with whom I wish to have dealings.