Some initial thoughts on #Clojure, which I've been learning for an upcoming project.
- For unknown reasons, I have a soft-spot for Lisps, particularly #Scheme. Clojure is a Lisp-1 derivative, like Scheme, so that's an entirely subjective feather in its cap!
- Immutability by default is nice and something I miss in Scheme. It forces you to do functional programming, rather than taking imperative shortcuts.
- Despite my Java prejudice, it being a JVM language is highly pragmatic in terms of the breadth of the ecosystem. (Although I suspect Java's OOP focus may be quite at odds with Clojure's FP, in reality.)
- REPL-driven development is interesting, but I don't think it deserves the hype. Attaching to a REPL within an editor gives a neat feedback loop, but it's clunkier than I expected. I understand you can also attach to running processes and make hot code changes; that sounds like it could be pretty useful...but I haven't got there yet.
- No static type checking is not what I'm used to and it's tripped me up already! There's spec and contracts, etc., but it's not the same.
- Speaking of types, shunting around opaque maps feels kind of gross when there are demonstrably better ways to encapsulate data.
- #Babashka is interesting and might make for a better Bash replacement than Python.
Overall, I can't say that I'm sold...but I'm glad I jumped in and I will stick with it. I mean, I kind of have to! But it won't be reluctantly 😅
https://github.com/Xophmeister/clojure-dev