6 ms·
I'm glad that Clojure users seem happy with their language. But it seems like a worrisome sign that their survey has roughly the same number of respondents yea
by Taikonerd 7y ago
I'm glad that Clojure users seem happy with their language. But it seems like a worrisome sign that their survey has roughly the same number of respondents year after year...
* 2020: 2519 responses
* 2019: 2461 responses
* 2018: 2325 responses
* 2016: 2420 responses
- Scarbutt 7y agoBecause with modern Javascript you get most of the niceties of Clojure (immerjs for immmutability, lodash for data processing, babel for macros) without the disadvantages (no job market, no ecosystem). The debuggers in JS are so good that you don't need the Clojure repl. JS under v8 is also faster at raw processing(single thread but there are also workers now) unless you write Java with parenthesis, which at that point, you are not writing clojure anymore. OTOH, Rich Hickey has influenced(in good way) a generation of programmers and doesn't get credited enough.
- Zelphyr 7y agoI've been a Javascript user and fan for a long time. I've used it since it was in beta at Netscape. But one of the disadvantages that needs mention about Javascript is productivity. I have been hands-down more productive in Clojure than I ever was in Javascript.
- RussianCow 7y ago> no ecosystem Aside from the entire Java ecosystem? I know using a Java library from Clojure isn't exactly plug-and-play, but that's a bit dismissive. Java has way more code written in it than JavaScript for most things.
- lkschubert8 7y agoAnd for that matter the whole js ecosystem too. Clojurescript runs wherever javascript does.
- ithrow 7y agoTrue, with time you get good and fast at doing interop, but I can see newcomers getting frustrated with the chore and quitting prematurely because of that.
- hpoe 7y agoYour right on those disadvantages instead in the js world you just have to deal with a codebase that was largely developed using the SOCP methodology (StackOverflow Copy Paste) from every "full stack developer" that had a really nice certificate from a 6 week bootcamp.
- bgorman 7y agoFor what benchmarks are you seeing single threaded JavaScript outperform Clojure on the JVM?
- dgb23 7y agoFunctional libraries in JS including the ones you mentioned add friction (syntax, dependencies etc.), performance issues and mental overhead. Clojure/Script is designed to be almost completely functional. The code you write is cleaner, more concise and performant almost by default. You also get one syntax to rule the whole web frontend system (js, css, html). For me the reasons for not using it as a primary replacement are: I get dizzy from interop; it is much more convenient to embed Clojurescript into JS than the other way around. And secondly and more importantly I cannot use it in collaboration.
- emmanueloga_ 7y agoDebuggers are not a replacement for REPLs. The magic of the repl is to be able to recompile and reload exactly one function or form, for instance. Even if it is really fast most JavaScript setups require recompiling a whole file and likely reloading the whole page to test. Clojure also has debuggers: you can debug from either Cider or Cursive, for instance. I'm not that familiar with debugging outside of those two though.
- girvo 7y ago> most JavaScript setups require recompiling a whole file and likely reloading the whole page to test With most setups nowadays (create-react-app/Webpack, Parcel, etc.) and "hot-module reloading" that's no longer really the case... ...but that doesn't take away from your point, because it can have some truly odd effects on the debugger haha
- iLemming 7y ago> Debuggers are not a replacement for REPLs. Nothing is a replacement for a good, "true" REPL. Being able to evaluate any [sub]expression, without any kind of ceremony, anytime, from anywhere in your code is incredibly liberating. Who never used Lisp seriously, would never understand how amazing that workflow is. I think REPL is the main reason why we still have Lisp dialects. After over six decades Lisp is still alive and thriving.
- emmanueloga_ 7y agoTrue! For a long time I was looking for the mythical "livecoding" setup, thinking some experimental programming language was needed or something, when all the while Clojure was there, just waiting for me :-) In that way I feel Clojure's defaults to immutability go a step beyond what's offered in most Lisp's setups. Not everything "just works" though, thought is still needed in order to have certain things be easily reloadable. I'm talking things like using "defonce" forms and having a setup like described here [1]. I'm still exploring this space but I think the gist of it is to create a direct acyclic graph of dependencies, so you can start and stop exactly what you need, not unlike what build systems do. 1: https://lambdaisland.com/blog/2018-02-09-reloading-woes https://lambdaisland.com/blog/2018-02-09-reloading-woes
- iLemming 7y agoYou're talking like everyone abhorred Javascript before, and since it has gotten a few "modern" features, everyone (including many Clojuristas) rushed back to it. "Niceties of Clojure" you're talking about have slowly started appearing in other languages as well, not only JS. However, those languages are still missing key ingredients that make Clojure such a nice tool. Javascript is still a very difficult language to work with. Arguably, it is even hard to rate the language as a production-ready PL. The hidden cost associated with building, maintaining, and scaling JS applications is immense. There are so many inconsistencies and oddities in the language - it is not even cute or funny anymore to talk about WATs or "bad parts" of it. It gives you a false sense of simplicity, it feels like an easy language to start writing apps with, but God, very soon, you realize how awful things are (in comparison). Clojure(script), on the other hand, is so much more practical. It only looks more difficult, but given enough patience, it brings you stability, consistency, predictability, and, most important - the incredible joy of building working software. Notably, the majority of Clojurists are seasoned, experienced, tired, grumpy software developers. After trying different options they've finally found something that more or less makes sense. People mistakenly characterize that as a "Stockholm syndrome." Which I assure you is not. I personally use Clojure because it simply makes sense. Once it stops making sense, I will move onto something else. Who knows, maybe Javascript will evolve into something better then. But I can honestly say: "Javascript today does not make more sense." It is not a mere opinion of someone with a cursory knowledge of JS, I've used it (and many other languages that transpile/compile into it) for many, many years.
- mercer 7y agoWhile my initial reaction would be in the vein of "it's not THAT bad" I just want to say that my experience is very similar. I have a kind nostalgia for JS because it was my first foray into 'proper' programming (alongside PHP), and I quite like TypeScript. I'm comfortable enough with JS that I can open the dev tools, write a moderately complex chunk of code, and save it as a bookmarklet or private chrome plugin. I'm a JS native. But good lord do I feel so much better working in Clojure or, day to day, Elixir. There's no way I can comare them to JS and argue for the latter, even with the many improvements since the document.write() days.
- iLemming 7y ago> no ecosystem Today it is possible to run Clojure on: JVM, JS, BEAM, .NET CLR, Common Lisp runtimes; Have interop with Python and R. There are Clojure-like Lisp dialects that can compile to Lua and C. > you don't need the Clojure repl If you never have experienced the joy of using "true" REPL, you will never understand the immense value of it. Non-lispy languages, sadly have no "true" REPLs.
- fiddlerwoaroof 7y agoJavaScript could have one: see the indium plugin for emacs/chrome. The issue in js is that webpack and related build tooling does a really good job of making a repl impossible.
- iLemming 7y ago> JavaScript could have one No, it is still would be very crippled imitation of REPL, merely interactive environment. For a language to have a fully-functional REPL, it is required to have at least some homoiconicity, which JS is not. Let me demonstrate: ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') ); Can you evaluate that in JS REPL? Can you evaluate any part of it? Now, let's naively "convert" that into Clojurescript: (ReactDOM.render [:h1 "Hello, world!"] (document.getElementById "root")) You can evaluate every single part of it. You can evaluate "Hello, world!" string; [:h1 ...] vector; document.getElementById function, all these are valid Clojure expressions. In addition to that - Clojure example is so much easier to modify and change. With just a few keystrokes, you can do a lot. That's basically the workflow - in Clojure, you bootstrap an app with some small, core dependencies, then start a REPL, connect to it and keep modifying your app while running it. That is what gives so much praised productivity boost. It doesn't matter how fast your compiler is (in other languages) - "save & recompile" workflow never going to be as good as working with a "true" REPL.
- goatlover 7y agoSo the Lisp/Smalltalk approach to organically growing an app.
- didibus 7y agoI think you're taking a tunnel vision view of the language. A lot of languages have a lot of features, but Clojure has just the right set of features all harmonized perfectly together, and almost no bad ones. So it's about how it all comes together. The secret to this comes down to the Clojure mindset. And where I agree with you is your last statement, Rich Hickey helped push this mindset to other languages, and I'm seeing some of it slowly ramp up in other languages as well. Which is great, but it never comes together as nicely, and who knows where it's going as well.
- deleted 7y ago[deleted]
- Zelphyr 7y agoThere was something that was said about an old language that I've always enjoyed, REBOL, which in effect is that new programmers adapt to it very quickly but seasoned programmers often have trouble unlearning how they did things in languages they're more familiar with (usually descendants of C). I feel the same applies to Clojure and Lisps in general. So one reason why the respondents haven't increased much is because its not attracting enough new developers and seasoned developers are giving up too early. Which is too bad because, sure, getting over that initial hump can be frustrating at times but, boy is it worth it! Spending only a few months with Clojure has already made me a much better programmer in the other languages I use.
- otoburb 7y ago>>There was something that was said about an old language that I've always enjoyed, REBOL [...] A few of them went off and were so inspired by REBOL that they created Red[1]. [1] https://www.red-lang.org/p/about.html https://www.red-lang.org/p/about.html
- sharms 7y agoThere is also bias with respect to survey fatigue. Many of us still use Clojure, but the survey has been running for 10 years, so we are just cranking away, building systems and letting others fill out the survey.
- darksaints 7y agoThe numbers reflect my anecdotal observations of its usage. I started playing with it in 2014, while working at Amazon. There were tons of repos in Amazon's source control system, and it seemed to be growing fast. By 2016, most of them were effectively zombie services, or dead repos that had been replaced...mostly by java, with a smattering of kotlin and scala. There were maybe one or two teams still using it, but it was very much maintenance mode stuff.
- didibus 7y agoThis reminds me of this podcast: https://corecursive.com/david-heinemeier-hansson-software-contrarian-transcript/ https://corecursive.com/david-heinemeier-hansson-software-co... In it, the creator of Rails says: > it doesn’t have to be a million person movement for it to be a place where you can live and breathe and work. Um, I mean, I created. Base camp when Ruby had nothing, right? In terms of the tooling that I wanted and I needed to create web applications. I just created all that stuff for myself. By hand. I mean, it’s totally doable And that's how I feel about my choice of using Clojure.
- mercer 7y agoI have the same feeling, with Elixir as my first choice and Clojure as the mistress, so to speak. It's weird to describe it in these terms, but finding both made me feel like finding a home 'professionally'. I'll happily move to other languages if it's necessary and I keep an eye on how things develop, but I've committed to both Elixir and Clojure when it comes to getting good at something. Because both made me enjoy programming again!
- yogthos 7y agoI don't really see anything worrisome about that actually. This indicates that there is a stable community around the language, and while it would be nice for Clojure community to keep growing, it's very much sustainable at this point. It's also worth noting that responses are indicating that companies using Clojure are getting larger, and more people are using it professionally. This likely indicates that many Clojure startups have successfully grown into larger companies at this point. This is also reflected by efforts like Clojurists Together where companies are funding open source projects that are seen to be strategic for the community. So, overall I don't really see anything to be concerned about here. Clojure is a niche technology, but the community around it is very vibrant even if it's not growing especially fast.