A Year in Clojure
&gt; <i>&quot;With function specs, I could assert the inputs and outputs to specific functions at runtime; not quite as reassuring as compile-time but better than nothing!&quot;</i><p>For 10 years I&#x27;ve seen many developers who have only really used statically typed languages like C++ and Java, now finding the &quot;joy&quot; of dynamically typed languages and all the &quot;freedom&quot; they give you, only to realize within a year or two that, wait a second, verifying those types at compile-time was actually pretty useful. I&#x27;ve also seen mass migrations <i>away</i> from languages like Ruby, Python and Clojure towards OCaml, Haskell, and F#, because people really enjoyed the functional programming aspects but wanted their static typing back. After writing the 10,000th unit test that only exists to ensure that you spelled some function&#x2F;method&#x2F;hash-key correctly, it gets a little tiresome. Personally I&#x27;ve settled on TypeScript, which has nice IDE integration in VS Code so that it validates your types live while you code, while still giving you the flexibility of a dynamically typed language (it&#x27;s all still JS at the end of the day).