You may have notice it, I changed the domain name for this blog a few weeks ago. Following the advice of John Sonmez on his blogging course, I decided to choose a new name for my website matching the personal brand I’m working on: Coding Journeyman.
I chose this name because it is related to the software craftsmanship movement and its values. I also like the fact that it contains the word “journey” (even if the origin is different) since I consider this personal website as a travel blog for the skills I learned during my software developer’s life.
What is a coding journeyman?
The first time I encountered the word “journeyman” in a context of software development was in the book wrote by Robert “Uncle Bob” Martin named “The Clean Coder”. I really enjoyed this book, I even started this blog with a full presentation of it, chapter by chapter. This is how Robert Martin defines the journeymen in his book:
These are programmers who are trained, competent, and energetic. During this period of their career they will learn to work in a team and to become team leaders. They are knowledgeable about current technology but typically lack experience with many diverse systems. They tend to know one language, one system, one platform; but they are learning more. Experience levels vary widely among their ranks, but the average is about five years. On the far side of that average we have burgeoning masters; on the near side we have recent apprentices.
When writing these lines, I consider that it is a very accurate description of my actual situation regarding my professional skills. I believe I am more knowledgeable than an apprentice but I still have a lot to learn before becoming master. And I hope I will never have the arrogance to call myself a master, because I think that there will always be something new to learn.
My journey through quality
As a software developer I consider that my job is to produce applications with a high level of quality. I want to be proud of my creation and I want them to be valuable for whomever will use them, I want them to have meaning. I want to improve my skills to avoid the following “situations”.
It might look funny, yet I personally don’t want to work in a similar environment. I don’t want to be a code laborer, I want to be a “value contributor” by producing high standard applications.
Then, what is quality in the software industry? This is definitely a good question and a difficult one. I believe that every programmer has its own definition for this notion. I will give my personal opinion regarding this question.
Code quality
As a professional developer my main activity is to write, update, refactor code. This is why I believe it is important to be able to do all of this easily without breaking anything. To improve your code base there are a lot a good practices to follow in order to produce testable and maintainable algorithms. There are the “Clean Code” values and I recently wrote about the SOLID principles.
I am also quite fund of automated unit testing, because I consider this is the best way to protect your code against mistakes when you are refactoring a piece of your code base. It helps you to understand how the classes and methods of your application are supposed to behave. It is also helpful to execute a specific component of your code in order to check its functionalities (while debugging for example) without launching your entire system.
Collaboration
Except if you are working alone it is likely you have to communicate with other people in order to complete your tasks. You probably share your office with other developers, and you probably have to work with them from time to time. Pair-programming is a great habit to know how to work with them, it also helps you to share your knowledge regarding practices, principles, tricks and tips. You are also able to share your understanding of the business domain your working on.
As programmers, understanding the needs of our business expert is a priority since they know how to provide value to the customers better than we do. We cannot allow ourselves to be in conflict with them, we have to understand their priorities and we also have to make them understand ours. This can be difficult from time to time but I believe that it is mandatory to work as a whole in order to produce the best products.
We should stop using the term ‘the business’ and replace it with ‘the value’. Harder to be negative around providing value.
— Paul Pagel (@paulwpagel) November 6, 2014
In my opinion code quality and collaboration are the two main areas to work on in order to craft valuable software. This way you are able to have a working and maintainable product answering the needs of your customers. Of course there are many more topics that deserve attention as well and I will write articles about them as well.
And for you? What is your definition of quality when it comes to software development?
See you next time!
Images credits:
http://www.quickenloans.com/blog/winter-vacations-7-types-travelers