Wednesday, April 4, 2018

Pragmatic Craftsmanship - Professional Software Developer

The last months I was often confronted with  software products having insufficient quality.

Insufficient means late delivery, and few new features. The effort to correct errors in the field eats 30% to 50% away from the whole development budget. How can such a dreadful situation occur?

One root cause is the low quality of the source code and ignorance of basic coding design approaches. We are not talking about complex design activities or complex patterns; we are discussing basic approaches how to write correct and maintainable code.

Master Your Technology Stack

Most of the programmers have no formal training in the technology stack they are using daily. Their best friend is the Internet. And therefore many agile projects are now, steadily and iteratively producing mediocre software.

You shall be a proud software craftsman. You shall work as a professional and deliver professional results. I recommend for any Java developer
  • Have formal training in the Java language and library. For example you should consider a Java Programmer certification for the current JDK you are working daily with,
  • Learn the new features in Java e.g. Streams, Lambdas, Reactive Programming, LocalDate, Modules, packaging with jlink,
  • Read and understand "Effective Java" from Joshua Bloch,
  • Read and understand "Clean Code", "Clean Coder", and "Clean Architecture" from Robert C. Martin,
  • Lean DevOps, continuous integration, continuous delivery, continuous deployment, monitoring,
  • Use SonarQube - and the SonarLint plugin for your preferred IDE - to catch well-known weaknesses in your source code and improve your coding skills,
A software developer not knowing the above items is almost certainly not a professional person, just a more or less talented amateur. See the blog of Mike Cohn the difference between a professional and an amateur for a similar point of view.

Improve Continuously

You shall strive for mastery. The feeling when you reached a certain mastery level is truly awesome.
  • Read a technical book each quarter,
  • Lean a new language or framework every two years,
  • Read books such as "The pragmatic Programmer",
  • Work with Scrum, Kanban, LeSS - Agile approaches are definitively state of the industry techniques -,
  • Master container approaches with Docker - containers are here to stay and will replace virtual machines -.
You shall write good enough software without errors and using best practices of the industry. If not consider changing your profession. See my blog post about technical debt discussing the consequences of missing mastery.

Software Craftsmanship

Software craftsmanship is a initiative to improve the professionalism of software developers. You do not have to agree with them, just look what they are doing. For a detailed discussion read for example the book The Software Craftsman: Professionalism, Pragmatism, Pride by Sandro Mancuso.
Don’t discuss practices, discuss value
Their manifesto is
Craftsmanship is not enough to guarantee the success of a project but the lack of it can be the main cause of its failure  
Agile and Craftsmanship complement each other and both are necessary  
Agile processes assumes technical excellence and a professional attitude  
Software craftsmanship takes technical excellence and professionalism to a whole new level
Take everything you read with a grain of salt. Software craftsmanship 
  • Is not a church, trying to convert all developers,
  • Is about leading by example and showing how we can be better,
  • Is about well written and designed code - and the customer stays in the center -,
  • Is about continuously delivering value not writing crap code.
Your goal shall to become a professional developer and reach mastery. How you do it is up to you.

1 comment:

  1. Added a reference to a blog from Ron Jeffries "Refactoring not on the backlog"
    https://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/

    ReplyDelete