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 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 to writing 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 as a consequence, many agile projects steadily and iteratively produce mediocre software.

You shall be a proud software craftsman [1]. You shall work as a professional and deliver professional results. I recommend any Java developer:

  • Have formal training in the Java language and library [2]. 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 [3] from Joshua Bloch.

  • Read and understand the clean series [4, 5, 6, 7, 8].

  • Read and understand Refactoring from Martin Fowler [9].

  • And read Refactoring not in 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 [4, 5]. For a similar point of view, see the blog of Mike Cohn the difference between a professional and an amateur.

Improve Continuously You shall strive for mastery.

The feeling of having 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 [10].

  • Know approaches such eXtreme Programming, and read the book [11].

  • 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 the 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, look what they are doing.

For a detailed discussion, read 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 [7, 8].

Agile processes assume technical excellence and a professional attitude

Software craftsmanship takes technical excellence and professionalism to a whole new level [12, 10].

Take everything you read with a grain of salt. Software craftsmanship is

  • Not a church, trying to convert all developers.

  • About leading by example and showing how we can be better.

  • About well-written and designed code and the customer stays in the center.

  • About continuously delivering value, not writing crap code.

Your goal shall be to become a professional developer and reach mastery. How you do it is up to you.

An extensive list of books can be found under Books.

References

[1] S. Mancuso, The Software Craftsman. Prentice Hall, 2015 [Online]. Available: https://www.amazon.com/dp/0134052501

[2] J. Bloch and N. Gafter, Java™ Puzzlers. Addison-Wesley Professional, 2005 [Online]. Available: https://www.amazon.com/dp/032133678X

[3] J. Bloch, Effective Java, Second. Addison-Wesley Professional, 2008 [Online]. Available: https://www.amazon.com/dp/B078H61SCH

[4] R. C. Martin, Clean Code. Prentice Hall, 2009 [Online]. Available: https://www.amazon.com/dp/0132350882

[5] R. C. Martin, The Clean Coder. Prentice Hall, 2011 [Online]. Available: https://www.amazon.com/dp/0137081073

[6] R. C. Martin, Clean Architecture. Pearson, 2017 [Online]. Available: https://www.amazon.com/dp/0134494164

[7] R. C. Martin, Clean Agile. Prentice Hall, 2020 [Online]. Available: https://www.amazon.com/dp/0135781868

[8] R. C. Martin, Clean Craftsmanship. Addison-Wesley Professional, 2021 [Online]. Available: https://www.amazon.com/dp/B095C16LSW

[9] M. Fowler, Refactoring, Second. Addision-Wesley, 2018 [Online]. Available: https://www.amazon.com/dp/0134757599

[10] D. Thomas and A. Hunt, The Pragmatic Programmer - 20th Anniversary Edition, Second. Addison Wesley, 2020 [Online]. Available: https://www.amazon.com/dp/0135957052

[11] K. Beck and C. Andres, Extreme Programming Explained, Second. Addison-Wesley Professional, 2004 [Online]. Available: https://www.amazon.com/dp/0321278658

[12] D. Thomas and A. Hunt, The Pragmatic Programmer, First. Addison Wesley, 1999 [Online]. Available: https://www.amazon.com/dp/B003GCTQAE