git » homepage.git » master » tree

[master] / archive / forums / hacker-news / raw / items / 18774888.json

{"by":"lopatin","id":18774888,"kids":[18776215,18775792,18775106,18775304,18775775,18775023,18782677,18776277,18776876,18777502,18775185,18777899],"parent":18767592,"text":"So Clojure and CLJS are amazing. If I were to pick a Lisp for a real world project, Clojure is the obvious pick. The thing is, I&#x27;m curious to hear from people who DO use Lisp in the real world.<p>I would characterize my experience with it as 1: Really fun. 2: Productive on a small scale due to the tooling, interop, libraries, and community being innovative and awesome, and 3: Infinitely flexible, because you know .. it&#x27;s a Lisp. Development becomes like doodling on a piece of paper, like a stream of consciousness.<p>But I ended up choosing Scala for a recent, fairly large, project of mine and I&#x27;m convinced it was the right decision. Without a static type system I would have simply lost a handle on the complexity of the project. And this is while working alone (the case where Lisp traditionally has the upper hand).<p>A few questions for people who use Lisp in production. No need to answer all, just things I&#x27;m curious about:<p>* During refactoring, do you feel more flexible, or less? I can see both sides to the argument. On one hand, static types are more rigid, and getting something to compile during a refactoring can be a pain. Often for the right reasons, but often it&#x27;s due to some annoying technicality in the type system. But once you get there, &quot;if it compiles, it runs&quot; is a cliche that is pretty accurate in my experience. On the other hand, with a dynamic type system, you can slowly evolve a code base and see incremental progress during a refactoring, but I can never get over the dreadful feeling of &quot;what did I forget?&quot;. Has clojure.spec worked out in terms finding bugs during refactoring&#x2F;maintenance and general QA?<p>* Do you make use of the Lispy-ness (Homoionicity, macros, code is data, etc ...) or is it generally an anti-pattern to use these language features in daily development?<p>* Do you wish you had static types? If so, have you tried gradual typing like Typed Clojure? And if you don&#x27;t miss types, why? I remember someone saying of Typed Clojure &quot;We went to Clojure to get away from types!&quot;. And I&#x27;m still trying to understand the mindset.<p>I often have the feeling that I&#x27;m not smart enough to use Lisp. If I had 2x the brain power, I would be able to use macros to conjure up some black magic in 100 lines what would take a mortal 5k in a lesser language. But even if I manage such a feat, I couldn&#x27;t imagine bringing on another developer to that codebase.","time":1545971648,"type":"comment"}