Live data from Hacker News

Six years of professional Clojure development

falkoriemenschneider.de

131–140 of 209 posts

Re: Six years of professional Clojure development

#131
post #124

Finding staff is an interesting negative of Clojure to mention. I searched for a Clojure job off-and-on for several years in the 2012-2018 timeframe. I had attended the very first Clojure/conj in 2010 and had development projects in production very soon after that - so I had some Clojure specific experience and was otherwise a reasonable candidate. My opinion was that there were far fewer opportunities than the inner…

I posted a couple years ago about my experience finding Clojure jobs in 2018. https://news.ycombinator.com/item?id=20075132 I still have about 10 recruiters a week mail me about jobs relating to Clojure (either Clojure roles directly, or someone looking for a "functional" developer for another fringe language). It's unclear how many of these are the same handful of companies cycling recruiters (or with open reqs). At…

Interesting perspective from your 2018 comment - thanks for linking it.

I am fascinated by the difference between your experience and mine when hunting a Clojure gig.

When I made my comment, I was wondering how quickly someone would make exactly the response you made - no judgement intended. It's been the standard response ("I easily got a Clojure job ... ") I have seen for years now.

It is just a very different experience than mine. I would love to have insight into the raw numbers of (devs-who-got-a-Clojure-job / devs-who-want-a-Clojure-job).

I will also second the insight that you can bring Clojure into an org as a problem solver and did exactly that in the early days of Clojure precisely because I was in a mostly silo-oriented organization.

Re: Six years of professional Clojure development

#132
post #54

Earlier quoted context omitted.

> What is mutable by default in Clojure? Nothing. All data in Clojure inherits from java.lang.Object. I get what you’re saying, but in real life commercial projects, especially when you use libraries and Java classes, the code ends up with a lot of mutable things. You can never know if any function you call does mutate something without keeping all definitions in your head, and with 20+ people on the project, this is…

> I for sure prefer to write a backend where no teammates ever introduce blocking calls. Please note that forcing an execution model in the language will inadvertently cause headaches for some kinds of domains. Since clojure makes no wild choices the language can be ported to other runtimes (.net, js) and benefit from future runtime improvements without breaking the language (JVM virtual threads, value types). Since…

Language design is about what features not to include. If you include blocking IO, or allow unsound programs, disallow GC-less allocations, you are forcing a model of programming onto the user, which is a good thing. Node.js became a hit because it lacked the feature of blocking IO.

Having many choices available, and teams of maybe 50-100 good mates coming and going, and a period of 5-7 years, has a high likelihood of producing chaos code.

Re: Six years of professional Clojure development

#133

Earlier quoted context omitted.

I don't think it's about it's dynamicism but more about it being functional. Plenty of super popular dynamic languages out there. I think that's also what keeps elixir from becoming something more mainstream, most people come from OOP and are used to thinking about programming that way.

You're both wrong. If it was dynamicism then why are JS, Python, and Ruby so popular? If it's about being functional then why has Scala got more users? Languages are driven by the platform. There is no Clojure platform that people want to use, so no one uses Clojure. If a language isn't bound to it's own platform, it can share a platform and displace other tools like python, go, and rust do with C and C++ (docker is…

>it's about being functional then why has Scala got more users?

Scala world is not that functional if you measure it by real-life usage at least. Most of Scala code I've seen was mostly OOP sprinkled with functional tricks.

Re: Six years of professional Clojure development

#134
post #40

Earlier quoted context omitted.

I wrote Clojure for 4 years. I understand your pain points. Dynamic types are an impediment beyond a certain code size.

My experience with dynamic types comes from developing in Python. The projects I've seen were pretty healthy until a large enough part of the original team went away. Once enough people had to figure out their way by experimenting, the projects got messy. I'm not saying this doesn't happen in Java or Go but the static typing enables easier code exploration. That makes code bases more readable to newcomers.

That might be true but good variable names and some terse but to the point comments are much more helpful in my experience.

Re: Six years of professional Clojure development

#135

Clojure is the most enjoyable language I've ever used and I love the interactive development. I haven't written code in any other language that even comes close. Unfortunately I am too lazy and careless to use Clojure in any serious capacity though. I really need a Haskell or Rust compiler to remind me of all my silly mistakes. I can't be trusted to get to the same level of confidence through unit tests or linting or…

I've been using Clojure since the summer of 2009, started a startup with it, using it exclusively on one project right now... and I agree about static types. I love many many things about Clojure, its my favourite language to use and I find it very well designed over all. But proper first class static types are the one thing I wish it had. My dream programming language is basically a statically typed Clojure. I've on…

[deleted]

Re: Six years of professional Clojure development

#137
post #6

Nice article. Sadly a lot of people won't even try clojure since it is dynamic typed. I see their point but nevertheless clojure does something really well here. As the author obserserves designing around some core data structures results in high code reuse. A library like spec is also way better in encoding business requirements than all the mainstream language typesystems e.g. a number in business context has mostl…

Can we have a REPL-driven language that's statically typed? My hope is yes, in that it's just that the work hasn't been put in yet to create to create the equivalent of Typescript for Clojure or Lua that compiles down to the actual, extensible language. I always wish that it would become unnecessary to have to choose between stability and extensibility when selecting a programming language. Having a Clojure with stat…

Can you define REPL-driven here? because just to name 2, Scala and Haskell have a very good REPL.

Re: Six years of professional Clojure development

#139
post #40

Earlier quoted context omitted.

I wrote Clojure for 4 years. I understand your pain points. Dynamic types are an impediment beyond a certain code size.

My experience with dynamic types comes from developing in Python. The projects I've seen were pretty healthy until a large enough part of the original team went away. Once enough people had to figure out their way by experimenting, the projects got messy. I'm not saying this doesn't happen in Java or Go but the static typing enables easier code exploration. That makes code bases more readable to newcomers.

I always really missed header files when working on Python.

A sort of enforced distinction between (typed) interface and implementation.

In practice I always wound up needing to read code of functions to see what types (or keyword argument!) they expected.

Re: Six years of professional Clojure development

#140
post #41
post #10

Earlier quoted context omitted.

JVM and .NET are the top runtimes with best in game GC implementatios, JIT compilers, JIT code cache, and monitoring tools for production code. In fact plenty of them, given that there are multiple implementation to choose from. Meanwhile other languages keep playing catchup and having to rewrite extensions in C.

Your comment prompted me to google for those tools once more. One that I did not know about before is Eclipse Memory Analyzer. The screenshots[1] look promising, especially "Path to GC Roots". I didn't know that was possible. Is there something comparable for .NET? [1]: https://www.eclipse.org/mat/about/screenshots.php > EDIT: A bit more googling and I found https://memprofiler.com/ > for .NET which seems to have a s…

Eclipse Memory Analyzer is quite good, but something like Java Flight Recorder is much more capable.

On the .NET side of the fence, you can have a look into this nice article although a bit old,

https://mattwarren.org/2018/08/21/Monitoring-and-Observabili...

and "ETW - Monitor Anything, Anytime, Anywhere"

https://www.youtube.com/watch?v=ZNdpLM4uIpw

Post reply on HN