https://medium.com/@travelswithkrishna/java-best-practices-day-30-solidifying-your-java-foundations-67f78db6f825