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,
- Read and understand "Refactoring" from Martin Fowler, And read Refactoring not on the backlog post 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 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",
- Know approaches such eXtreme Programming,
- 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 -.
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 valueTheir 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 levelTake 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.
Added a reference to a blog from Ron Jeffries "Refactoring not on the backlog"
ReplyDeletehttps://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/