Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 5
Slide 5 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 6
Slide 6 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 7
Slide 7 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 8
Slide 8 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 9
Slide 9 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 10
Slide 10 text
Where
to
start
• Know your stack enough to debug.
• Pick an editor, and use it.
• Push outside of your comfort zone.
• Find a nerd-crush.
• Learn common patterns.
• Build a pet project.
Slide 11
Slide 11 text
It
takes
10,000
hours
To become truly, objectively great, it takes
tremendous effort.
0
2
4
6
8
10
12
80
60
40
20
Years To Master
Hrs/wk
Slide 12
Slide 12 text
You
must
learn
to
learn
A lot of people won't do something because
they're afraid they will fail.
Slide 13
Slide 13 text
You
must
learn
to
learn
If you can learn new things quickly, the only
way you fail is by not trying.
Slide 14
Slide 14 text
How
to
know
you
are
on
track
You should be learning at such a constant
rate that the code you wrote six months ago
embarrasses you now.
Slide 15
Slide 15 text
Having
a
cheerleader
helps
Some people function better with regular
outside input. Mentors can provide that!
http://phpmentoring.org or #phpmentoring on Freenode
Slide 16
Slide 16 text
I
know
what
you’re
thinking
You’re thinking how to nd out what you
should learn?
Slide 17
Slide 17 text
Be
a
part
of
the
community
• IRC
• Forums
• Mailing lists
• User groups
Slide 18
Slide 18 text
Take
advantage
of
the
community
• Stop reinventing the wheel.
• Stop being afraid of other people’s code
• Stop solving uninteresting problems.
Slide 19
Slide 19 text
Take
advantage
of
the
community
• Stop reinventing the wheel.
• Stop being afraid of other people’s code
• Stop solving uninteresting problems.
Slide 20
Slide 20 text
Take
advantage
of
the
community
• Stop reinventing the wheel.
• Stop being afraid of other people’s code
• Stop solving uninteresting problems.
Slide 21
Slide 21 text
Take
advantage
of
the
community
• Stop reinventing the wheel.
• Stop being afraid of other people’s code
• Stop solving uninteresting problems.
Slide 22
Slide 22 text
But
dependencies
are
hard!
ey are not as hard as you think…
Slide 23
Slide 23 text
But
dependencies
are
hard!
ey are not as hard as you think…
Slide 24
Slide 24 text
But
dependencies
are
hard!
ey are not as hard as you think…
But
learning
takes
!me
Sure does. So now I’m going to show you...
Slide 35
Slide 35 text
How to make time.
Slide 36
Slide 36 text
Automate
everything
Anything you have to do by hand, you can
(and will) mess up.
Eventually.
Slide 37
Slide 37 text
Automate
your
history
Version control solutions let you track the
timeline of your soware, and assists
coordination between multiple people on
the same project.
Slide 38
Slide 38 text
Automate
your
history
Use Git. Or Mercurial, or Subversion.
Pick one. Use it. Constantly. Seriously.
How? at’s another presentation.
Slide 39
Slide 39 text
Automate
your
tes?ng
“Computers are great at doing the same
thing the same way every time you ask it to.
Humans, not so much”
—
Chris
Hartjes,
@grmpyprogrammer
Slide 40
Slide 40 text
All
code
is
tested
Every line of code is eventually tested.
All too oen, that test happens in
production, in front of actual users.
ere is a better way.
Slide 41
Slide 41 text
Decide
to
test
up
front
Control how and when you test to get the
most bene t out of it.
Do everything you can to ensure show-
stopping bugs do not reach production.
Slide 42
Slide 42 text
What
happens
if
you
don’t
test
Slide 43
Slide 43 text
What
happens
if
you
don’t
test
Slide 44
Slide 44 text
Automate
your
tes?ng:
bootcamp
Testing is easy.
Let me show you how.
Slide 45
Slide 45 text
Automate
your
tes?ng:
bootcamp
First, the obligatory contrived example.
Slide 46
Slide 46 text
Automate
your
tes?ng:
bootcamp
First, the obligatory contrived example.
Slide 47
Slide 47 text
Automate
your
tes?ng:
bootcamp
First, the obligatory contrived example.
Slide 48
Slide 48 text
Automate
your
tes?ng:
bootcamp
First, the obligatory contrived example.
Slide 49
Slide 49 text
Automate
your
tes?ng:
bootcamp
Second, the basic setup.
Slide 50
Slide 50 text
Automate
your
tes?ng:
bootcamp
ird, let’s de ne a test
Slide 51
Slide 51 text
Automate
your
tes?ng:
bootcamp
Testing the wrong way
Slide 52
Slide 52 text
Automate
your
tes?ng:
bootcamp
Testing the wrong way
Slide 53
Slide 53 text
Automate
your
tes?ng:
bootcamp
Testing the wrong way
Slide 54
Slide 54 text
Automate
your
tes?ng:
bootcamp
Testing the wrong way
Slide 55
Slide 55 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 56
Slide 56 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 57
Slide 57 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 58
Slide 58 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 59
Slide 59 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 60
Slide 60 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 61
Slide 61 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 62
Slide 62 text
Automate
your
tes?ng:
bootcamp
Testing the right way
Slide 63
Slide 63 text
Automate
your
tes?ng:
bootcamp
Testing the right way (with MockBuilder)
Slide 64
Slide 64 text
The
soTer
side
of
tes?ng
ere is something special that happens
when you stop thinking that your code
works, and start knowing that it does.
What else we can automate?
Slide 65
Slide 65 text
Automate
your
deployment
“Prayer should not be part of the steps in
the deployment process.”
—
Ayende
Rahien,
@ayende
Slide 66
Slide 66 text
Automate
your
deployment
ere are tools speci cally designed to help.
• Capistrano
• Magallanes
• Phing
• Bash Scripts
Slide 67
Slide 67 text
Automate
your
plaUorm
ere are services that can make this easier.
• PagodaBox
• Orchestra.io
• AppFog
• Heroku
Slide 68
Slide 68 text
Automate
your
process
Continuous Integration can use your tests
and your deployment setup to push updates
to production as quickly as possible.
Slide 69
Slide 69 text
That’s
a
lot
to
take
in
So let’s take a moment and re ect on things
from a higher level.
Slide 70
Slide 70 text
Realize
your
actual
job
“Soware developers tend to be soware
addicts who think their job is to write code.
But it's not. eir job is to solve problems.”
—
Jeff
Atwood,
@codinghorror
Slide 71
Slide 71 text
When
solving
problems
Be sure that you are:
1. Solving
a
problem
the
client
has.
2. With
a
solu?on
that
makes
sense.
3. That
it
is
fit
for
the
purpose
built.
Slide 72
Slide 72 text
Let’s
say
for
example…
• You are running a conference.
• You built your own ticket sales system.
• You need a list of people coming.
• You’ll have to check them off.
Slide 73
Slide 73 text
That’s
easy,
right?
ID
First
Name
Last
Name
Email
Purchased
On
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
Slide 74
Slide 74 text
Let’s
try
it
in
prac?ce.
ID
First
Name
Last
Name
Email
Purchased
On
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
Find Mr. Potencier
Slide 75
Slide 75 text
Let’s
try
it
in
prac?ce.
ID
First
Name
Last
Name
Email
Purchased
On
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
Find Mr. Potencier
Slide 76
Slide 76 text
Let’s
try
it
in
prac?ce.
ID
First
Name
Last
Name
Email
Purchased
On
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
Find Mr. Evans
Slide 77
Slide 77 text
Let’s
try
it
in
prac?ce.
ID
First
Name
Last
Name
Email
Purchased
On
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
Find Mr. Evans
Slide 78
Slide 78 text
Let’s
try
it
in
prac?ce.
Find Mr. Jones
Slide 79
Slide 79 text
#
First
Last
Email
Purchased
21
Dave
Marshall
davedevelopment@exp.co
02/15/2007
22
Heather
Buchel
hbuchel@example.com
02/17/2007
23
Graham
Boyes
toaodotnet@example.com
02/25/2007
24
John
Kary
johnkary@example.com
02/30/2007
25
Casey
Wilson
caseyw@example.com
02/30/2007
26
Eric
Houge
ehouge@example.com
03/01/2007
27
David
Clark
dmclark@example.com
03/01/2007
28
Rich
Bowen
rbowen@example.com
03/01/2007
29
Damon
Jones
damon__jones@exmp.com
03/02/2007
30
Stuart
Herbert
stuherbert@example.com
03/02/2007
31
Omni
Adams
omnicolor@example.com
03/02/2007
32
Tyler
Stoud
tylerstoud@example.com
03/02/2007
33
Marco
Pive0a
ocramius@example.com
03/03/2007
34
Jonah
Lupton
jonahlupton@example.com
03/03/2007
35
Al
Ganiev
helios_ag@example.com
03/03/2007
36
Michael
Horn
lvl15techninja@emlp.com
03/03/2007
37
Andy
Leon
acleon@example.com
03/03/2007
38
Baulder
Rensch
brensch@example.com
03/04/2007
39
Joshua
Estes
joshuaeastes@emlp.com
03/04/2007
40
Jeremy
Mikola
jmikola@example.com
03/04/2007
#
First
Last
Email
Purchased
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
5
Ma0
Farmer
m14t@example.com
01/30/2007
6
Jeremy
Crump
jcrump@example.com
02/01/2007
7
April
Mather
aprilmather@example.com
02/01/2007
8
Dave
Schup
dschupbach@example.com
02/01/2007
9
Michael
Hilde
mhilde@example.com
02/02/2007
10
Jamie
Plato
suporgani@example.com
02/02/2007
11
Pablo
Godel
pgodel@example.com
02/02/2007
12
Andrew
Kaser
kindsoles@example.com
02/02/2007
13
Jeremy
Cook
jcook21@example.com
02/03/2007
14
Larry
Garfield
crell@example.com
02/03/2007
15
Adam
Culp
adamculp@example.com
02/03/2007
16
Luis
Cordova
cordoval@example.com
02/03/2007
17
Lonnie
Brown
lbrown972@example.com
02/03/2007
18
Jeff
Carouth
jcarouth@example.com
02/04/2007
19
Jeremy
Kendell
jeremykendall@example.co
02/04/2007
20
Ismael
Ambrosi
iambrosi@example.com
02/04/2007
Slide 80
Slide 80 text
#
First
Last
Email
Purchased
21
Dave
Marshall
davedevelopment@exp.co
02/15/2007
22
Heather
Buchel
hbuchel@example.com
02/17/2007
23
Graham
Boyes
toaodotnet@example.com
02/25/2007
24
John
Kary
johnkary@example.com
02/30/2007
25
Casey
Wilson
caseyw@example.com
02/30/2007
26
Eric
Houge
ehouge@example.com
03/01/2007
27
David
Clark
dmclark@example.com
03/01/2007
28
Rich
Bowen
rbowen@example.com
03/01/2007
29
Damon
Jones
damon__jones@exmp.com
03/02/2007
30
Stuart
Herbert
stuherbert@example.com
03/02/2007
31
Omni
Adams
omnicolor@example.com
03/02/2007
32
Tyler
Stoud
tylerstoud@example.com
03/02/2007
33
Marco
Pive0a
ocramius@example.com
03/03/2007
34
Jonah
Lupton
jonahlupton@example.com
03/03/2007
35
Al
Ganiev
helios_ag@example.com
03/03/2007
36
Michael
Horn
lvl15techninja@emlp.com
03/03/2007
37
Andy
Leon
acleon@example.com
03/03/2007
38
Baulder
Rensch
brensch@example.com
03/04/2007
39
Joshua
Estes
joshuaeastes@emlp.com
03/04/2007
40
Jeremy
Mikola
jmikola@example.com
03/04/2007
#
First
Last
Email
Purchased
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
5
Ma0
Farmer
m14t@example.com
01/30/2007
6
Jeremy
Crump
jcrump@example.com
02/01/2007
7
April
Mather
aprilmather@example.com
02/01/2007
8
Dave
Schup
dschupbach@example.com
02/01/2007
9
Michael
Hilde
mhilde@example.com
02/02/2007
10
Jamie
Plato
suporgani@example.com
02/02/2007
11
Pablo
Godel
pgodel@example.com
02/02/2007
12
Andrew
Kaser
kindsoles@example.com
02/02/2007
13
Jeremy
Cook
jcook21@example.com
02/03/2007
14
Larry
Garfield
crell@example.com
02/03/2007
15
Adam
Culp
adamculp@example.com
02/03/2007
16
Luis
Cordova
cordoval@example.com
02/03/2007
17
Lonnie
Brown
lbrown972@example.com
02/03/2007
18
Jeff
Carouth
jcarouth@example.com
02/04/2007
19
Jeremy
Kendell
jeremykendall@example.co
02/04/2007
20
Ismael
Ambrosi
iambrosi@example.com
02/04/2007
Slide 81
Slide 81 text
#
First
Last
Email
Purchased
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
4
Cal
Evans
calevans@example.com
01/30/2007
5
Ma0
Farmer
m14t@example.com
01/30/2007
6
Jeremy
Crump
jcrump@example.com
02/01/2007
7
April
Mather
aprilmather@example.com
02/01/2007
8
Dave
Schup
dschupbach@example.com
02/01/2007
9
Michael
Hilde
mhilde@example.com
02/02/2007
10
Jamie
Plato
suporgani@example.com
02/02/2007
11
Pablo
Godel
pgodel@example.com
02/02/2007
12
Andrew
Kaser
kindsoles@example.com
02/02/2007
13
Jeremy
Cook
jcook21@example.com
02/03/2007
14
Larry
Garfield
crell@example.com
02/03/2007
15
Adam
Culp
adamculp@example.com
02/03/2007
16
Luis
Cordova
cordoval@example.com
02/03/2007
17
Lonnie
Brown
lbrown972@example.com
02/03/2007
18
Jeff
Carouth
jcarouth@example.com
02/04/2007
19
Jeremy
Kendell
jeremykendall@example.co
02/04/2007
20
Ismael
Ambrosi
iambrosi@example.com
02/04/2007
#
First
Last
Email
Purchased
21
Dave
Marshall
davedevelopment@exp.co
02/15/2007
22
Heather
Buchel
hbuchel@example.com
02/17/2007
23
Graham
Boyes
toaodotnet@example.com
02/25/2007
24
John
Kary
johnkary@example.com
02/30/2007
25
Casey
Wilson
caseyw@example.com
02/30/2007
26
Eric
Houge
ehouge@example.com
03/01/2007
27
David
Clark
dmclark@example.com
03/01/2007
28
Rich
Bowen
rbowen@example.com
03/01/2007
29
Damon
Jones
damon__jones@exmp.com
03/02/2007
30
Stuart
Herbert
stuherbert@example.com
03/02/2007
31
Omni
Adams
omnicolor@example.com
03/02/2007
32
Tyler
Stoud
tylerstoud@example.com
03/02/2007
33
Marco
Pive0a
ocramius@example.com
03/03/2007
34
Jonah
Lupton
jonahlupton@example.com
03/03/2007
35
Al
Ganiev
helios_ag@example.com
03/03/2007
36
Michael
Horn
lvl15techninja@emlp.com
03/03/2007
37
Andy
Leon
acleon@example.com
03/03/2007
38
Baulder
Rensch
brensch@example.com
03/04/2007
39
Joshua
Estes
joshuaeastes@emlp.com
03/04/2007
40
Jeremy
Mikola
jmikola@example.com
03/04/2007
is worked with four people.
is does not work with 40.
is will not work with 400.
Slide 82
Slide 82 text
Let’s
really
solve
the
problem
ID
First
Name
Last
Name
Email
Purchased
On
4
Cal
Evans
calevans@example.com
01/30/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
Slide 83
Slide 83 text
Let’s
really
solve
the
problem
ID
First
Name
Last
Name
Email
Purchased
On
4
Cal
Evans
calevans@example.com
01/30/2007
3
Rasmus
Lerdorf
rasmus@example.com
01/25/2007
2
Fabien
Potencier
fabpot@example.com
01/17/2007
1
Igor
Wiedler
igorwesome@example.com
01/15/2007
Slide 84
Slide 84 text
ATer
deciding
on
a
solu?on
Once you have decided how you will solve
your user’s problem, it is time to make the
magic happen.
Let’s talk about code.
Slide 85
Slide 85 text
Code
is
a
frenemy
You need to use code to build soware that
solves users problems.
Every line of code you write is another
potential entry point for a bug.
Slide 86
Slide 86 text
When
you
write
code
Remember that you will have to maintain it.
Try to write so that when you come back in
six months (and see how bad it is) you still
understand what it is doing.
Slide 87
Slide 87 text
Spaghej
code
e way you test spaghetti code is the same
way you test spaghetti. row it against the
wall, and see if it [works].
Spaghetti code actively resists testing.
Slide 88
Slide 88 text
Write
code
deliberately
Using proven methods of soware
development, you can make you job easier,
and build better soware faster than was
ever possible before.
Slide 89
Slide 89 text
Don’t
repeat
yourself
If you’re using the same code in multiple
places, abstract it to a shared class, so when
requirements change, you only have to
change them once.
Slide 90
Slide 90 text
S.O.L.I.D.
• Single Responsibility
• Open for extension
• Like their sub classes
• Incorporate interfaces
• Depend on abstractions
Slide 91
Slide 91 text
Proudly
invented
elsewhere
e less code you write, the less code you
have to maintain.
Using other people’s code means that your
soware can improve while you sleep.
Slide 92
Slide 92 text
We’re
in
the
home
stretch
We’ve covered learning, what to learn, how
to make time to learn, and things to
consider when practicing what we’ve
learned.
ere’s one last thing I want to make clear.
Slide 93
Slide 93 text
You are only as good as the
team you support.
Slide 94
Slide 94 text
People
are
good
at
different
things
Your coworkers were all hired for a reason.
Let them do their jobs, and even help them
do their jobs better when you can.
Slide 95
Slide 95 text
You’re
not
the
only
geek
As excited as you get about code, others get
about their specialties.
Unfortunate
truth
#1
Not everyone will be quali ed to do the job
they are hired to do.
Slide 103
Slide 103 text
Unfortunate
truth
#2
Not everyone who is quali ed will actually
be any good at what they were hired to do.
Slide 104
Slide 104 text
Unfortunate
truth
#3
Not everyone who is actually good at
something will be given the freedom to
prove it.
Slide 105
Slide 105 text
How
to
not
be
that
programmer
Investing a little time in two things will help
your career immensely
1. Actually learn how to make friends.
2. Actually learn how to make small talk.
Slide 106
Slide 106 text
Do
you
have
a
great
team?
If you don’t know that you have a great
team, then you likely don’t.
e only way to x that is to nd a new one.
Slide 107
Slide 107 text
Having
a
great
team
ma0ers,
really
Work with your team collectively to
accomplish things that individually would
never be possible.
Slide 108
Slide 108 text
In
closing
Learning is the core of what we do.
Community shows us what to learn.
Automation makes time to improve.
Solve problems, don’t just write code.
Let your team back you up.