This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
todo [2014/11/27 08:47] djo |
todo [2017/07/11 22:26] djo |
||
---|---|---|---|
Line 3: | Line 3: | ||
Articles to write; things to consider doing. | Articles to write; things to consider doing. | ||
- | Something comparing/contrasting Maven/OSGi? Play with Kraf...? | + | ===== Why Clojure / Learning Clojure ===== |
+ | |||
+ | - Clojure isn't about FP, but: | ||
+ | * Data fundamentally takes a few core shapes and programs generically manipulate those few core shapes of data | ||
+ | * What? | ||
+ | * Sequences (lists, vectors) | ||
+ | * Maps | ||
+ | * Sets | ||
+ | * Simple data types (numbers, strings, etc.) | ||
+ | * Examples | ||
+ | * clojure.java.io/input-stream - Set of input types | ||
+ | * map/reduce (flatmap) have exactly one implementation in Clojure and will never need another one | ||
+ | * (Contrast with Scala where every collection needs its own map/flatten/flatmap implementations) | ||
+ | - Separating the customer's perspective/vocabulary from the program's | ||
+ | * Concerns | ||
+ | * Customer has one vocabulary (Objects formalize that vocabulary into protocols that make it impossible to process data generically) | ||
+ | * Programs want to process data as generically as possible | ||
+ | * These two concerns tend to be intertwined in OO programs. Lisp gives us tools to separate those concerns. | ||
+ | * Internal DSLs | ||
+ | - Compile-time type inference/checking with Specs | ||
===== Scala / FP ===== | ===== Scala / FP ===== |