At the beginning he reminded us how quickly a well designed system goes bad due to hurried changes. We need to be aware of our technical debt and we need to allocate time to spend on reducing it (slides 3-12).
As an example, car batteries are easy to find. They are a replacement part, designers and engineers make it easy to find. Compare this to the configuration of your project. If you need to change it, how easy is it to find the file that needs to be changed and then the place in the file?
Another important point is skills. In most other professions, you have some mastery of a skill before you use it. You train hundreds of hours before you play your first football game. In Software, we show you a computer, we show you the programming language of the year (not necessarily this year’s). There is no time to master the tools you have to use from day one (slides 13-15).
“We are what we repeatedly do; excellence then, is not an act but a habit.” – Aristotle
Or as Wikipedia defines it:
Stop wondering why you always make the same mistakes – they’re habits. Eliminate them ASAP (slide 19):
Bad Habits – Katherine Murdock “The Psychology of Habit”:
- Recognize bad habits and eliminate them ASAP
- The older you get the more difficult it is to remove a bad habit
- Each repetition leaves its mark!
Turning bad habits into good ones – Dr. Michael Roussell, PhD.:
- You can’t erase a habit, you can only overwrite one.
- Insert the new habits into the current habit loops
Configure your IDE properly and remove bad defaults. Replace “ex.printStackTrace();” with “throw new RuntimeException(ex.getMessage(), ex);” (slides 43-45).
One bad habit is empty catch blocks with “can never happen” comments. If you see one during a code review, replace it with “System.exit(-1);”. It can never happen, right? Right? (slides 46-47).
Note: I have create a “ShouldNotHappenException” for this case 🙂
Another one is to make every method in a static helper class public. Maybe some of them can be package private? (slide 48)
Learn about other good habits. Read books like “Effective Java” (Joshua Bloch) and “Clean Code” (Robert C. Martin) (slide 49)
Learn the keyboard shortcuts of your IDE (slide 78)
Remember (slide 79):
“Any jackass can kick down a barn, but it takes a good carpenter to build one.” – Sam Ryburn
Projects You Should Know
Project lombok and lombok-pg – In a nutshell, these hook into the Java compiler and generate additional bytecode when certain annotations are present. Bored with getters, setters, hashCode() and equals() plus a nice toString()? Use @Data (slides 21-28).
Want to use lambda expressions but can’t upgrade to Java 8? Then lambdaj is for you (slides 34-39).
Use Spock to make tests more compact and easier to understand. (slides 50-52)
JUnitParams will help you run tests with different parameters (57-59).
Need to wait for something during a test? Awaitility will help. (60-61)
When mocking isn’t enough and you need to inject code during a test, Byteman is the tool you want to look at (62-63)
Getting bored writing boiler plate code in Java to make a compiler happy? Have a look at Groovy. (64-67)
How about adding dependencies to your scripts? Try Grape. (68-69)
Is your build a mess? Do you feel Maven is too verbose or too limiting? Gradle might be for you. (70-72)