Simplicity

42
simplicity .demystified osvaldas grigas @ogrigas | [email protected]

description

 

Transcript of Simplicity

Page 1: Simplicity

simplicity.demystified

osvaldas grigas@ogrigas | [email protected]

Page 2: Simplicity

inspired by

DanNorth

RichHickey

Page 3: Simplicity

Edsger Dijkstra (1980)

Computing's central challenge,"How not to make a mess of it",

has not been met.

Page 4: Simplicity

what "simple" ain’t ...

familiar / convenient

small / concise

beautiful / elegant

Page 5: Simplicity

"nothing is more simple than a single giant button"

Page 6: Simplicity
Page 7: Simplicity

from the agile principles

“Simplicity -- the art of maximizing the amount of work not done -- is essential.”

Page 8: Simplicity

from the agile principles

“Simplicity -- the art of maximizing the amount of work not done -- is essential.”

YAGNI

Page 9: Simplicity

from the agile principles

“Simplicity -- the art of maximizing the amount of work not done -- is essential.”

YAGNI

Page 10: Simplicity

from the agile principles

“Harness change for thecustomer's competitive advantage.”

Page 11: Simplicity

Russ Miles

Complexity is the silent killer of delivering the right software,or change, at the right time.

Page 12: Simplicity

from the agile principles

“Technical excellence andgood design enhances agility.”

Page 13: Simplicity

Martin Fowler

Design is there to enable you tokeep changing the software easily.

Page 14: Simplicity

from the agile principles

“Developers should maintain aconstant pace indefinitely.”

Page 15: Simplicity

Rich Hickey

Once your software is of a certain size, complexity is gonna

dominate what you can do.

Page 16: Simplicity

ultimate definition of simplicity

Page 17: Simplicity

ultimate definition of simplicity

simple == not(complex)

Page 18: Simplicity

complexity.demystified

osvaldas grigas@ogrigas | [email protected]

Page 19: Simplicity

mixed responsibilities

Page 20: Simplicity

dependencies& coupling

Page 21: Simplicity

state& side effects

Page 22: Simplicity

mental strain

Page 23: Simplicity

essentialcomplexity

Page 24: Simplicity

incidental

complexity

essentialcomplexity

Page 25: Simplicity

essentialcomplexity

your code

Page 26: Simplicity

essentialcomplexity

your codelib

rarie

s

frameworks&

Page 27: Simplicity

essentialcomplexity

your codelib

rarie

s

frameworks&languageruntime&

Page 28: Simplicity

complexity brought by

your code

refactoring

toolscode

generatorsauto-import

supported by:

Page 29: Simplicity

complexity brought by

libraries

supported by:

gem mavennuget

Page 30: Simplicity

complexity brought by

frameworks

ORM

IoC

WEB

Page 31: Simplicity

the law of leaky abstractions

Page 32: Simplicity

complexity brought by

the programming language

inheritance-based design

unconstrained mutability

lack of expressivity

Page 33: Simplicity

making things simple

Page 34: Simplicity

TDD, BDD& refactoring

Page 35: Simplicity

modularity

Page 36: Simplicity

use valuesand pure functions

Page 37: Simplicity

minimize direct dependencies

introduce indirection

follow the law of demeter

Page 38: Simplicity

single responsibility principle& composition

wget -qO- http://c2.com/ | tr -cs '[:alpha:]' '\n' | sort | uniq

Page 39: Simplicity

be ignorant and oblivious

Page 40: Simplicity

“We choose Camel over Spring-Integrationbecause the fluent API is really nice.”

choose libraries wisely

accepted answer

Page 41: Simplicity

prefer libraries over frameworks

Page 42: Simplicity

step out of your comfort zone