So nil will have had special consideration in Clojure core functions
That doesn't mean it doesn't crash either it will absolutely be unhappy with nils in your math
nil is usually unexpected in test outputs or at the very least an unhappy path
In terms of debugging that's why I can't quit this language flowstorm let's me visually step through what happened line by line, backwards, forwards, programmatically - whatever
Languages should be competing against each other by their best time travel debugger it just completely removes the need for guesswork
Well it is possible - you can add a user macro that calls into clj-kondo (or anything actually) to check your codebase on compile
It just doesn't make much sense to do - most modern developers will be running static analysers through LSP or their editor (knowingly or not) continuously on code change so as to see those errors quicker than re-compiling the program
This is a case I never really thought about - if the key is missing today you'll get nil as the value and since Clojure is a nil punning language it usually does sensible behaviour in your program
I know this sounds unreliable but in practise I like a language that defaults to pragmatic code paths so I don't have to stay up at night imagining a million code paths
This adds a throwing codepath which is quite drastic so I'm glad people don't build this into programs everywhere - I'd be nice to hear what the team imagine as the use case for this
Normally for correctness I'd like to see specs at the boundaries for programs and different test suites for internal behaviours
We need to get back to regenerative farming that already has time proven solutions for weeds (ok maybe not the same yield straight away but at least its sustainable)
If your soil is just a chemical laden dust bowl then there are 2nd and 3 order effects from that
Narcissistic abuse usually happens in a way that the victim cannot point at one event to prove the abuse
It's usually a context dependant aggregation of actions
Like a vampire taking thousands of bites the vampire hides the bites by refusing to be accountable and biting just enough to be under the tolerance of the victim
Personally I moved from typed functional languages to Clojurescript and then Clojure around 10 years ago
Most serious Clojure code bases I'm aware of invest heavily in their test suite so yes you can just add a skill to your AI that tells it the most effective way to use your test suite then send it to the races
Some of my colleagues let the agent interact with the REPL and they report faster performance because the agent is not paying the start up cost on every interaction, personally I've been lazy there its fast enough for me
As you've hinted at Clojure does have less bits that get in the way, everything is true except false and nil, the language does not have order precedence table the core language supports immutable and persistent data structures as default
Everything is an expression nothing is a mixture of operators and expressions
map, reduce, filter are built in and expected in normal code
Code you wrote 10 years ago in Clojure will likely still work today the ecosystem and language authors treat breaking code as taboo
Of all the languages I've used its the least headache inducing and the most freeing in terms of expressing my ideas
Also the defacto reverse debugger Flowstorm is a programming dream
Its a lovely language if you want to be content
The flip side of that is most users take it for granted and don't talk about it much
There are also a lot of commercial Clojure programmers who do not understand the language and as a result not that happy, they often didn't willing choose it, probably not ready for it, I think most Clojurians should have gone through a decade of noticing things in their other languages they didn't like before using it
Rich Hickey the creator of Clojure does famously influential videos on software but that doesn't mean your colleagues have watched them or care
Yeah I see this at work - people are sceptical that AI + Clojure even works
but in my experience its amazing the overall quality of Clojure code in the wild tends to be higher than your typical language so AI's training on Clojure tends to be on modern and high quality code and the language is very token efficient, you can also tell AI to interact with the REPL to avoid restarts
The only downside I've seen reported is mis-matched parens but for me models have been strong enough to balance parens for about a year at least it's not something I actively work-around even though there are work-arounds like brepl and others
Looking back Clojure has been the best thing to happen to me in this industry
I doubled my salary using it and changed industries to much more stable industries
I've been to a lot of conferences and meet ups in my career but the feeling of joy and inclusivity at Heart of Clojure was unreal
The community is still alive and well, my favourite passionate sub culture in the Clojure community at the moment is the Jank community, building a Clojure Dialect for low level work an incredible amount of work but they're doing it anyway
The problem is businesses aren't really interested in stability integrity or joy when it comes to their languages they want to commodify their developers by forcing them to write the most popular and replaceable languages possible
Then they're surprised when the quality of developers they're able to hire drops and the quality of their software drops it's all just a race to the bottom - emboldening companies to try and replace developers with AI and destroy their own companies in the process
What surprised me the most in working with Clojure commercially is how many commercial developers did not get the ethos of the language or have watched the rich hickey talks or use the REPL, all they see is restrictions and unfamiliarity I don't know how these people got hired without a passion for the language - lots of them get promoted to run Clojure codebases
As someone who loves the clojure repl I do somewhat agree with debuggers are better
If it was like a choice, Clojure has my favourite reverse debugger flowstorm which also exposes the runtime information of your program programmatically
So you can code cool visual programs against the runtime values of your first program
Like I built an emulator at work that simulates our program in production as a flowstorm plugin then you can step through the program frame by frame
I love taking the guess work out of production issues, just get the computer to show you exactly how everything went down
It's like a rewindable movie made up of thousands or millions of frames of the execution of your program
I can't decide to use the PHP type system for some of my program then the Haskell type system elsewhere I can't combine them they're infectious they don't preserve well over the wire
They're often used for more than one purpose suboptimally
I'm either in 100% agreement with the language's type system or I'm unhappy in some aspects and so I'm unhappy with the language
People seem to choose their languages more on the type system than more fundamental aspects of their language
I think what most users want is static analysis and they don't understand how that is different from a type system they just assume you have to have a type system for static analysis
There's also no conversation about how complex a type system should be to support static analysis in fact some type systems are full blown turing complete
I think there's a more interesting conversation to be had around correctness in a collaborative environment that we're not having at large because type systems exist and consume the conversations
So language developers continue finding the perfect one that is a million little choices working together that must be perfect for everyone
There are people out there afraid to learn or change and are keen to blame and keep things the same to protect themselves
You can listen to their thought process by asking them if they got their way politically for 15 years what would be better about living in their country
I think all major platforms should have an option to disable infinite scroll
Otherwise I look up and its 3 hours later