Slide 1

Slide 1 text

What could a Clojure editor be like?

Slide 2

Slide 2 text

Char editor (Notepad, DOS E)

Slide 3

Slide 3 text

Char editor (Notepad, DOS E) Text editor (vi, emacs, ed)

Slide 4

Slide 4 text

Char editor (Notepad, DOS E) Text editor (vi, emacs, ed) Code editor (emacs, acme, vs code, sublime)

Slide 5

Slide 5 text

Char editor (Notepad, DOS E) Text editor (vi, emacs, ed) Code editor (emacs, acme, vs code, sublime) Code editor + dev. env. (IDE) (emacs, vs code, atom, IDEA, Eclipse, Xcode, etc)

Slide 6

Slide 6 text

Char editor (Notepad, DOS E) Text editor (vi, emacs, ed) Code editor (emacs, acme, vs code, sublime) Code editor + dev. env. (IDE) (emacs, vs code, atom, IDEA, Eclipse, Xcode, etc) Visual programming (Node-RED, Scratch, Modkit, Blocky)

Slide 7

Slide 7 text

Scratch

Slide 8

Slide 8 text

Google's Blocky

Slide 9

Slide 9 text

Node-RED

Slide 10

Slide 10 text

Luna

Slide 11

Slide 11 text

Unreal Engine 4 "Blueprints"

Slide 12

Slide 12 text

Feynman Diagram

Slide 13

Slide 13 text

• Immediate feedback • Composition • Data flow • Encourages FP • Reducing accidental complexity Benefits of a visual approach

Slide 14

Slide 14 text

• Immediate feedback → REPL • Composition → Higher order functions, natural composability • Data flow → it's just data!™ • Encourages FP → duh! • Reducing accidental complexity → we still have lots In the context of LISP/Clojure

Slide 15

Slide 15 text

• Function promotion
 !#(bla %) → (fn [a] (bla a)) → (defn real-foo [a] (bla a)) • if → cond • wrap in let, promote let • Namespaces, import • Refactoring • Simple: rename, replace function, change order • Complex: change flow, change data structure IDE level complexity Char editor (Notepad, DOS E) Text editor (vi, emacs, ed) Code editor (emacs, acme, vs code, sublime) Code editor + dev. env. (IDE) (emac/cider, IDEA/Cursive, Eclipse, Xcode, etc)

Slide 16

Slide 16 text

• Not flexible enough • Not expressive enough • Either too simple or too niche • Mouse! Cons of a visual approach

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn

Slide 19

Slide 19 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap Ø

Slide 20

Slide 20 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap zipmap map Ø

Slide 21

Slide 21 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap zipmap map Ø closure

Slide 22

Slide 22 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap zipmap map Ø Ø k ^fn

Slide 23

Slide 23 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap zipmap map Ø Ø k ^fn map apply

Slide 24

Slide 24 text

comparator-over-maps comparison-fn ^fn ks ^vec ^fn maps ^vec ^hashmap zipmap map Ø Ø k ^fn map apply ^?

Slide 25

Slide 25 text

• "Inventing on principle", Brett Victor • "Inspiring a future Clojure editor with forgotten Lisp UX", Shaun Lebron • ProtoREPL Check out