Bringing Clojure programming to Enterprise (2021)

(blogit.michelin.io)

109 points | by smartmic 5 hours ago

10 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 3 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 4 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 2 hours 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.

      • asa400 1 hour 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.

        • thunky 21 minutes ago
          What I meant by that is the metaprogramming capabilities that often get cited for allowing devs to create their own domain specific "mini languages". To me that's a "creative" way to write code because the end result could be wildly different depending on who's doing the writing. And creativity invites over-engineering, over-abstraction, and hidden costs. That's what I meant by the "opposite of boring".
          • hatefulheart 11 minutes ago
            I read comments like these in bewilderment.

            Have you worked for a company that hasn’t created its own, as you put it “mini language”?

            Have you worked for a company that doesn’t indulge in over engineering, over abstraction and hidden cost?

            Do you actually do programming for a job at all?

          • michaelsbradley 12 minutes ago
            In practice, though, most developers don’t do that.

            There’s a rule of thumb: write a macro as a last resort.

            It’s not hard to stick to it. In general, you can go a long, long way with HOFs, transducers, and standard macros before a hand-rolled macro would serve you better.

      • Oreb 55 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.

      • Antibabelic 1 hour 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 1 hour 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 1 hour 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.
            • thunky 40 minutes ago
              understood, i'm just pointing out that people seem to prefer the apple over the orange.
      • rockyj 1 hour 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.

      • dgb23 35 minutes ago
        > no type safety

        That's fair if you're looking at it from a performance perspective.

        Not entirely fair if you look at it from a perspective of wanting fast feedback loops and correctness. In Clojure you get the former via the REPL workflow and the latter through various other means that in many cases go beyond what a typical type system provides.

        > the opposite of boring

        It's perhaps one of the most "boring in a good way" languages I ever used.

      • jimbokun 1 hour ago
        Most of those seem very subjective with many people having the exact opposite opinion.
        • thunky 1 hour 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.

          • Antibabelic 56 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.

            • thunky 33 minutes ago
              Sure that index isn't great (I think it's basically a regurgitation of Google Trends), but I don't think you're suggesting Clojure is actually a popular language are you? Which is the only point I'm trying to make (that it isn't popular).
              • Antibabelic 11 minutes ago
                Clojure is reasonably popular as far as programming languages go. It's not difficult to get a job as a Clojure developer, particularly in certain sectors (fintech and healthcare are the heaviest Clojure users). Of course C++, Java, C# and PHP dwarf both Clojure and Rust by several orders of magnitude.
          • embedding-shape 59 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 :)

            • thunky 29 minutes ago
              I'm glad it works for you and many others and gives you a good living. Nothing wrong with that. I wasn't trying to attack it or anyone that uses it, just stating why I never warmed up to it and projecting why I think it hasn't become popular.
      • greekrich92 1 hour ago
        Moby Dick is too hard to read. They should make it shorter with a limited vocabulary.
        • Cthulhu_ 1 hour 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.

          • greekrich92 9 minutes ago
            Point being that things of high quality that are enriching sometimes require an investment
  • laszlojamf 2 hours 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?
  • honkcity 48 minutes ago
    I'd love to work with Clojure. I have the misfortune of working on something that is stuck on java1.8 and Groovy, part of the issue is the code quality is a disaster (json and xml parsed with regex...). At least with Clojure I'd get to enjoy the repl workflow and usable text editor (emacs). I also just enjoy working with sexps.
  • erfgh 1 hour 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?
    • thom 28 minutes ago
      Almost exactly, it's mostly how you use the REPL that differs, and then only because of what different editors prioritise. When I'm in Emacs, all my work happens against a running REPL - when I open or save a file, it's reloaded. Any tests loaded in the REPL rerun on every save, within that live instance. If I drop into the debugger, it's against that live instance. I can swap in mock components to a running system, go check stuff in a browser (even jack into a live webpage with ClojureScript), all in one long running instance. I have struggled to recreate this kind of setup as smoothly in Python with any editor (pytest doesn't want to run this way, and IPython's autoreload doesn't feel as reliable), but I do probably write more REPLy code in Python than most, so all my model training and optimisation runs during development happen in pausable background threads in IPython etc.

      All that said, 90% of the time you still just eval a bit of a code to see what happens and that's the same between the two languages.

    • fredrikholm 1 hour 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 55 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.

        • wwweston 16 minutes ago
          Being someone who’s used to the “typical REPL” flow, I’m not sure I grasp what’s going on with the no-restarts. The implications I think I see are:

          * Clojure is built different in terms of hot code reloading

          * the REPL is its own application process in languages Ruby or Python, but in Clojure it’s sortof a client for the system

          Is that right? Is there more to it?

      • rienbdj 53 minutes ago
        Is this similar to Unison scratch file driven development?
    • sammy0910 1 hour 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 1 hour 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 50 minutes ago
      [dead]
  • midnight_eclair 2 hours 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

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