RSS

Pragmatic Craftsmanship - Professional Software Developer

Pragmatic Craftsmanship - Professional Software Developer

2018 04 01 head

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 <<[effectivejava>> from Joshua Bloch,
  • Read and understand Clean Code [1], Clean Coder [2], Clean Architecture [3] and Clean Agile [4],
  • Read and understand Refactoring [9] from Martin Fowler,
  • And read Refactoring not on the backlog article from Ron Jeffries
  • Learn modern practices such as logging with slf4j, TDD with JUnit5, Mockito and AssertJ, ATDD with Cucumber,
  • Lean DevOps, continuous integration, continuous delivery, continuous deployment, monitoring,
  • Be aware of famous Java libraries such as Guava, Apache Commons,
  • 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 aprofessional 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 [5] * Know approaches such eXtreme Programming, and read the book <<[extremeprogramming>> * 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 an 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 product 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.

Literature

  • [1] Clean Code, Robert C. Martin, 2009
  • [2] Clean Coder, Robert C. Martin, 2011
  • [3] Clean Architecture, Robert C. Martin, 2018
  • [4] Clean Agile, Robert C. Martin, 2020
  • [5] The pragmatic Programmer: Your Journey to Mastery (20th Anniversary Edition), Andrew Hunt & David Thomas, 2019
  • [6] eXtreme Programming Explained: Embrace Change, Ken Beck, 2005
  • [7] The Software Craftsman: Professionalism Pragmatism Pride, Sandro Mancuso, 2015
  • [8] Effective Java: Best Practices for the Java Platform (3rd Edition), Joshua Bloch, 2018
  • [9] Refactoring: Improving the Design of Existing Code (2nd Edition), Martin Fowler, 2018

An extensive list of books can be found under ../../ideas/learnings/books[Books].