Last month I wrote an “Agile Tip of the Month” for the Agile University Newsletter. For those who don’t read the newsletter I thought I’d post it here:
The creative genius working long hours churning out code that only he can understand; this is the cowboy coder. How did he get here?
How do people learn the skills to become professional software developers?
This is a question I often ask fellow developers and I usually get very different answers. It seems like we all have arrived at this profession in different ways.
Most of us learn to code on the job and if we’re lucky we find coworkers who are more experienced and are willing to teach us. In this sense, software development is like a craft; we have to apprentice with those who know more than we do in order to gain the necessary skills.
While computer science curriculums are often rigorous they don’t really prepare students for the kind of development that is done in the professional world. The kind of software projects we did in school didn’t require us to pay attention to code quality or develop coding standards. They were small projects that did not require a disciplined approach to writing software. As a result, most new graduates are unprepared to develop enterprise software or work on a development team.
Since most of us are self-taught we often have very different approaches to problems. In some ways this is good because it gives our team a diversity of perspectives that can lead to better insights. The challenge is that we all learned different ways to do things and so the way we approach problems can be very different. This makes for challenges in communicating among team members and also in advocating different, sometimes conflicting approaches to solving problems. Even things as trivial as coding standards and how we name variables can differ widely among developers making it difficult to read code written by multiple authors on a single project.
On one hand we love our independence and the practices we acquired over the years have worked for us so far. But on the other hand we can find it hard to integrate with team members who have a different approach and style than our own. Many of us feel that our approach is better and so we are resistant to changing.
But just like the wild west gave way to law and order in the last century, there is less and less room for the cowboy coder in our modern world. Writing software has become a professional activity with trillions of dollars at stake. Businesses expect high quality software from the professionals they employ.
The old west was settled by very brave and courageous souls who could claim a large area quickly. But soon they had to bring in an infrastructure and establish rules so others could live there and a society could be formed. And so it is true in our industry as well. We must find ways to integrate our work with more ease and that requires a set of basic principles we must all agree upon.
Shared standards and practices indicate a maturing profession. These are what I promote. I don’t claim to have all the answers but I have found several essential techniques that everyone on a development team will benefit from knowing. I share them in the classes I teach, when I coach for clients and on my blog.
Propagating this knowledge among the whole team ensures that all team members are on the same page and communicating with high fidelity to effectively build software that is easier to maintain and extend.