What makes a Pragmatic programmer?
™  Easy adopter / fast adapter
™  Inquisitive – You tend to ask questions
™  Critical thinker – You rarely takes the things as given
™  Realistic – This gives you a good feel for how difficult
things are
™  Jack of all trades – You try to be familiar with a broad
range of techs and environments
It’s a continuous process
Needs small amount
of daily care
A Pragmatic Philosophy
Take responsability
Don’t live with broken windows
Remember the big picture
Communicate!
™  Know what you want to say
™  Know your audience
™  Choose your moment
™  Choose a style
™  Make it look good
™  Involve your audience
™  Be a listener
A pragmatic approach (I)
“Every piece of knowledge must have
a single, unambiguous, authoritative
representation within a system”
A pragmatic approach (II)
™  Make it easy to reuse
™  Reversibility: There are no final decisions!
™  Domain languages: “Program close to the problem
domain”
™  Estimate to avoid surprises
Law of Demeter
When you should refactor
™  Duplication
™  Non-Orthogonal design
™  Outdated knowledge – Things change, code needs to keep
up
™  Performance
™  PS: Avoid temporal coupling, always design for concurrency
Test!
™  Unit tests
™  Integration tests
™  Performance tests
™  Usability tests
™  Validation and verification
The pragmatic programmer

The pragmatic programmer

  • 2.
    What makes aPragmatic programmer? ™  Easy adopter / fast adapter ™  Inquisitive – You tend to ask questions ™  Critical thinker – You rarely takes the things as given ™  Realistic – This gives you a good feel for how difficult things are ™  Jack of all trades – You try to be familiar with a broad range of techs and environments
  • 3.
    It’s a continuousprocess Needs small amount of daily care
  • 4.
  • 5.
  • 6.
    Don’t live withbroken windows
  • 8.
  • 10.
    Communicate! ™  Know whatyou want to say ™  Know your audience ™  Choose your moment ™  Choose a style ™  Make it look good ™  Involve your audience ™  Be a listener
  • 11.
    A pragmatic approach(I) “Every piece of knowledge must have a single, unambiguous, authoritative representation within a system”
  • 12.
    A pragmatic approach(II) ™  Make it easy to reuse ™  Reversibility: There are no final decisions! ™  Domain languages: “Program close to the problem domain” ™  Estimate to avoid surprises
  • 13.
  • 14.
    When you shouldrefactor ™  Duplication ™  Non-Orthogonal design ™  Outdated knowledge – Things change, code needs to keep up ™  Performance ™  PS: Avoid temporal coupling, always design for concurrency
  • 15.
    Test! ™  Unit tests ™ Integration tests ™  Performance tests ™  Usability tests ™  Validation and verification