Aristotle and the Art of Software Development

114
Aristotle and the art of software development Jonathan Dahl http://tumblon.com (work) http://zencoder.tv (product) http://railspikes.com (blog)
  • date post

    21-Sep-2014
  • Category

    Business

  • view

    24
  • download

    2

description

What does Aristotle have to do with software development? Slides from my RubyConf '08 talk.

Transcript of Aristotle and the Art of Software Development

Page 1: Aristotle and the Art of Software Development

Aristotle and the art of software development

Jonathan Dahl

http://tumblon.com (work)http://zencoder.tv (product)http://railspikes.com (blog)

Page 2: Aristotle and the Art of Software Development

Or: what does Athens have to do with Silicon Valley?

Jonathan Dahl

http://tumblon.com (work)http://zencoder.tv (product)http://railspikes.com (blog)

Page 3: Aristotle and the Art of Software Development

Athens Silicon Valley

Page 4: Aristotle and the Art of Software Development
Page 5: Aristotle and the Art of Software Development
Page 6: Aristotle and the Art of Software Development

Ethics.

Page 7: Aristotle and the Art of Software Development
Page 8: Aristotle and the Art of Software Development

G

Page 9: Aristotle and the Art of Software Development

PG

Page 10: Aristotle and the Art of Software Development

PG-13

Page 11: Aristotle and the Art of Software Development

R

Page 12: Aristotle and the Art of Software Development
Page 13: Aristotle and the Art of Software Development
Page 14: Aristotle and the Art of Software Development
Page 15: Aristotle and the Art of Software Development
Page 16: Aristotle and the Art of Software Development
Page 17: Aristotle and the Art of Software Development

Ethics.

Page 18: Aristotle and the Art of Software Development

What makes a good programmer?

Page 19: Aristotle and the Art of Software Development
Page 20: Aristotle and the Art of Software Development
Page 21: Aristotle and the Art of Software Development

What makes a good programmer?

Page 22: Aristotle and the Art of Software Development

What makes a good programmer?

Page 23: Aristotle and the Art of Software Development

Act - Effect

Anatomy of an action

Actor

Page 24: Aristotle and the Art of Software Development

Deontology (Kant)

Act - Effect

Actor

Page 25: Aristotle and the Art of Software Development

Utilitarianism (Mill)

Act - Effect

Actor

Page 26: Aristotle and the Art of Software Development

Virtue (Aristotle)

Act - Effect

Actor

Page 27: Aristotle and the Art of Software Development

Immanuel Kant

Page 28: Aristotle and the Art of Software Development

Königsberg

Page 29: Aristotle and the Art of Software Development
Page 30: Aristotle and the Art of Software Development
Page 31: Aristotle and the Art of Software Development
Page 32: Aristotle and the Art of Software Development

deontologyduty

Page 33: Aristotle and the Art of Software Development

Principles

Page 34: Aristotle and the Art of Software Development

Act only according to that maxim by which you can at the same time will that

it should become a universal law

Categorical Imperative

Page 35: Aristotle and the Art of Software Development
Page 36: Aristotle and the Art of Software Development
Page 37: Aristotle and the Art of Software Development

Don’t Repeat Yourself100% Test CoverageWrite readable code

Page 38: Aristotle and the Art of Software Development
Page 39: Aristotle and the Art of Software Development
Page 40: Aristotle and the Art of Software Development
Page 41: Aristotle and the Art of Software Development

1.User stories are written.2.Release planning creates the schedule.3.Make frequent small releases.4.The Project Velocity is measured.5.The project is divided into iterations.6.Iteration planning starts each iteration.7.Move people around.8.A stand-up meeting starts each day.9.Fix XP when it breaks.10.Simplicity.11.Choose a system metaphor.12.Use CRC cards for design sessions.13.Create spike solutions to reduce risk.14.No functionality is added early.15.Refactor whenever and wherever possible.

16.The customer is always available.17.Code must be written to agreed standards.18.Code the unit test first.19.All production code is pair programmed.20.Only one pair integrates code at a time.21.Integrate often.22.Use collective code ownership.23.Leave optimization till last.24.No overtime.25.All code must have unit tests.26.All code must pass all unit tests before it can be released.27.When a bug is found tests are created.28.Acceptance tests are run often and the score is published.

XP Rules

Page 42: Aristotle and the Art of Software Development

Don’t Repeat Yourself

Write clear, understandable code

Page 43: Aristotle and the Art of Software Development

development: adapter: mysql encoding: utf8 database: app_development username: root password:

test: adapter: mysql encoding: utf8 database: app_test username: root password:

production: adapter: mysql encoding: utf8 database: app_production username: user password: password

Page 44: Aristotle and the Art of Software Development

standard: adapter: mysql encoding: utf8 local: username: root password: development: <<: *standard <<: *local database: app_development

test: <<: *standard <<: *local database: app_test

production: <<: *standard database: app_production username: user password: password

Page 45: Aristotle and the Art of Software Development

<% local_password = "" -%><% local_user = "root" -%><% [{:name => "development", :user => local_user, :password => local_password}, {:name => "test", :user => local_user, :password => local_password}, {:name => "production", :user => "user", :password => "password"} ].each do |environment| -%><%= environment[:name] %> adapter: mysql encoding: utf8 database: app_<%= environment[:name] %> username: <%= environment[:user] %> password: <%= environment[:password] %><% end -%>

Page 46: Aristotle and the Art of Software Development
Page 47: Aristotle and the Art of Software Development

John Stuart Mill

Page 48: Aristotle and the Art of Software Development

John Stuart Mill

Opposed slaveryFavored women’s suffrageFree markets(...with proper regulation)Animal rights Environmentalism

Page 49: Aristotle and the Art of Software Development

...way before these things were cool

Opposed slaveryFavored women’s suffrageFree markets(...with proper regulation)Animal rights Environmentalism

John Stuart Mill

Page 50: Aristotle and the Art of Software Development

Utilitarianism

Page 51: Aristotle and the Art of Software Development

Greatest good for the greatest number

Page 52: Aristotle and the Art of Software Development

The ends justify the means

Page 53: Aristotle and the Art of Software Development
Page 54: Aristotle and the Art of Software Development
Page 55: Aristotle and the Art of Software Development
Page 56: Aristotle and the Art of Software Development
Page 57: Aristotle and the Art of Software Development
Page 58: Aristotle and the Art of Software Development
Page 59: Aristotle and the Art of Software Development
Page 60: Aristotle and the Art of Software Development
Page 61: Aristotle and the Art of Software Development
Page 62: Aristotle and the Art of Software Development
Page 63: Aristotle and the Art of Software Development
Page 64: Aristotle and the Art of Software Development
Page 65: Aristotle and the Art of Software Development
Page 66: Aristotle and the Art of Software Development
Page 67: Aristotle and the Art of Software Development

Lisp vs. Perl

Page 68: Aristotle and the Art of Software Development
Page 69: Aristotle and the Art of Software Development
Page 70: Aristotle and the Art of Software Development

Act - Effect

Actor

Page 71: Aristotle and the Art of Software Development
Page 72: Aristotle and the Art of Software Development
Page 73: Aristotle and the Art of Software Development

Philosophy

Page 74: Aristotle and the Art of Software Development

PhilosophyEthics

Page 75: Aristotle and the Art of Software Development

PhilosophyEthicsPolitics

Page 76: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

Page 77: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

Aesthetics

Page 78: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

Page 79: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

Biology

Page 80: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

BiologyPhysics

Page 81: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

BiologyPhysics

Astronomy

Page 82: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

BiologyPhysics

AstronomyEconomics

Page 83: Aristotle and the Art of Software Development

PhilosophyEthicsPoliticsRhetoric

AestheticsPsychology

BiologyPhysics

AstronomyEconomics

Logic

Page 84: Aristotle and the Art of Software Development

:ethics

Page 85: Aristotle and the Art of Software Development

:ethics == : “a life well lived”

Page 86: Aristotle and the Art of Software Development

:ethics == : “a life well lived” == :happiness

Page 87: Aristotle and the Art of Software Development

:ethics == : “a life well lived” == :happiness

Eudemonia (happiness)eu: gooddaimon: spirit

Page 88: Aristotle and the Art of Software Development

:ethics == : “a life well lived” == :happiness == :virtue

Page 89: Aristotle and the Art of Software Development
Page 90: Aristotle and the Art of Software Development
Page 91: Aristotle and the Art of Software Development
Page 92: Aristotle and the Art of Software Development

:ethics == : “a life well lived” == :happiness == :virtue

Page 93: Aristotle and the Art of Software Development

CourageTemperance

PrideGenerosity

Good temperTruthfulness

WitFriendliness

ModestyRighteous Indignation

Page 94: Aristotle and the Art of Software Development

Excess (too much) Virtue (just right) Defect (too little)Rashness Courage Cowardice

Temperance

Pride

Generosity

Good temper

Truthfulness

Wit

Friendliness

ModestyRighteous Indignation

Page 95: Aristotle and the Art of Software Development

Excess (too much) Virtue (just right) Defect (too little)Rashness Courage Cowardice

Indulgence Temperance InsensibilityVanity Pride Lack of ambition

Prodigality Generosity IlliberalityIrascability Good temper Lack of spirit

Boastfulness Truthfulness False ModestyBuffoonery Wit Boorishness

Obsequiousness Friendliness CantankerousnessShyness Modesty Shamelessness

EnvyRighteous Indignation

Spitefulness

Page 96: Aristotle and the Art of Software Development

practical wisdom

Page 97: Aristotle and the Art of Software Development

bootstrapping

Page 98: Aristotle and the Art of Software Development

modeling

Page 99: Aristotle and the Art of Software Development
Page 100: Aristotle and the Art of Software Development
Page 101: Aristotle and the Art of Software Development
Page 102: Aristotle and the Art of Software Development

Habits vs. RulesJudgment vs. Ends

Page 103: Aristotle and the Art of Software Development

Habits vs. RulesJudgment vs. Ends

Page 104: Aristotle and the Art of Software Development
Page 105: Aristotle and the Art of Software Development

Empower programmers

Page 106: Aristotle and the Art of Software Development

Self-effacing

Page 107: Aristotle and the Art of Software Development

Pleasant to write

Page 108: Aristotle and the Art of Software Development

Happy and virtuous

Page 109: Aristotle and the Art of Software Development

virtues, not rules

Page 110: Aristotle and the Art of Software Development

virtues, not rulesmoderation, not excess

Page 111: Aristotle and the Art of Software Development

virtues, not rulesmoderation, not excessjudgment, not process

Page 112: Aristotle and the Art of Software Development

virtues, not rulesmoderation, not excessjudgment, not processwhole of life

Page 113: Aristotle and the Art of Software Development

virtues, not rulesmoderation, not excessjudgment, not processwhole of lifehappiness

Page 114: Aristotle and the Art of Software Development

Thanks!

Slides at:http://railspikes.com

Aristotle, Nicomachean Ethics