Bringing Clojure programming to Enterprise (2021)

(blogit.michelin.io)

100 points | by smartmic 4 hours ago

9 comments

  • killme2008 3 hours ago
    I wrote Clojure for about five years. Left when I changed jobs, not because I wanted to. It's genuinely one of the most productive languages I've used, and I still miss the REPL-driven workflow.

    One thing I built: defun https://github.com/killme2008/defun -- a macro for defining Clojure functions with pattern matching, Elixir-style. Still probably my favorite thing I've open sourced.

    • dgb23 2 hours ago
      I like it! Really nice API.

      I had an idea about writing something similar, but for multimethods, but never got around thinking it through and trying it out.

      The way defmulti and defmethod work is that they do a concurrency safe operation on a data structure, which is used to dispatch to the right method when you call the function.

      My hunch is that it should be possible to do something similar by using core match. What I don't know is whether it's a good idea or a terrible one though. When you're already doing pattern matching, then you likely want to see everything in one place like with your library.

  • LouDNL 3 hours ago
    It's good to read that Clojure is getting more and more exposure. I write Clojure fpr my day job and wouldn't want to swap it for anything. The community is small but very helpfull and easy reachable. The learning curve is steap indeed, but very much worth it!
    • thunky 1 hour ago
      Clojure has some pretty big downsides last i looked:

      - syntax is hard to read unless you spend a lot time getting used to it

      - convention for short var names makes it even harder

      - function definition order makes it even harder

      - too dynamic for most people's taste

      - no type safety

      - the opposite of boring

      - no clear use case to show it clearly beating other languages

      - niche with small community and job market

      - JVM

      For all those reasons its a hard sell for most imo.

      • Oreb 7 minutes ago
        > syntax is hard to read unless you spend a lot time getting used to it

        That’s pretty much exactly the opposite of how I always felt. Perhaps because I’m not a programmer by education, I always struggle to remember the syntax of programming languages, unless I’m working in them all the time. After I return to a language after working in other languages for a while, I always have difficulties remembering the syntax, and I spend some time feeling very frustrated.

        Clojure and Lisps more generally are the exception. There is very little syntax, and therefore nothing to remember. I can pick it up and feel at home immediately, no matter how long I’ve been away from the language.

      • asa400 12 minutes ago
        > the opposite of boring

        I have to push back on this one, respectfully.

        Clojure is easily the most boring, stable language ecosystem I’ve used. The core team is obsessed with the stability of the language, often to the detriment of other language values.

        This attitude also exists among library authors to a significant degree. There is a lot of old Clojure code out there that just runs, with no tweaks needed regardless of language version.

        Also, you have access to tons of battle tested Java libraries, and the JVM itself is super stable now.

        I won’t comment on or argue with your other points, but Clojure has been stable and boring for more than a decade now, in my experience.

      • Antibabelic 30 minutes ago
        The JVM is one of the major selling points of Clojure. You can "write once, run anywhere" and benefit from Java's massive ecosystem, all without having to use a Blub language. Modern JVM implementations are also incredibly fast, often comparable in performance to C++ and Go.
        • thunky 23 minutes ago
          i don't think you're wrong necessarily...but rust, golang, zig, mojo, etc are gaining popularity and imo they wouldn't be if they were JVM languages.
          • Antibabelic 14 minutes ago
            It's almost as if different tools exist for solving different problems. Clojure is "Lisp on the JVM". That's the core premise behind the language. Rust is a "systems programming language with a focus on type and memory safety". This is an apples-to-oranges comparison. They offer different benefits while providing different drawbacks in return. Their ecosystems are likewise very different, in each case more closely tailored to their particular niche.
      • rockyj 30 minutes ago
        I am a Clojure fan and would love to use it. But you are right, we live in a real world where money talks and most organizations want to see developers as cheap, replaceable commodities.

        Not to mention in a post AI world, cost of code generation is cheap, so orgs even need even fewer devs, combine all this with commonly used languages and frameworks and you need not worry about - "too valuable to replace or fire".

        Having said that - there may be a (very) small percentage of orgs which care about people, code crafting and quality and may look at Clojure as a good option.

      • jimbokun 1 hour ago
        Most of those seem very subjective with many people having the exact opposite opinion.
        • thunky 29 minutes ago
          yes it's just my opinion. but Clojure's market share is tiny so there must be something to that.

          it's not even in the top 50 here: https://www.tiobe.com/tiobe-index/. Lisp is 26.

          • embedding-shape 11 minutes ago
            If anything, I think that makes Clojure better. Almost no one in the community is doing stuff to serve "lowest common denominator", compared to how most of JS/TS development is being done, which is a breeze of fresh air for more senior programmers.

            Besides, the community and ecosystem is large enough that there are multiple online spaces for you to get help, and personally I've been a "professional" (employed + freelancing) Clojure/Script developer for close to 7 years now, never had any issues finding new gigs or positions, also never had issues hiring for Clojure projects either.

            Sometimes "big enough" is just that, big enough :)

          • Antibabelic 7 minutes ago
            "The TIOBE index measures how many Internet pages exist for a particular programming language."

            For some reason I doubt this is in any way representative of the real world. Scratch, which is a teaching language for children, bigger than PHP? Which is smaller than Rust? Yeah, these are results you get when you look at the Internet, alright.

      • greekrich92 58 minutes ago
        Moby Dick is too hard to read. They should make it shorter with a limited vocabulary.
        • Cthulhu_ 42 minutes ago
          I kinda get where you're trying to go, but is Moby Dick style writing the best way to convey information?

          That is, prose is good for entertainment, but less so for conveying information, even less so for exactness.

  • laszlojamf 1 hour ago
    Slightly off topic, but I find it to be a testament of how software has already eaten the world when friggin Michelin has a tech blog. What's next? General Electric releasing a frontend framework?
  • erfgh 41 minutes ago
    Can someone enlighten me about the REPL that lispers keep raving about? Isn't it more-or-less the same as the Python REPL?
    • fredrikholm 21 minutes ago
      You evaulate code within your editor against the REPL, seeing the output in the same window you're writing in (perhaps in a different buffer).

      The cycle is:

        1. Write production code.
        2. Write some dummy code in the same file (fake data, setup).
        3. Evaluate that dummy code. See what happens.
        4. Modify  code until satisfied.
      
      Your feedback loop is now single digit seconds, without context switching. It's extremely relaxing compared to the alternatives (rerunning tests, launching the program with flags, what have you).
      • embedding-shape 6 minutes ago
        Indeed. For people used to the "typical REPL" from Ruby, Python and alike, the best comparison I've found is this:

        "Typical REPL" workflow: Have one editor open, have one REPL open, have one terminal open that runs the application. One change is typically: Experiment in the REPL window, copy-paste into your editor, write tests, restart application (lose all state), setup reproduction state, test change. Or something like this.

        In a Clojure REPL workflow, you'd do something like: Have one editor open, this starts the REPL and often the application in the background too. One change is typically: Edit code, evaluate that snippet of code (which sends it to the REPL and the running application), write tests, evaluate them too in the editor, if you're happy, hit CTRL+S and you're done. Application still has the existing state, no restarts needed and you essentially never have to leave the editor window/pane.

        Of course, others might have slightly different workflows, but for myself and many (most?) other Clojure developers I've observed in the wild, this is pretty much the standard.

      • rienbdj 4 minutes ago
        Is this similar to Unison scratch file driven development?
    • sammy0910 39 minutes ago
      it is very similar, but it is easier to evaluate sub-expressions thanks to the unique syntax of lisp.

      there's a detailed explanation here: https://youtu.be/Djsg33AN7CU?t=659

    • whalesalad 31 minutes ago
      More or less, yes. It's more about the approach to the repl and how it is leveraged in development, or even jacking in to a running system and modifying it as it is running.
    • volume_tech 2 minutes ago
      [dead]
  • sswezey 3 hours ago
  • midnight_eclair 1 hour ago
    every time i go back to writing non-clojure code outside of repl-driven environment i feel like a cave man banging rocks against each other

    no amount of ide smartness or agentic shenanigans is going to replace the feeling of having development process in sync with your thought process

  • 0x1ceb00da 4 hours ago
    What is the y axis in first chart? What is the data source?
  • VMG 3 hours ago
    503
  • maximgeorge 4 hours ago
    [dead]