Software Development is a Craft

Category: Development
Last Modified: May 2 2017
Jan 25 2014

As Senior Architect for DNN Corp I get to be involved in interviewing candidates for developer positions within the company.  Thankfully, I don’t have any direct management responsibilities - its not what I enjoy - but I am asked to interview candidates to determine both their technical competence as well as to help determine whether they will fit with the team chemistry.

Many candidates come with glowing resumes - their list of skills and experience is excellent, but I have detected a disturbing trend - too many developers don’t appear to think of software development as a craft.  They list 5 yrs. of experience with .NET or 3 yrs. experience with JavaScript.  That looks like they might be excellent candidates, but when asked about such things as variable scope in JavaScript or Dependency Injection, they can’t answer these fairly simple techniques of our craft.

The problem is many companies when hiring focus on the tools of the trade - the technologies we use - like Web API, jQuery or C#, and forget about what makes a great developer - the techniques that we use to build great software.  And if companies focus on these easy to quantify items, its no wonder that developers focus on them in their resumes.

I like to make the analogy of a carpenter.  Sure a carpenter needs to know how to use his tools - can he hammer, can he use his saw, but for a craftsman the real test is does he know how to build a functional cabinet - and just as important does his work look good.  It’s the same thing with software, its not about how well you know the tools of the trade - the languages and frameworks, but do you know how to use them effectively - can you build or “craft” good software.

So if software is a craft how do we become good at our craft? And maybe, more importantly how do we remain good at our craft?

There are many ways to become good at our craft.  We need to learn and stay up to date with the latest patterns and practices, so reading blogs, taking courses, attending conferences are all good ways to keep up.  But, its not just enough to learn about the latest technologies - we also need to learn how to use them effectively.

One of my favorite software development resources is “Uncle” Bob Martin’s book on “Agile Principles, Patterns and Practices in C#” .  If you don’t know what the SOLID principles of object-oriented design are, then in my opinion, you shouldn’t be looking for Senior Developer positions.  Now I don’t necessarily expect you to know the acronym (SOLID) but if I ask you to tell me what Dependency-Inversion means then I expect you to be able to explain it to me.  If you are looking for a Senior Client-Side position and you tell me you have 5 years JavaScript experience - that’s great - but if I ask about variable scope and variable hoisting or the Revealing Module Design Pattern then I expect you to know about these fundamental patterns.

I know that I am as guilty as the next person - I often focus on the cool new technologies, and don’t spend enough time improving my craft.  But that is my New Year’s Resolution for 2014 - and part of that resolution is to blog more about Patterns and Practices than I have been doing. 

So come along for the ride!!  Lets all learn some great development practices together.

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

Tags