I agree you on the in-fix notation vs sexps bit.
From a developer experience perspective, I feel like keyword assistance during map/associative destructuring and thread-last ops would be the most helpful as a base case. (More difficult situations like lists of maps I'm leaving aside for now.)
e.g., using the example from the Clojure docs:
(def multiplayer-game-state
{:joe {:class "Ranger"
:weapon "Longbow"
:score 100}
:jane {:class "Knight"
:weapon "Greatsword"
:score 140}
:ryan {:class "Wizard"
:weapon "Mystic Staff"
:score 150}})
(let [{{:keys [class weapon]} :joe} multiplayer-game-state]
(let [joe-weapon (->> multiplayer-game-state :joe :weapon]
This is pure Clojure, but I'm posting here because I think Typed Clojure, malli, etc. could improve this situation.
In Python, for example, I don't use the newish type declarations, but something it after I've written the function just to get some autocomplete. (Is it "".ends_with?, .endswith?, ends_with), especially because I bounce around between Python, Ruby, and Clojure and I just can't remember, heh.