The syntax of Clojure is simple and uniform. In order to enable learnable programming, people should not have to think hard about syntax. When I look at code in other languages, I see so much syntax that I don't even want to think about learning it.
An excerpt from my notes on The Joy of Clojure
In Clojure, just about everything you'll do is (operator argument argument). The fact that it's a lot of parentheses doesn't scare me… if anything, it makes it look more uniform and consistent.
Some example functions:
(+ 1 2) ; adds 1 and 2 (+ 3 (/ 6 2)) ; adds 3 and 3 (define x "hello") ; defines the var x as the string "hello" (reverse [1 2 3 4]) ;reverses the order to '(4 3 2 1)
You can even use Parinfer to make it so Clojure is basically an indentation language, reducing the syntax overhead even more. You barely need to pay attention to parentheses, they're more or less just a prefix at that point.
But here's something awesome too: Parinfer is a structural editor that infers your parentheses from your indentation, so everything will be balanced and visually pleasing. Even less syntax to think about. Quick little video to show what I'm talking about https://t.co/08NAkUBlAN— Robert Haisfield (@RobertHaisfield) May 14, 2021
I love that functions can be treated as arguments for other functions. Clojure (and Lisp more generally) is so composable that I am able to make extremely simple and direct fill in the blank functions. See Direct functions and end-user programming. The fact that Clojure is programmed to abstractions means that Clojure is basically just sequence manipulation.
I also love the The data-driven programming mental model.
This thread has more of my early thoughts on that:
I just want to use Clojure data structures (composable collections) and functions to model out and visualize systems I'm working with. I see what people say when they describe Clojure as a tool for thought.— Robert Haisfield (@RobertHaisfield) May 6, 2021