The pragmatic
programmer
Lucas Oliveira | lucasprag.com
Slide 2
Slide 2 text
It's a book
Slide 3
Slide 3 text
No content
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
What makes a pragmatic programmer?
A pragmatic philosophy
A pragmatic approach
Slide 6
Slide 6 text
What makes a pragmatic
programmer?
Slide 7
Slide 7 text
early adopter
fast adapter
Slide 8
Slide 8 text
inquisitive
Slide 9
Slide 9 text
critical thinker
Slide 10
Slide 10 text
realistic
Slide 11
Slide 11 text
Jack of all trades
Slide 12
Slide 12 text
Jack of all trades
!=
master of none
Slide 13
Slide 13 text
T-shaped skills
Slide 14
Slide 14 text
A pragmatic philosophy
Slide 15
Slide 15 text
"The greatest of all
weaknesses is the fear of
appearing weak"
- JB Bossuet
Slide 16
Slide 16 text
The cat ate my
source code
Slide 17
Slide 17 text
Take responsibility
Slide 18
Slide 18 text
Provide options,
don't make lame
excuses
Slide 19
Slide 19 text
Everybody
is learning
Slide 20
Slide 20 text
Don't live with
broken windows
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
Control your
software entropy
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
it's time to bring
out the stones
Slide 25
Slide 25 text
people find it
easier to join an
ongoing success
Slide 26
Slide 26 text
if something
could be better,
change it
Slide 27
Slide 27 text
be a catalyst
for change
Slide 28
Slide 28 text
projects slowly get
totally out of hand
Slide 29
Slide 29 text
remember the
big picture
Slide 30
Slide 30 text
Good enough software
Slide 31
Slide 31 text
make quality a
requirement issue
Slide 32
Slide 32 text
involve users
in the trade-off
Slide 33
Slide 33 text
know when to stop
Slide 34
Slide 34 text
Your knowledge portfolio
Slide 35
Slide 35 text
"An investment in
knowledge always pays
the best interest"
- Benjamin Franklin
Slide 36
Slide 36 text
it's similar to
managing a
financial portfolio
Slide 37
Slide 37 text
No content
Slide 38
Slide 38 text
Building your
portfolio
Slide 39
Slide 39 text
invest regularly
Slide 40
Slide 40 text
diversify
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
manage risk
Slide 43
Slide 43 text
No content
Slide 44
Slide 44 text
buy low, sell high
Slide 45
Slide 45 text
review and
rebalance
Slide 46
Slide 46 text
Goals
Slide 47
Slide 47 text
- learn one new language every year
- read technical books
- read nontechnical books too
- read and write blog posts
Goals
Slide 48
Slide 48 text
Goals
- take classes
- participate in local user groups
- stay current
- get wired
Slide 49
Slide 49 text
Critically analyze what
you read and hear
Slide 50
Slide 50 text
Communicate!
Slide 51
Slide 51 text
A large part of our day is
spent communicating, so
we need to do it well.
Slide 52
Slide 52 text
know what you
want to say
Slide 53
Slide 53 text
plan what you
want to say
Slide 54
Slide 54 text
write an outline
Slide 55
Slide 55 text
ask yourself:
Does this get across
whatever I'm trying to say?
Slide 56
Slide 56 text
refine it until it does
Slide 57
Slide 57 text
know your audience
Slide 58
Slide 58 text
understand the needs,
interests and capabilities
of your audience
Slide 59
Slide 59 text
No content
Slide 60
Slide 60 text
get to the same
frequency of your
audience
Slide 61
Slide 61 text
choose your moment
Slide 62
Slide 62 text
choose a style
Slide 63
Slide 63 text
make it look good
Slide 64
Slide 64 text
be a listener
Slide 65
Slide 65 text
A pragmatic approach
Slide 66
Slide 66 text
By keeping these fundamental
principles in mind during
development, you can write code
that's better, faster, and stronger.
You can even make it look easy
Slide 67
Slide 67 text
Every piece of knowledge
must have a single,
unambiguous, authoritative
representation within a system
Slide 68
Slide 68 text
DRY
don't repeat yourself
Slide 69
Slide 69 text
- imposed duplication
- inadvertent duplication
- impatient duplication
- interdeveloper duplication
How does duplication arise?
Slide 70
Slide 70 text
eliminate effects
between unrelated
things
Slide 71
Slide 71 text
Benefits
Slide 72
Slide 72 text
increase productivity
Slide 73
Slide 73 text
reduce risk
Slide 74
Slide 74 text
increase reversibility
Slide 75
Slide 75 text
every decision can
be changed!
Slide 76
Slide 76 text
Coding DRY
Slide 77
Slide 77 text
keep your code
decoupled
Slide 78
Slide 78 text
avoid global data
Slide 79
Slide 79 text
avoid similar
functions
Slide 80
Slide 80 text
Single responsibility
Slide 81
Slide 81 text
must to be
easy to test
Slide 82
Slide 82 text
Domain languages
Slide 83
Slide 83 text
"The limits of language
are the limits of one's
world"
- Ludwig Wittgenstein
Slide 84
Slide 84 text
computer languages
influence HOW you
think about a
problem
Slide 85
Slide 85 text
program close to the
problem domain
Slide 86
Slide 86 text
The Basic Tools
Slide 87
Slide 87 text
shell games
Slide 88
Slide 88 text
use the power of
shell commands
Slide 89
Slide 89 text
grep
Slide 90
Slide 90 text
No content
Slide 91
Slide 91 text
awk
Slide 92
Slide 92 text
No content
Slide 93
Slide 93 text
No content
Slide 94
Slide 94 text
xargs
Slide 95
Slide 95 text
No content
Slide 96
Slide 96 text
No content
Slide 97
Slide 97 text
power editing
Slide 98
Slide 98 text
one editor
Slide 99
Slide 99 text
use it very well
Slide 100
Slide 100 text
use it for all
editing things
Slide 101
Slide 101 text
editor features
Slide 102
Slide 102 text
configurable
Slide 103
Slide 103 text
extensible
Slide 104
Slide 104 text
programmable
Slide 105
Slide 105 text
increase your
cursor movement
Slide 106
Slide 106 text
automate
Slide 107
Slide 107 text
No content
Slide 108
Slide 108 text
No content
Slide 109
Slide 109 text
No content
Slide 110
Slide 110 text
No content
Slide 111
Slide 111 text
Debugging
Slide 112
Slide 112 text
fix the problem,
not the blame
Slide 113
Slide 113 text
No content
Slide 114
Slide 114 text
rubber ducking
Slide 115
Slide 115 text
No content
Slide 116
Slide 116 text
"select" isn't broken
Slide 117
Slide 117 text
don't assume it,
prove it
Slide 118
Slide 118 text
What makes a pragmatic programmer?
A pragmatic philosophy
A pragmatic approach