Is it possible to combine programming, perceived as professionalism and technical perfection, with the expectations of a business that wants to produce software quickly and cheaply? The idea of software craftsmanship shows that it is quite real. What is needed is a change in the way we think about programming.
A development project cannot succeed without cooperation with good developers who are not only able to create good quality software, but are also able to help a business achieve what it wants to achieve by offering it the right options, feedback and constructive criticism.
“Software Craftsman. Professionalism, clean code and technical perfection”
March 2009 is a crucial time for the idea of software craftsmanship. Just three months earlier, in the snow-covered Libertyville, Illinois, there was a heated debate over the main assumptions of Software Craftsmanship. It seemed that the meeting did not end with anything concrete, and yet three months later the world saw:
Manifest Software Craftsmanship.
In fact, it was a writing of the rules that many programmers were guided by in practice many years earlier. It is no accident that the Agile Manifesto of 2001 is mentioned here. The new manifesto developed several principles from that Agile programming document. The signatories of the Software Craftsmanship manifesto, calling themselves software artisans, emphasized the following values:
- Not only working, but also well-written software.
- Not only reacting to changes, but also constantly adding value.
- Not only individuals and interactions, but also a community of professionals.
- Not only cooperation with the client, but also a productive partnership.
According to software artisans, it’s not about creating code, it’s about creating a good product. This implies the need for greater involvement of the programmer in the production of software on many levels, increasing its requirements and expectations, determining the level below which you must not go down. A good craftsman doesn’t make bubbles.
This artisanal approach to programming was born in parallel with the idea of agile and grew out of the same conviction that it is necessary to change the way of thinking about the work of a software developer. Creating software that works is far from enough. Software quality is also important for software craftsmen, whether tests are performed in the production process and whether the code is at all understandable to other programmers. This is how a community of Software developers was born, who not only responded to changes using the agile concept, but above all put on adding value to the project being implemented.
Software Craftsmanship has grown really on the idea of medieval and Renaissance perception of work and profession. In those days, real specialists were craftsmen, masters belonging to this or that guild. Regardless of whether they made barrels or other products, they made efforts to ensure that their goods met the best standards. Today, mainstream Software craftsmanship draws precisely from that tradition of craftsmanship, from the tradition of professions that set strict production codes and patterns (today we would say: design patterns). You can write that the Software Craftsmanship manifesto is just such a synthetic code of the programmer-craftsman, but also more broadly – IT specialists who perform various tasks on a daily basis, such as project managers, QA specialists, software architects, etc. This trend places great emphasis on the need for high care in software production, but also brings new value to the work of software developers, to the work of entire project teams, and finally also takes cooperation with the client to a new level.
This movement also introduces vocabulary borrowed from the characteristic. There are terms such as student, or in the case of a professional programmer: journeyman, master (mentor). A student is a person taking an apprenticeship in the master’s department. The characteristics determined the length of such an internship for 3-7 years. After that time, you could be promoted to journeyman. This title was a confirmation of skill, but only a master’s degree allowed to run their own plant. As you can see in this system, to become a master it took several years of work. Similarly, software craftsmen say that exploring the secrets of computer science is not a matter of 2-3 years, but rather 10 years of conscious practice. To provide a similar structure to the guild, modern craftsmen need a well-functioning community. It is she who makes it possible to pass knowledge from the master to the disciple.
Another borrowed term is kata. This Japanese word means “form” and is a term for Strictly formalized exercises used in traditional martial arts. They are used to improve control over your body, to produce the correct wg. these martial arts moves, attitudes. Similarly, software craftsmen believe that it is not enough to work to improve yourself as a programmer. You need to spend time on exercises, which are aimed primarily at the development of their abilities. However, the programming kata is not so formalized. It can mean taking part in open source projects, doing projects for your own use outside of work, experimenting with a new programming language, running a blog. It is important to be aware of the purpose of the activity.
At the time of writing, the manifesto was signed by 23,376 software developers worldwide. This number has been growing almost linearly since 2009. However, many of the most ardent supporters of the idea remind that it is not enough to sign the manifesto to become a true Software Craftsman. Theory often goes hand in hand with practice. You can imagine this situation on a graph, where on one vertical axis we have the adoption of The Theory of Software craftsmanship, and on the horizontal one we put them into practice.
The first case is when someone rejects (most often unconsciously) this approach, and also does not produce code that meets the criteria of the current. We called this programmer “as such and fun”, which probably shows the potential effects of his work. Another programmer is a “practitioner”. It rejects the ethos of software craftsmanship, as it considers it an unnecessary addition. In practice, however, he will take care of his code and development from purely pragmatic motives-it just means that there is less stress. The person who fully agrees with the theory of motion, but does not cope with its application, we called “theorist”. Of the types listed here, this one is the most dangerous. Unfortunately, ethos and beautiful words cannot replace code and action. Perhaps even such a person will be recognized as a master at first-but the effect of his work will be far from perfect. In the end, we left the “true craftsman”, that is, a person whose theory is supported by practice. It is difficult to say how many of those who signed the manifesto went this way.
Post Software Craftsmanship
The idea lost some of its luster in the sense that the peak of its popularity fell on 2010-2011, when it was a frequent topic on influential software blogs. Nevertheless, conferences on this subject are held every year. For example, the next edition of Software Craftsmanship North America will be held on October 27. Surely the manifesto has put its stamp on IT, contributed to the creation of the ethos of the programmer. Today, the concept of programming as a craft seems to be integrated into the mainstream. At a time when more and more people decide to become a programmer for purely material reasons, it is worth returning to the original manifesto. To remember his assumptions, to understand what our profession can be.
Sandro Mancuso, author of the book ” Software craftsman. Professionalism, clean code and technical perfection”, wrote that the software craftsman is someone who has come a long way to the championship. This is a developer who not only changed the way we think about programming, but put a lot of work into developing our own skills and influencing the perception of programming by others. It is difficult not to be tempted by the word “mentor” here, even if it may seem an exaggeration. However, it is worth remembering that true craftsmanship in programming, even at the highest level, does not guarantee the success of the project. But its absence is the main reason for failure.