24 ms·
State of Clojure Survey 2019 Analysis
- yogthos 8y agoThis was an interesting tidbit as well from another analysis [1]: This year’s survey also included a question about how long people had been programming professionally. 1 in 10 Clojure users have over 20+ years of developing experience; 49% had over 10+ years of experience. In comparison, only 42% of JVM developers have that much programming experience. Clojure having a higher than average percentage of experienced developers directly contributes to the quality of the language and the ecosystem around it. [1] https://jaxenter.com/clojure-2019-java-8-functional-155236.html https://jaxenter.com/clojure-2019-java-8-functional-155236.h...
- Scarbutt 8y agoThe reason for the clojure user base having an experienced majority is that is overwhelming and tedious for an inexperienced programmer to use Clojure to accomplished things, the "you already should know how that works and how to do that, roll your own" mantra dominates, in contrast to JS/Python, where there are good learning resources for almost everything you want to accomplished (for things that have already been done). There is just way more hand holding in these massive communities (JS/Python). Another big reason is that if you want to write production level code in Clojure, you have to know Java and its APIs well, the same for Clojurescript and Javascript, making the barrier to entry much bigger. So yes, IMO, right now Clojure is a language meant for experienced developers and my guess is that will remain so. The good thing is, Clojure and Rich brought some good concepts to mainstream use. He did a good marketing job.
- cmiles74 8y agoI'd like to highlight that knowledge of Java makes working with Clojure a lot easier. I think you can probably get pretty far by picking the right libraries and being careful, but eventually a mistake will be made and understanding Java makes it that much easier to track down the issue. I can't go back and test my theory (I've been doing Java for what feels like a century) but I feel like it will be difficult for people without a Java background to get a production Clojure project off the ground.
- saosebastiao 8y agoClojure was my first JVM language. It indeed was a nightmare. The java underpinnings affect everything you touch. Trying to use a library that didn't have a stable wrapper was terrible...you have to essentially learn two languages at the same time.
- agumonkey 8y agoMaybe a positive feedback loop. Clojure made experienced developers feel right at home with something neither too esoteric but concise, fast enough, safe enough. Hickey had 20~ years in the field too, I guess he shared the same concerns.
- darksaints 8y agoPercentages don't create software, people do. Absolute numbers are definitely more important for ecosystems. I'd wager that for every 1 clojure dev with 20+ years experience, Java has 100. I'd always consider language power to be an amplifier of experience...a 20+ year veteran that knows clojure like the back of his hand is going to be more productive than a java dev of similar experience. But the community size gap is huge. I deal with this as a scala programmer quite a bit. The ecosystem is pretty great for how small it is, but it's never going to be as good as java devs have it.
- yogthos 8y agoYou can directly leverage everything from Java and Js ecosystems with Clojure. So, I'm not sure I follow the argument here. If a useful library comes out, I can still use it from Clojure while enjoying the benefits of a much better language.
- saosebastiao 8y agoYou were the one to make the comparison to other JVM developers. Not sure why you would make the comparison if your whole point was that you can use both. Of course that point is spurious at best. Clojure devs can use java libraries about as well as java devs can use C libraries: it's an unidiomatic nightmare with tons of unsafe sharp edges. And java devs can even use clojure libraries, but they don't and probably never will. Using java libs from scala is a hell of a lot easier than using them from java, but I still avoid them like the plague. If we're comparing the relative merits of ecosystems for different languages, it makes sense to compare the ecosystems developed natively in that language, not lumping in the thousands of other ecosystems that technically can interop with it. My point is that the clojure ecosystem is weak in comparison to other more popular languages because experience in absolute quantities matter far more than percentages. The Arc ecosystem basically consists of a single 20+ year veteran, Paul Graham. That's 100% veteran composition. According to your line of argument, they surely must have the world's greatest programming language ecosystem. Does it? At best, the clojure ecosystem can claim to be good enough for most uses. That's certainly a lot better than the vast majority of languages. I'd be overjoyed if SML, Pony, MiniZinc, or Mercury had the ecosystem that clojure enjoys. But compared to Javascript, Java, Python, C++, C, Javascript, Swift, Ruby, etc., it's not even close.
- vemv 8y agoThe repeated message from the authors is that clojure.core docstrings are not gonna improve. If you think it's an easy problem to solve, please point out a single resource (library, website) which is 100% high-quality, comprehensive, up-to-date, IDE-integrated, and noncontroversial. Where is it? Why haven't we all adopted it? The facts are: we have good-enough docs, nREPL, a massive corpus of beginner material (books, videos) and real-time support from enthusiasts on Slack. If you ain't clojuring, it's because you don't want to!
- casion 8y agoI don't think that anyone believes that it's an easy problem to solve, but it IS a problem. I've been Clojuring since 1.0, contributed 100s of examples to Clojure docs websites, and I still don't understand some of the .core docstrings even when I know exactly how to use the function. It may not be easy to solve, but it does need to be solved.
- puredanger 8y agoHave you filed CLJ jira tickets about those docstrings? If not, then we are not able to hear your concerns. We fix and improve a bunch of docstrings in every release: https://dev.clojure.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project%3DCLJ+and+status%3DClosed+and+approval%3DOk+and+labels%3Ddocstring+order+by+fixVersion+desc https://dev.clojure.org/jira/secure/IssueNavigator.jspa?rese... Have you filed documentation issues on the Clojure web site? If not, we don't know what needs to be improved. We have closed 100s of PRs and issues on the site in the last couple years: https://github.com/clojure/clojure-site/issues?utf8=%E2%9C%93&q=is%3Aclosed https://github.com/clojure/clojure-site/issues?utf8=%E2%9C%9...
- casion 8y agoYes, I have done both. Thank you for your tireless work on improving Clojure and the surrounding ecosystem.
- 8y ago
- msvan 8y agoI don't hear as much about Clojure these days, and I don't know if it's because my reading habits have changed or if the community has become quieter. My impression was that other languages have captured the zeitgeist and that the enthusiasm for Clojure has abated. I could be wrong though.
- agumonkey 8y agoIt surely changed, I remember how every clojure conj was a source of enlightenement. Reducers, Transducers .. Many Hickey talks were iconic(sic). Now it's not as trendy.. even clojure 1.10 felt ~meh in a way. But taking a bit of distance I thought .. it's better than having people changing the language every 6monthes leading to js fatigue like symptoms. Slow is good. It seems that clojure users are happy with what it is now.
- casion 8y agoClojure 1.10 targeted the #1 most irritating and requested fix to Clojure: Error messages. It's not exciting if you're not a Clojurist, but if you are then 1.10 was one of the coolest releases recently. It doesn't make for the best headlines or hypest hype: "Clojure improves on something people hated about it."
- agumonkey 8y agoYes, agreed. It's not ~new alien abstraction to make shiny things~ RELEASE.md but it's indeed very useful (especially on a VM hosted language)
- casion 8y agoIt's not new and exciting anymore. Same reason you don't hear about Haskell or nearly as much about Rust despite them both being conceptually exciting projects. Hype can be trending, while the underlying thing being hyped, is stable/mature. The aforementioned Haskell is an excellent example of this.
- mschaef 8y agoThat's my impression too, and I think it's happening for a combination of reasons. Clojure's no longer the new thing, so its faults don't have the benefit of being hidden behind a lack of experience with the language. Clojure's also a language that rewards long-term investment more than most. That's inherent in all of the mechanisms for abstraction and reuse it provides, but it's not necessarily the kind of thing that's immediately obvious. In the short-term you see the funky syntax and all these linguistic tools you don't quite get, but it takes a while to see how it all fits together into a more productive whole. And by the time you do, you or your team may have moved onto something else because the error messages suck or there's not quite the library you want. I also think languages can suffer because their scope is so limited. There have been times I've thought that I'll switch languages and solve a bunch of problems, only to find out that most of my problems are still there. The requirements are still vague, the team still has its dysfunctions, and the surrounding systems are still unreliable, poorly specified, and run by teams that have no interest in helping because of some organizational dynamic set in place ten years prior. None of this should be a surprise, but the real point is that even a putative perfect programming language can only address a relatively small fraction of the problems that arise in software work. That can make it even more difficult for minority languages like Clojure to produce a positive risk-adjusted return on the investment they require to adopt in a serious way..
- lucidone 8y agoI've tinkered with Clojure and find it a really refreshing paradigm to work in for building web services. However, I'm not sure I'd ever use it for something serious - it's a hard sell to management, and it's difficult to get developers on board to try something radically different compared to the imperative/OO programming models. Regardless, having played with it has changed my perception of how code ought to be structured and written. Thanks to Cognitect and the Clojure team!
- beders 8y agoI'm in the middle of this transition and the biggest challenge is getting the OO way of thinking out of people's heads. It's very challenging to stop thinking about mutating state in an object graph and adopt a functional programming model using immutable data-structures. Be prepared to face quite a bit resistant on that (as well as static vs dynamic typing, and the expressiveness of types vs. something like spec or schema) I'm not too concerned about selling to management (well, I'm the CTO, so 1/3 of management is on board ;) since there are many success stories around Clojure and the list of well-known companies using it in some fashion is pretty large. When pushed, I just mention NuBank (over 4 million customers) which runs their business on Clojure.
- 0xADEADBEE 8y agoI would dearly love to use Clojure more professionally but the problem in every country I've worked has always been the talent pool; I struggle to hire because Clojure devs are comparatively much harder to find. Clojure is a wonderful language and I was firmly on the hype-train back in 2011 or so but I'm not convinced it has much of a future outside its current niche. I would be very happy to be proven wrong though! I had a similar epiphany to you in that coming from a Python background, Clojure radically changed how I thought about and approached problems. Rich Hickey's work is fantastic and I'm very happy to have spent time in that particular corner of the tech world.
- puredanger 8y agoClojure is easy to teach. Why not just hire good devs and teach them Clojure? I think people overlook this too often.
- moomin 8y agoOkay, here's my take on the implicit narrative here: Clojure is done. It will continue to improve, people will continue to use it and build cool things with it, but maintainers are burnt out, mostly because there aren't enough of them and partly because of the passive-aggressive relationship Cognitect has with the community. There's a whole bunch of languages with small dedicated communities doing interesting stuff. D and Julia occur to me off the top of my head. It's not "failure" that Clojure doesn't really challenge Kotlin or Scala for mindshare. It's nonetheless disappointing for people like me who used to be really excited by Clojure's potential. Could it have been different? I don't know. The powers that be could definitely have been more committed to growing the base, but it never seems to have interested them. Would it have made a difference? I honestly don't know.
- Scarbutt 8y agoCurious, can see for it for Julia but what interesting stuff is D doing?
- pjmlp 8y agoBeing a systems programming language with a GC, following the footsteps of Algol68 RS, Mesa/Cedar, Oberon, Oberon-2, Component Pascal, Active Oberon, Sing#, M#,... Coupled with powerful meta-programming capabilities, while having quite fast compilation times. They just suffer from being a tiny community, so everything kind of improves slowly.
- jimbokun 8y agoAnd Go and Rust stealing their thunder in terms of mind share.
- pjmlp 8y agoWhile on the other extreme, Java and .NET keep improving their tooling and features for AOT compilation and low level programming, with OS platforms to go along. It is not easy to find that sweet spot that makes a language take off. Ruby was unknown for almost a decade until Rails came along, for example.
- roenxi 8y agoTempting to interpret this as the last major issue in Clojure use (error messages) being resolved with the introduction of spec. Consensus on concerns seem to be dissolving away from runtime issues to softer community management issues ("documentation", which is very context specific, and "startup time" which is important but precisely not an issue while running Clojure). I do suspect that the survey is under-weighting how much beginners must struggle to navigate setting up CLASSPATH. If you don't come to Clojure from Java then the toolchain is a bit intimidating with whatever a Maven is, followed by a process of trying to follow what both Java and Clojure tools are doing. This is one area Clojure compares very poorly with, eg, C (similarly awful setup process, but usually all the burden is shouldered by the distribution provider) or Python (use pip). It is interesting coming at Clojure from a Debian background at how resistant Leiningen has been to being integrated into the Debian apt archive. I think the package was removed in 2014 and only came back in 2018; so still isn't in the most recent stable. Given that Leiningen is itself probably the first choice of tool to manage dependencies, this raises questions about the technical underbelly of the tools used to build Clojure programs.
- mullr 8y ago> I do suspect that the survey is under-weighting how much beginners must struggle to navigate setting up CLASSPATH. If you don't come to Clojure from Java then the toolchain is a bit intimidating with whatever a Maven is, followed by a process of trying to follow what both Java and Clojure tools are doing. This is one area Clojure compares very poorly with, eg, C (similarly awful setup process, but usually all the burden is shouldered by the distribution provider) or Python (use pip). The Clojure answer is similar to the python one: use lein. This basically solves all classpath issues. In the 3 years I used Clojure professionally, there were only small handful of times I had to deal with the classpath directly, and that was only for pretty exotic packaging issues. > It is interesting coming at Clojure from a Debian background at how resistant Leiningen has been to being integrated into the Debian apt archive. I think the package was removed in 2014 and only came back in 2018; so still isn't in the most recent stable. Given that Leiningen is itself probably the first choice of tool to manage dependencies, this raises questions about the technical underbelly of the tools used to build Clojure programs. What questions does it raise? Debian doesn't deal gracefully with any external dependency management systems, as far as I know.
- deleted 8y ago[deleted]
- jakebasile 8y agoI've said it before and I'll say it again, the industry can rip Clojure from my cold, dead hands. It's unfortunate that people in this thread seem to down on the language, but the only possible way I would stop using it is if I literally cannot earn income with it. It is by far the most pleasant language I've ever used, I feel at home writing it, and it improves the quality of my work.
- _t0du 8y agoI am not disagreeing nor challenging you; I'm happy you like it and I think you should keep using it since you enjoy it so much. My question is: Wouldn't the same be said by most programmers with a high degree of proficiency with a language? What sets Clojure apart from Haskell or Scala or Elixir or Erlang? Do you have a high degree of proficiency with something else? Clojure is the language that I have always wanted to learn, but the benefits never seemed very apparent. I'm hoping your response will make them clear.
- ilikehurdles 8y agoI personally don’t have a great answer for you because I haven’t used the other languages much or at all. If you’re able to watch someone really effective at repl driven development, I think you’re able to see how that sets productivity in the language apart.
- akhilcacharya 8y agoAre there any good screencasts for this?
- piercebot 8y agoBruce Hauman has given a few good talks about how you can use tools like Figwheel to bring a REPL-like development experience to web development. You can watch him live-code the game 2048 in the screencast where he introduces DevCards[0]. Notice that the video came out 4 years ago! One thing that really drew me to Clojure is that it seems to be a nexus of really good ideas that have trickled out into the larger community. If Clojure was where all the smart kids ate their lunch, maybe if I ate lunch with them too (so to speak), some of their smarts might rub off on me :) [0]: https://vimeo.com/97078905 https://vimeo.com/97078905
- bsaul 8y agoWhat's the story on clojure and compile-time type safety ? I've asked a clojure dev the other day about it and he told me this was experimental and not very common.
- jakebasile 8y agoIn all my time in Clojure I've never seen a project use compile-time type checking. core.typed [1] exists but I've never used it. Most people use either no type checking or if needed they'll judiciously apply something like schema [2] or spec [3]. [1]: https://github.com/clojure/core.typed https://github.com/clojure/core.typed [2]: https://github.com/plumatic/schema https://github.com/plumatic/schema [3]: https://clojure.org/about/spec https://clojure.org/about/spec
- fulafel 8y agoIt's a dynamic language, if you must have static typing over Clojure it's not for you. (You can of course do a lot of other things at compile time via macros)
- tosh 8y agoClojure is not only simple and thoughtfully designed/composed from first principles it also is pragmatic (!) and reaches (JavaScript, JVM, CLR, …). The power and joy derived from the above is incredible and (to many) even more important: it means Clojure is not sitting idly in its own ivory tower it plays very well with real world day to day situations. Try to find languages that see eye to eye with Clojure here. I’m super excited about the language and the welcoming community. Also super fascinating to see how so many community efforts are composing and compounding so well. I wish other languages / communities would look more closely and adopt some (more) of it. A bit confused with some of the comments here but then again YMMV and just wanted to jot some of my thoughts down before I transition into some late-night recreational coding that I was looking forward to the whole day. < 3 Clojure
- jraines 8y agore: community I hope we move on from Slack as a community hub. It's not about searchability -- it's totally unsuitable for public/open communities. If you've been in there recently you probably know what I mean -- it's vulnerable to griefing in a way that, to my understanding, Slack is not interested in fixing.
- puredanger 8y agoI find the Clojure Slack to be a great and helpful community. There are certainly plenty of other Clojure chat systems on Zulip, ClojureVerse, etc.
- jraines 8y ago[edit: original parent said "no idea what you mean" - just noting b/c my response only makes sense to that, not b/c offended by it or anything] spoofing identities (or, I guess, making sockpuppet ones) to @-everyone and post porn gifs & racial slurs from slackbot in #clojure -- Yes, the Clojure community is awesome! I only mean that Slack has problems that allow malicious people to spoil the fun. I don't know if it's been addressed. I logged out the last time it happened.
- jakebasile 8y agoI very much agree with you here. Slack is bad software in general but particularly bad for open source communities. Searchability is essentially gone, it requires a proprietary and extremely heavy piece of software to access, and it's very hidden from public view. I know there's been a couple efforts to find a place to relocate to, but it's never really gone anywhere.
- reilly3000 8y agoHere's data on Clojure searches: https://trends.google.com/trends/explore?date=all&geo=US&q=clojure https://trends.google.com/trends/explore?date=all&geo=US&q=c... Based on some of the comments in the thread I see there is some veracity to the claim that interest in Clojure is leveling off or declining. However, it has been my experience that the community embraced Clojure around 2013-14 to the point of "irrational exuberance". The reality that the ecosystem is full of under-engaged projects and dead ends really set in for me after I went to Clojure / West in 2014 and saw several demos break on stage. I want to use Clojure at work, but I'm just not productive in it yet as other languages and I haven't found the time to build momentum with it. That said, I still want to get there.
- iLemming 8y agoEvery time something Clojure related appears in HN top - there are a bunch of comments criticizing the language and most of them are so unfounded. You'd start reading and even before finishing a second sentence you'd realize - the person has no clue what they're talking about. Listen, Clojure is not a small language like Lua - you probably won't be able to form an educated opinion about it by trying to build something simple over a weekend. People would say the hate JVM, when they actually mean "Java". In 3 years of using Clojure I almost never had to even read Java code. They'd dismiss the language immediately because it is not statically typed. If you think maintainers of the language have no clue about type theory and completely unaware of all the research of recent years happening in Racket, Haskell, Julia, Agda and Idris - you are very wrong. Things you can do with clojure.spec are absolutely mind-blowing. If you claim that it's hard to find a Clojure job - that's not true. It is not harder than finding a job in Scala, OCaml, Erlang, Haskell or F#. If you've forced yourself to "love" Javascript, Python, Java or Typescript simply because they can guarantee an employment - I'm truly sorry for you. Sometimes I think people must be either crazy or completely ignorant - who in the right mind would choose JSX over Hiccup and Json over EDN? If you claim that it is hard to hire Clojure developers - that not true either, you simply need to be ready to pay more. People come to Clojure out of curiosity - not for dogma, not for points in résumé. Clojuristas are usually more experienced devs, tired of all the bullshit that inevitably gets accumulated overtime in almost every language. Clojure(script) is not a silver bullet either. But in most-cases it simply makes sense and it just works.