44
Simplicity in Practice

Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

Simplicity in Practice

Page 2: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

https://xkcd.com/1349/

Page 3: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

– Hamlet, Act 2 Scene 2

“Words, words, words.”

Page 4: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

simple, adj.• one fold/braid

• one role, task, concept, dimension

• antonym: complex, interleaved, of many parts

• objective measure

Page 5: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

easy, adj.• near at hand

• familiar

• antonym: hard, requiring effort

• relative measure

Page 6: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

Simplicity

Understanding Changability

Debuggability Longterm DevSpeed

Reliability

Testability

Page 7: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

Ease

Understanding

Changability

Testability

???

?????? Shortterm

Dev Speed

Page 8: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

(< easy simple)

Page 9: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

simplicity is necessary

simplicity isn’t sufficient

Page 10: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 11: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 12: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

a small example

Page 13: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

– Wise Opinionated Clojure Programmers

“Never define global, stateful vars”

Page 14: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

• complects:

• namespaces with runtime application state

• compilation with app initializationea

sy

(def uri "datomic:dev://localhost:4334/my-db")(def conn (d/connect uri))

Page 15: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

“What do I do instead?”

“Just create a single object representing your application’s state, which you construct

explicitly at initialization time and pass around to the rest of your program”

Page 16: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 17: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

(defrecord DB [uri] component/Lifecycle (start [:config] (d/connect uri)))

(defn system [config] (component/system-map :config config :db (->DB (-> config :db :uri))))

https://github.com/stuartsierra/component

Page 18: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 19: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

–Bruce Eckel, 2009

“We're writers.”

Page 20: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

code• functions

• data

• execution flow

stories• setting

• characters

• plot

Page 21: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

interest

clarity

comprehension

collaboration

Page 22: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 23: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

revisiting terms

Page 24: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

f (easy,simple)

Page 25: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

– Rich Hickey, Simple Made Easy

Page 26: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

simplicity

ease

Page 27: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

simplicity

ease

Page 28: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

easy simple ?

Page 29: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

easy simple wieldy

Page 30: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

wieldy, adj.• capable of easily ‘wielding’ one's body or limbs, or

a weapon, etc.; vigorous, active, agile, nimble.

• easily wielded, controlled, or handled; manageable; handy.

• requiring strength to wield, heavy or bulky; wielded with force, powerful.

formal definition

Oxford English Dictionary

Page 31: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

wieldy, adj.

• manageable, handy, powerful

• easy ∩ simple

• pertaining to developer experience

• powerful and fun

• relational measure

programmer definition

Page 32: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

• flexibility

• codebase size

• development speed

• developer morale

• developer improvement

benefits

Page 33: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English
Page 34: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

–George Frideric Handel

“I should be sorry if I only entertained

them, I wish to make them better.”

Page 35: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

Wieldy Code

Good Programmer

Page 36: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

simple, unwieldy[{:db/id #db/id[:db.part/db] :db/ident :artist/name :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/fulltext true :db/index true :db/doc "The artist's name" :db.install/_attribute :db.part/db}

{:db/id #db/id[:db.part/db] :db/ident :artist/country :db/valueType :db.type/ref :db/cardinality :db.cardinality/one :db/doc "The artist's country of origin" :db.install/_attribute :db.part/db}]

Page 37: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

easy, unwieldy

(jdbc/with-connection db (jdbc/insert-records :language_authors {:first_name "Rich" :last_name "Hickey"} {:first_name "Larry" :last_name "Wall"}))

Page 38: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

recontextualization

• To reinterpret or refresh (an idea, work of art, etc.) by placing it in a new or different context.

Page 39: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

three kinds of documentation

Page 40: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

reference simple tutorial easy

conceptual wieldy

Page 41: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

reference style• terse

• complete

• no context

Page 42: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

tutorial style

• task-oriented

• longform

• concepts are doled out on demand

Page 43: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

conceptual style1. problem statement

2. concepts

3. common usage examples

4. pointers to reference documentation

5. roughly 1 page

i.e. telling the story

Page 44: Simplicity in Practice - ClojuTRE · – Wise Opinionated Clojure Programmers “Never define global, stateful vars” ... with force, powerful. formal definition Oxford English

so I know a new word

what now?