August 23rd, 2015
(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: firstname.lastname@example.org
The specific design decisions and abstractions in clojure which I expect to minimize costs are the following:
Communicating sequential processes. Asynchrony is a complexity multiplier, and in software complexity means cost. Synchronous software is much simpler and easier to reason about, and thus less expensive. Unfortunately, despite its costs, asynchrony is inevitable. Communicating sequential processes (CSP) is a model for writing asynchronous software (expensive) in a synchronous fashion (cheap). For more information, I’d recommend David Nolen’s post about CSP in clojurescript.
Homoiconicity, or “code as data.” This is a more technical point, and I think Adam Bard explains its importance better than I could. In sum, you can write code which writes more code. This is called a macro. Paul Graham touches upon the business value behind macros in his essay about beating the averages.