Should we prefer dynamic behaviour?

Clojure is a dynamic programming language. This is a huge plus in my opinion. It really makes fast development easy. Especially when fishing in troubled waters for a rapid prototype (or when you are a lone fighter).

However dynamic behaviour usually comes at a runtime cost. Clojure provides several means to gain speed at cost of its dynamic nature. One example are type hints. Another – not so obvious – example are inline definitions of protocol functions in a defrecord. What are the trade-offs? And what should be the default?

Did you know about argument order?

Last week, I had the chance of attending the Clojure dojo at the Thoughtworks office in London. It was great to see so many people enjoying to work with Clojure. Unfortunately chances are rather low to put up something similar here in the Rhein-Main region. sigh

However, what I really want to talk about is a question which arose during the dojo. In fact this question has been raised several times and I think it can't hurt to shed some more light on this issue: „How to order the arguments of your functions?“