def creates a var; defn is the idiomatic way to define a named function.
In Clojure, def creates a var in the current namespace. A var can hold any value: a number, a map, a function, a Java object, etc.
defn is the idiomatic way to define a named function. Conceptually, it is a def whose value is an fn, with some extra conveniences (name, docstring, arglists).
1(def answer 42)
2(defn add [a b] (+ a b))
Java mental model: vars are closer to namespace-scoped bindings than to class fields. They support interactive development and late binding.