I tell people all the time that I am not a professional developer. They kind of laugh because I write pretty good code and that code is in use all over the place. There are approximately 11 million developers being paid for their craft and a further 8 million that code for fun. How does one separate the professionals from the amateurs.
So I thought I would write down what I think makes a professional developer.
A Large Collection of Patterns
Personally, I have a large library of books and websites that I constantly refer to for patterns. I don’t have them top of mind (except for some of the more common ones). I rely on Google and Stack Overflow way too much in this area.
An Understanding of Algorithms
Similar to patterns, but in an abstract sense, algorithms aid in understanding code. One probably doesn’t consider what happens under the hood for a quick sort any more, but that’s an algorithm you should have an understanding of. I studied it during my CS classes at Lancaster University about 25 years ago and have not touched it since. Other algorithms? Search techniques (like B-Tree), data structures (doubly-linked lists) and the operations on them, recursion, branch and bound and more. The point is not to understand how to write code to implement every single known algorithm – it’s to understand their applicability in modern problem solving and to know when to use them and when they are completely irrelevant.
Personally, I’m pretty good on data structures, but I go to a few web sites or pre-built APIs and libraries for the common algorithms. At least I know where to look.
Develop for Testing
Nothing separates the professional from the amateur more than testing. It’s more than just writing a bunch of unit tests though. Let’s face it – that’s the baseline. It’s writing code with testability in mind, documenting the algorithms you use thoroughly, understanding code coverage, and any number of other elements that make up testing in the real world.
Personally, you are lucky if you get a unit test out of me. I use “real world testing” (aka “works for me!”) way too much to be considered a professional.
Ok – I lied. I know a bunch of would-be developers who write unit tests for their code. I don’t know any would-be developers who write documentation for their code. I’m not talking about the user documentation. I’m talking about comments in the code that allow a second (or third) person to read the code and understand the thinking behind it.
Ok – I also know a bunch of professional developers who don’t do this. The number of times I see comments like this:
/// <summary> /// Class to send email /// </summary>
And technically it does – send email, but that’s the only comment in the code. Documentation is hugely important if you expect other people to work on your code. If you are a lone programmer, then this isn’t as important. But you really should be in the habit of documenting your code!
I try to document my code, but often fail miserably.
Understands Source Code Control
Take a look at the ASP.NET MVC repository. It has hundreds of branches. That’s because that repository has dozens of developers all working on different features. They understand that a branch can be merged back, and so they branch, do their changes, then merge back in. It’s a natural part of their workflow.
Now take a look at one of mine. One branch – master. This is bad practice. At best, I tag my master branch when I get to a good stopping point.
Both techniques are valid. One is good for a lone wolf programmer (me) and one is for professional groups of developers.
Commitment to Continual Learning
When was the last time you attended a class or a conference as an attendee (sorry – booth babe doesn’t count). How about doing a course of Microsoft Virtual Academy or Code Academy or some other site? When was the last time you flexed your developer muscles to learn something new?
If it was more than a month ago, I contend that you are not professional enough to be considered a professional developer. Technology is pushing further and further ahead, which means if you are not continually learning then you are falling behind. I am continually learning how much I have to learn, which pushes me to write this blog and continually watch videos, read blogs, watch the conference sessions when they are available online.
I once heard someone say that an amateur does something until they succeed; a professional does something until they can’t fail. Of course, that someone was referring to sports (and snowboarding half pipe in particular). I think this is as relevant in software development as it is in sports. I work over my Gulp build process and look at alternate methods of producing a sign-in widget for that exact reason. You never know when you need it and there is always a better way to code something.
Most modern developer shops rely on “hackathons” to get this practice. They take developers out of their normal routine and say “develop something”. Look at something new. Do something different. Practice the art of programming.
I would place most of my friends that write code for a living in the “professional developer” camp. They can write circles around me in code and I would not hesitate to bring them into a project. There are others that do code as a side project. They need to experiment when writing code. Their efficiency is low and their code quality is low. Sorry guys – I’d probably ask someone else if I needed a developer.
What do you think makes a professional developer?
Do you consider yourself a professional developer?