lundi 26 octobre 2015

Draftsmanship

Some developer want to see their job as a craftsmanship. I really like the idea. SW craftsmanship is about focusing on code quality, and practicing and improving our skills.

More precisely about promoting a know-how instead of just theoretical knowledge. It is a thing to know about software development paradigms, design pattern, SOLID and TDD. It's another thing to know how to use them in practice. How to feel that a situation appeals to a certain pattern. Physical crafting is mastered through apprentice hands and software craftsmanship carries this idea.

However, the term craftsmanship sounds inappropriate for me. Physical craftsmanship is about creating tangible objects, which code is not obviously. Crafted items are made so that everyone can appreciate their beauty and the care put in their realization. Code has not this property.

For whom do we stress code quality? Customers? They do not care, they care of application stability, user experience, and ROI. If this is achieved with crappy code, it doesn't matter much. Working on legacy code is my profession as a developer, my client or user does not have to care about this detail. And I'm glad he or she doesn't.

We write clean code for our peers. We consider them as an audience. It's so pretentious! Every developer is not skilled enough to appreciate the pure beauty of craftsman production, they have to know about SOLID, Domain Driven Design, knowing that they should refer to unit tests if they want precision about how a piece of code works. Actually, they've to be craftsmen themselves, right? Better than that: they've to be egoless craftsmen since I think it's easy to consider your buddy's code as shit (that's why they pair program: to build collective shit ownership and accept this compromise)

Actually, I wonder how are the lives of self called craftsmen in regular and often junior development teams. Do they make recommendation? Do they impose coding dojo during launch time? Do they spend their hours refactoring team's pull requests?

Contrary to physical craftsmanship, the code we build doesn't last. Software is living tissue, and writing code is more like drawing mandalas with pigmented sand than curring a piece of wood. Stressing quality on this reclaim a great sense of zen and stoicism! You do not even write code for your peers, you write it for your SCM history!

So, for fun, I propose to use term Draftsmanship instead (^-^).

By the way, as I said in the intro, I do like the craftsmanship idea and I pretentiously see myself as one. Because I share the values of the manifesto. Because I read the books Pragmatic Programmer, Extreme Programming Explained quite often and I keep learning technical soft in spite of being in my 30s. Because gaining skills and focusing on quality, even to write disposable code and pointless applications is a quest of meaning in being a programmer. Sounds cheesy? Of course it is!