Slide 1

Slide 1 text

How to act like you (maybe actually) care about your work

Slide 2

Slide 2 text

Jacob Mather Co-Founder of Point Five Foundry IRC:  jmather   Twi0er:  @thejmather   Blog:  jmather.com  

Slide 3

Slide 3 text

Educate  yourself  con?nuously   “If you’re not growing, you’re dying.” —  Monty  Bishop  

Slide 4

Slide 4 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 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…

Slide 25

Slide 25 text

Composer  crash  course   Sample composer.json le { "require": { "monolog/monolog": "1.2.*" } }

Slide 26

Slide 26 text

Composer  crash  course   Install Composer Directory

Slide 27

Slide 27 text

Composer  crash  course   Install Composer Directory

Slide 28

Slide 28 text

Composer  crash  course   Install Composer Directory

Slide 29

Slide 29 text

Composer  crash  course   Run Composer Directory

Slide 30

Slide 30 text

Composer  crash  course   Run Composer Directory

Slide 31

Slide 31 text

Composer  crash  course   Run Composer Directory

Slide 32

Slide 32 text

Composer  crash  course   How to then use monolog

Slide 33

Slide 33 text

Composer  crash  course   How to then use monolog

Slide 34

Slide 34 text

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 soware, 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 oen, 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   “Soware developers tend to be soware 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   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   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   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   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   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   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   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   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   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   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   [email protected]   02/15/2007   22   Heather   Buchel   [email protected]   02/17/2007   23   Graham   Boyes   [email protected]   02/25/2007   24   John   Kary   [email protected]   02/30/2007   25   Casey   Wilson   [email protected]   02/30/2007   26   Eric   Houge   [email protected]   03/01/2007   27   David   Clark   [email protected]   03/01/2007   28   Rich   Bowen   [email protected]   03/01/2007   29   Damon   Jones   [email protected]   03/02/2007   30   Stuart   Herbert   [email protected]   03/02/2007   31   Omni   Adams   [email protected]   03/02/2007   32   Tyler   Stoud   [email protected]   03/02/2007   33   Marco   Pive0a   [email protected]   03/03/2007   34   Jonah   Lupton   [email protected]   03/03/2007   35   Al   Ganiev   [email protected]   03/03/2007   36   Michael   Horn   [email protected]   03/03/2007   37   Andy   Leon   [email protected]   03/03/2007   38   Baulder   Rensch   [email protected]   03/04/2007   39   Joshua   Estes   [email protected]   03/04/2007   40   Jeremy   Mikola   [email protected]   03/04/2007   #   First   Last   Email   Purchased     1   Igor   Wiedler   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   01/30/2007   5   Ma0   Farmer   [email protected]   01/30/2007   6   Jeremy   Crump   [email protected]   02/01/2007   7   April   Mather   [email protected]   02/01/2007   8   Dave   Schup   [email protected]   02/01/2007   9   Michael   Hilde   [email protected]   02/02/2007   10   Jamie   Plato   [email protected]   02/02/2007   11   Pablo   Godel   [email protected]   02/02/2007   12   Andrew   Kaser   [email protected]   02/02/2007   13   Jeremy   Cook   [email protected]   02/03/2007   14   Larry   Garfield   [email protected]   02/03/2007   15   Adam   Culp   [email protected]   02/03/2007   16   Luis   Cordova   [email protected]   02/03/2007   17   Lonnie   Brown   [email protected]   02/03/2007   18   Jeff   Carouth   [email protected]   02/04/2007   19   Jeremy   Kendell   [email protected]   02/04/2007   20   Ismael   Ambrosi   [email protected]   02/04/2007  

Slide 80

Slide 80 text

#   First   Last   Email   Purchased     21   Dave   Marshall   [email protected]   02/15/2007   22   Heather   Buchel   [email protected]   02/17/2007   23   Graham   Boyes   [email protected]   02/25/2007   24   John   Kary   [email protected]   02/30/2007   25   Casey   Wilson   [email protected]   02/30/2007   26   Eric   Houge   [email protected]   03/01/2007   27   David   Clark   [email protected]   03/01/2007   28   Rich   Bowen   [email protected]   03/01/2007   29   Damon   Jones   [email protected]   03/02/2007   30   Stuart   Herbert   [email protected]   03/02/2007   31   Omni   Adams   [email protected]   03/02/2007   32   Tyler   Stoud   [email protected]   03/02/2007   33   Marco   Pive0a   [email protected]   03/03/2007   34   Jonah   Lupton   [email protected]   03/03/2007   35   Al   Ganiev   [email protected]   03/03/2007   36   Michael   Horn   [email protected]   03/03/2007   37   Andy   Leon   [email protected]   03/03/2007   38   Baulder   Rensch   [email protected]   03/04/2007   39   Joshua   Estes   [email protected]   03/04/2007   40   Jeremy   Mikola   [email protected]   03/04/2007   #   First   Last   Email   Purchased     1   Igor   Wiedler   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   01/30/2007   5   Ma0   Farmer   [email protected]   01/30/2007   6   Jeremy   Crump   [email protected]   02/01/2007   7   April   Mather   [email protected]   02/01/2007   8   Dave   Schup   [email protected]   02/01/2007   9   Michael   Hilde   [email protected]   02/02/2007   10   Jamie   Plato   [email protected]   02/02/2007   11   Pablo   Godel   [email protected]   02/02/2007   12   Andrew   Kaser   [email protected]   02/02/2007   13   Jeremy   Cook   [email protected]   02/03/2007   14   Larry   Garfield   [email protected]   02/03/2007   15   Adam   Culp   [email protected]   02/03/2007   16   Luis   Cordova   [email protected]   02/03/2007   17   Lonnie   Brown   [email protected]   02/03/2007   18   Jeff   Carouth   [email protected]   02/04/2007   19   Jeremy   Kendell   [email protected]   02/04/2007   20   Ismael   Ambrosi   [email protected]   02/04/2007  

Slide 81

Slide 81 text

#   First   Last   Email   Purchased     1   Igor   Wiedler   [email protected]   01/15/2007   2   Fabien   Potencier   [email protected]   01/17/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   4   Cal   Evans   [email protected]   01/30/2007   5   Ma0   Farmer   [email protected]   01/30/2007   6   Jeremy   Crump   [email protected]   02/01/2007   7   April   Mather   [email protected]   02/01/2007   8   Dave   Schup   [email protected]   02/01/2007   9   Michael   Hilde   [email protected]   02/02/2007   10   Jamie   Plato   [email protected]   02/02/2007   11   Pablo   Godel   [email protected]   02/02/2007   12   Andrew   Kaser   [email protected]   02/02/2007   13   Jeremy   Cook   [email protected]   02/03/2007   14   Larry   Garfield   [email protected]   02/03/2007   15   Adam   Culp   [email protected]   02/03/2007   16   Luis   Cordova   [email protected]   02/03/2007   17   Lonnie   Brown   [email protected]   02/03/2007   18   Jeff   Carouth   [email protected]   02/04/2007   19   Jeremy   Kendell   [email protected]   02/04/2007   20   Ismael   Ambrosi   [email protected]   02/04/2007   #   First   Last   Email   Purchased     21   Dave   Marshall   [email protected]   02/15/2007   22   Heather   Buchel   [email protected]   02/17/2007   23   Graham   Boyes   [email protected]   02/25/2007   24   John   Kary   [email protected]   02/30/2007   25   Casey   Wilson   [email protected]   02/30/2007   26   Eric   Houge   [email protected]   03/01/2007   27   David   Clark   [email protected]   03/01/2007   28   Rich   Bowen   [email protected]   03/01/2007   29   Damon   Jones   [email protected]   03/02/2007   30   Stuart   Herbert   [email protected]   03/02/2007   31   Omni   Adams   [email protected]   03/02/2007   32   Tyler   Stoud   [email protected]   03/02/2007   33   Marco   Pive0a   [email protected]   03/03/2007   34   Jonah   Lupton   [email protected]   03/03/2007   35   Al   Ganiev   [email protected]   03/03/2007   36   Michael   Horn   [email protected]   03/03/2007   37   Andy   Leon   [email protected]   03/03/2007   38   Baulder   Rensch   [email protected]   03/04/2007   39   Joshua   Estes   [email protected]   03/04/2007   40   Jeremy   Mikola   [email protected]   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   [email protected]   01/30/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   2   Fabien   Potencier   [email protected]   01/17/2007   1   Igor   Wiedler   [email protected]   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   [email protected]   01/30/2007   3   Rasmus   Lerdorf   [email protected]   01/25/2007   2   Fabien   Potencier   [email protected]   01/17/2007   1   Igor   Wiedler   [email protected]   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 soware 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 soware development, you can make you job easier, and build better soware 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 soware 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.

Slide 96

Slide 96 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales

Slide 97

Slide 97 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales

Slide 98

Slide 98 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales

Slide 99

Slide 99 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales

Slide 100

Slide 100 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales •  Frontend Developers

Slide 101

Slide 101 text

Some  typical  job  roles   •  Designers •  Project Managers •  Marketing / Sales •  Frontend Developers •  Backend Developers

Slide 102

Slide 102 text

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.

Slide 109

Slide 109 text