Clojure vs. The Static Typing World
This post seems to miss the fact that in Rich&#x27;s talk he rails on ADTs even more than he does on static typing.<p>Rich&#x27;s biggest complaint is that our tools should be <i>a la carte</i> not forced down our throat at every turn. Type verification (static or not) should be a tool, not a religion. (In this way, Rich renders the perennial static vs. dynamic debate stupid: it&#x27;s a false dichotomy that most statically typed languages needlessly force us into.)<p>In Rich&#x27;s talk, the bigger target of his attack is ADTs -- that is, processing information in any way that doesn&#x27;t make properties first-class. (It&#x27;s easy to mix up his argument against ADTs and static types, probably because ADTs are kind of like the go-to idioms for people programming in statically typed languages.)<p>I think <i>one of</i> Rich&#x27;s one-trick ponies (i.e., one of his goals) is to remove the impedance between <i>thinking</i> and <i>coding</i>. We humans don&#x27;t <i>naturally</i> think in terms of ADTs (e.g., when you open a dictionary, you see vocabulary&#x2F;words, not categorical types&#x2F;ADTs.) Computers only ask us to be <i>precise</i> and ADTs are unnecessary to achieve precision -- properties (&quot;words&quot;) capture all of the precision needed to solve our information-processing problems.<p>All Rich is doing is trying to remove that impedance between <i>thinking</i> and <i>coding</i>.<p>Static types are also unnatural and unnecessary to the precise expression&#x2F;coding of solutions to our &quot;situated&quot; programming problems. I don&#x27;t think any static typing enthusiast would disagree. What the static typer would say, though, is that they&#x27;ve done something clever: they&#x27;re adding the extra impedance of type verification to achieve a higher level of problem-solving throughput. (Because their static types reduce other impedances: bugs, refactoring ease, etc.)<p>Are the static typers right? Rich seems to imply no. (Because even though he says typing should be a la carte, you can clearly see in the talk that he has his predilection.) The fight here is usually left to our intuitions and habit, but my guess is that someone smarter than me could model this programmer-productivity problem as an optimization formula, showing how over time software-construction slows down due to certain constant impedances like juggling static types and certain accumulative impedances like coupling and code quality in a large code base.<p>My guess is that this formula would show that in low-quality code bases with lots of coupling, the static typing tax would win. But that in higher-quality codebases the static typing tax wouldn&#x27;t pay for itself. This jives with my instincts of course but you also find that the better programmers (the ones that know how not to couple shit) favor dynamic typing while those that regardless of experience haven&#x27;t learned how to keep coupling at bay prefer static types.