Every programming principle, every design method, every architecture style, and even most language features are about organizing complexity while allowing adaptation. Two characteristicsâimmutable data and turning parts of the program into data inside the program itselfâdrew me to Clojure in 2009 and more recently to Yehonathan Sharvitâs Data-Oriented Programming.
In 2005, I worked on one of my favorite projects with some of my favorite people. It was a Java project, but we did two things that were not common practice in the Java world at that time. First, we made our core data values immutable. It wasnât easy but it worked extraordinarily well. We hand-rolled
deepClone methods in many classes. The payoff ...