Section | Duration (h) | Timing |
---|---|---|
Get your hands dirty | 2 | 09:30-11:30 |
Tea Break | 0.5 | 11:30-12:00 |
Intro | 0.5 | 12:00-12:30 |
Persistent data structures | 1 | 12:30-01:30 |
Lunch | 1 | 01:30-02:30 |
Collections continued | 1.5 | 02:30-04:00 |
(Day 2) Solve a problem | 5.5 | 9:30-04:00 |
- Modelling | ||
- Java Interop | ||
- Concurrency and Parallelism | ||
- Macros |
- Intro [45m] [9:30-10:15] [srihari]
- Emacs, Leiningen, Cider, Paredit
- Arithmetic (numerics, rational)
- Symbols, Keywords, Vars
- Booleans, Strings
- metadata, nil punning
- Control structures
- Bindings
- Vectors
- Destructuring
- Functions [45m] [10:15-11:00] [abnv]
- syntax, defining and calling functions
- multiple argument
- docstring
- mutli-arity
- varargs
- destructuring args
- contracts
- recursion
- higher order function: map, filter, reduce
- anonymous functions
- partial application
- composing functions - comp, juxt
- closures
- Excercise [0.5h] [11:00-11:30]
- The Lisp philosophy
- The Clojure philosophy (fp, simplicity, jvm, immutability)
- Contrast with other JVM languages (Java, JRuby)
- Clojure community, libraries and books
- Where to find help
- Sequences (lists and vectors) [1h] [12:30-1:30] [govind]
- Create and manipulate sequences (map, filter, reduce)
- Laziness (infinite sequences, utilizing laziness)
- Immutability with persistent data structures (trie)
[unni]
- Maps and Sets [1h] [2:30-3:30] [unni]
- Create and manipulate maps and sets
- How to use maps and sets idiomatically
- Excercise [0.5h] [3:30-4:00]
- Working with libraries
- require/import
- read/load/compile and how it works
- Read from the filesystem, parse json, etc
- Proper use of maps, vectors and schema to model the domain
- Horizontal layering and vertical partitioning of code using namespaces
- Create and extend abstractions with Multimethods, Protocols, and Records
- Connect code and configs to build up a final app
- Calling java code (like java.util.concurrent classes or jsoup) from clojure
- Type hinting
- Extending java code in clojure
- pmap
- futures, promises
- java.util.concurrent utilities
- Concurrency primitives in clojure (atom, agent, var, ref)
- A couple of very simple macros to give a feel for manipulating code as data
- A couple of very simple examples to demonstrate clojure.spec
- When to use clojure, when not to.
- Popular libraries
- ring, schema, honeysql, compojure, etc