The goal of software craftsmanship is a mindset to produce software that is reliable, maintainable, and a joy to work with. It is based on the idea that software development is more than just writing code; it is a craft that requires skill, dedication, and a commitment to producing the highest quality work.
Some key principles of software craftsmanship include:
- Attention to detail: Paying attention to the small details can make a big difference in the quality of your work. For example, in software engineering, this might mean adding comments to your code to explain its purpose, using descriptive variable names, or properly formatting your code.
- Practice: The more you practice a skill, the better you will become at it. This is especially important in software engineering, where new technologies and best practices are constantly emerging. To stay up-to-date and sharp, it’s important to continuously learn and practice your skills.
- Use the right tools: Having the right tools for the job can make your work more efficient and accurate. In software engineering, this might mean using an integrated development environment (IDE) with features like code completion, debugging tools, and version control integration. It could also mean using specialized tools for tasks like testing, code review, or performance profiling.
- Collaborate with others: Working with others can help you learn from their expertise and bring a fresh perspective to your work. In software engineering, this might mean pair programming, using code review, or participating in team meetings and discussions. Collaboration can help you identify problems early on, share knowledge, and improve the overall quality of your work.

So, what is the difference with Agile practices?
First, the Agile Manifesto is a set of guiding values and principles for Agile software development. It was developed by a group of software developers in 2001 as a response to traditional, heavy-handed software development methodologies. The Agile Manifesto consists of four values and 12 principles:
Values:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Principles:
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity–the art of maximizing the amount of work not done–is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Software craftsmanship is a philosophy that emphasizes the importance of skill, professionalism, and pride in software development. It is based on the idea that software development is a craft, and that developers should strive to continually improve their skills and produce high-quality software.
Agile is a set of values and principles for software development that promotes flexibility, collaboration, and rapid delivery. Agile methodologies, such as Scrum and Lean, provide a framework for organizing and managing software development projects in a way that is responsive to change and focused on delivering value to the customer.
While software craftsmanship and Agile are related, they are not the same thing. Software craftsmanship is more of a philosophical approach to software development, while Agile is a specific set of practices and principles for managing and organizing development projects. That being said, many software craftspeople follow Agile principles and practices as a way to apply their philosophy in the real world.
I propose this list (non exhautive) of best practices for craftsmanship in software engineering:
- Use design patterns: Use design patterns to solve common problems in a reusable and scalable way.
- Follow SOLID principles: Adhere to the SOLID principles of object-oriented design to create maintainable and scalable software.
- Use code review: Use code review to improve the quality of your code and to catch mistakes early on.
- Use a linter: Use a linter to enforce coding standards and catch common mistakes.
- Use a code formatter: Use a code formatter to ensure that your code is consistently formatted.
- Use automated build and deployment tools: Use tools like Jenkins or Travis CI to automate your build and deployment process.
- Use dependency management: Use tools like Maven or Gradle to manage dependencies and ensure that the correct versions of libraries are used.
- Use continuous integration CI: Use continuous integration to automatically build and test your code on every change, ensuring that it is always in a deployable state.
- Refactor code: Regularly refactor your code to improve its design, readability, and maintainability.
- Continually learn and improve: Stay up-to-date with new technologies and best practices, and actively seek out opportunities to learn and improve your skills.
Finally, below few books on best practices in craftsmanship and software engineering that you might find helpful (do you know them?):
- “The Craftsman” by Richard Sennett: This book explores the importance of quality and practice in craftsmanship and offers practical advice for improving skills and craftsmanship.
- “Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin: This book describes best practices for writing clean, maintainable code using Agile principles.
- “The Pragmatic Programmer: From Journeyman to Master” by Andrew Hunt and David Thomas: This book provides a comprehensive introduction to best practices in software engineering, including planning, design, development, testing, and maintenance.
- “Agile Software Development: Principles, Patterns, and Practices” by Robert C. Martin: This book presents the fundamental principles of Agile and how to apply them in software engineering practice.
- “The Software Craftsman: Professionalism, Pragmatism, Pride” by Sandro Mancuso: This book explores the importance of software craftsmanship and how to become a proficient professional developer by following Agile principles.
Are you a software craftman? Share your experience and give advices!
JC
(french)
L’objectif de l’artisanat du logiciel est une mentalitĂ© visant Ă produire un logiciel fiable, maintenable et agrĂ©able Ă travailler. Il repose sur l’idĂ©e que le dĂ©veloppement logiciel va au-delĂ de la simple Ă©criture de code ; c’est un mĂ©tier qui demande de la compĂ©tence, de la dĂ©votion et un engagement Ă produire un travail de la plus haute qualitĂ©.
Certaines des principales règles de l’artisanat du logiciel comprennent :
Attention aux détails : Porter attention aux petits détails peut faire une grande différence dans la qualité de votre travail. Par exemple, en génie logiciel, cela peut signifier ajouter des commentaires à votre code pour expliquer son but, utiliser des noms de variables descriptifs ou formater correctement votre code.
Pratique : Plus vous pratiquez une compĂ©tence, plus vous deviendrez compĂ©tent. Cela est particulièrement important en gĂ©nie logiciel, oĂą de nouvelles technologies et de meilleures pratiques Ă©mergent constamment. Pour rester Ă jour et affĂ»ter vos compĂ©tences, il est important d’apprendre en continu et de pratiquer vos compĂ©tences.
Utilisez les bons outils : Avoir les bons outils pour le travail peut rendre votre travail plus efficace et prĂ©cis. En gĂ©nie logiciel, cela peut signifier utiliser un environnement de dĂ©veloppement intĂ©grĂ© (IDE) avec des fonctionnalitĂ©s telles que la complĂ©tion de code, des outils de dĂ©bogage et une intĂ©gration de contrĂ´le de version. Cela peut Ă©galement signifier l’utilisation d’outils spĂ©cialisĂ©s pour des tâches telles que les tests, l’examen de code ou le profilage des performances.
Collaborez avec les autres : Travailler avec d’autres peut vous aider Ă apprendre de leur expertise et Ă apporter un regard neuf sur votre travail. En gĂ©nie logiciel, cela peut signifier la programmation en binĂ´me, l’utilisation de l’examen de code ou la participation Ă des rĂ©unions et discussions d’Ă©quipe. La collaboration peut vous aider Ă identifier les problèmes tĂ´t, Ă partager des connaissances et Ă amĂ©liorer la qualitĂ© globale de votre travail.
Alors, quelle est la différence avec les pratiques Agiles ?
Tout d’abord, le Manifeste Agile est un ensemble de valeurs et de principes directeurs pour le dĂ©veloppement logiciel Agile. Il a Ă©tĂ© dĂ©veloppĂ© en 2001 par un groupe de dĂ©veloppeurs de logiciels en rĂ©ponse aux mĂ©thodologies de dĂ©veloppement de logiciels traditionnelles et lourdes. Le Manifeste Agile se compose de quatre valeurs et de 12 principes :
Valeurs :
Les individus et leurs interactions plus que les processus et les outils
Un logiciel opĂ©rationnel plus qu’une documentation exhaustive
La collaboration avec le client plus que la négociation de contrats
Réagir au changement plus que suivre un plan
Principes :
Notre plus haute priorité est de satisfaire le client par une livraison continue et précoce de logiciels précieux.
Accueillez favorablement les changements de besoins, même tard dans le projet. Les processus agiles exploitent le changement pour donner un avantage compétitif au client.
Livrez fréquemment un logiciel opérationnel, avec des cycles de quelques semaines à quelques mois, avec une préférence pour les périodes les plus courtes.
Les personnes du business et les développeurs doivent travailler ensemble quotidiennement tout au long du projet.
Construisez des projets autour de personnes motivĂ©es. Offrez-leur l’environnement et le soutien dont elles ont besoin et faites-leur confiance pour accomplir le travail.
La mĂ©thode la plus efficace et efficiente pour transmettre de l’information Ă l’Ă©quipe de dĂ©veloppement et Ă l’intĂ©rieur de celle-ci est la conversation en face Ă face.
Un logiciel opérationnel est la première mesure de progrès.
Les processus agiles encouragent un développement durable. Les sponsors, les développeurs et les utilisateurs doivent être capables de maintenir un rythme constant indéfiniment.
Une attention continue Ă l’excellence technique et Ă une bonne conception amĂ©liore l’agilitĂ©.
La simplicitĂ© – l’art de maximiser la quantitĂ© de travail non effectuĂ©e – est essentielle.
Les meilleures architectures, spĂ©cifications et conceptions Ă©mergent de l’auto-organisation des Ă©quipes.
Ă€ intervalles rĂ©guliers, l’Ă©quipe rĂ©flĂ©chit Ă la manière de devenir plus efficace, puis ajuste son comportement en consĂ©quence.
L’artisanat du logiciel est une philosophie qui met l’accent sur l’importance de la compĂ©tence, du professionnalisme et de la fiertĂ© dans le dĂ©veloppement logiciel. Elle repose sur l’idĂ©e que le dĂ©veloppement logiciel est un mĂ©tier et que les dĂ©veloppeurs devraient s’efforcer d’amĂ©liorer continuellement leurs compĂ©tences et de produire un logiciel de haute qualitĂ©.
Agile est un ensemble de valeurs et de principes pour le développement logiciel qui favorise la flexibilité, la collaboration et la livraison rapide. Les méthodologies Agiles, telles que Scrum et Lean, fournissent un cadre pour organiser et gérer les projets de développement logiciel de manière réactive au changement et axée sur la livraison de valeur au client.
Bien que l’artisanat du logiciel et Agile soient liĂ©s, ils ne sont pas la mĂŞme chose. L’artisanat du logiciel est davantage une approche philosophique du dĂ©veloppement logiciel, tandis qu’Agile est un ensemble spĂ©cifique de pratiques et de principes pour la gestion et l’organisation des projets de dĂ©veloppement. Cela Ă©tant dit, de nombreux artisans du logiciel suivent les principes et les pratiques Agiles pour appliquer leur philosophie dans le monde rĂ©el.
Je vous propose cette liste (non exhaustive) de meilleures pratiques pour l’artisanat du logiciel en gĂ©nie logiciel :
Utilisation de motifs de conception : Utilisez des motifs de conception pour résoudre des problèmes courants de manière réutilisable et évolutive.
Respect des principes SOLID : Adhérez aux principes SOLID de conception orientée objet pour créer un logiciel.
JC
Leave a comment