simplicity

Post on 01-Dec-2014

485 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

simplicity.demystified

osvaldas grigas@ogrigas | ogrigas@gmail.com

inspired by

DanNorth

RichHickey

Edsger Dijkstra (1980)

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

has not been met.

what "simple" ain’t ...

familiar / convenient

small / concise

beautiful / elegant

"nothing is more simple than a single giant button"

from the agile principles

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

from the agile principles

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

YAGNI

from the agile principles

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

YAGNI

from the agile principles

“Harness change for thecustomer's competitive advantage.”

Russ Miles

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

from the agile principles

“Technical excellence andgood design enhances agility.”

Martin Fowler

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

from the agile principles

“Developers should maintain aconstant pace indefinitely.”

Rich Hickey

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

dominate what you can do.

ultimate definition of simplicity

ultimate definition of simplicity

simple == not(complex)

complexity.demystified

osvaldas grigas@ogrigas | ogrigas@gmail.com

mixed responsibilities

dependencies& coupling

state& side effects

mental strain

essentialcomplexity

incidental

complexity

essentialcomplexity

essentialcomplexity

your code

essentialcomplexity

your codelib

rarie

s

frameworks&

essentialcomplexity

your codelib

rarie

s

frameworks&languageruntime&

complexity brought by

your code

refactoring

toolscode

generatorsauto-import

supported by:

complexity brought by

libraries

supported by:

gem mavennuget

complexity brought by

frameworks

ORM

IoC

WEB

the law of leaky abstractions

complexity brought by

the programming language

inheritance-based design

unconstrained mutability

lack of expressivity

making things simple

TDD, BDD& refactoring

modularity

use valuesand pure functions

minimize direct dependencies

introduce indirection

follow the law of demeter

single responsibility principle& composition

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

be ignorant and oblivious

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

choose libraries wisely

accepted answer

prefer libraries over frameworks

step out of your comfort zone

top related