Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

5048618030da9845ed2710e0dc4da654?s=47 Jacob Mather
November 17, 2012

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

Programming is a very involved career path, with many ongoing requirements to stay up on. Here we talk about those requirements and how to equip yourself with the tools to succeed.

For more information, see http://jmather.com/talks/2012-11-17/

5048618030da9845ed2710e0dc4da654?s=128

Jacob Mather

November 17, 2012
Tweet

Transcript

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

    work
  2. Jacob Mather Co-Founder of Point Five Foundry IRC:  jmather  

    Twi0er:  @thejmather   Blog:  jmather.com  
  3. Educate  yourself  con?nuously   “If you’re not growing, you’re dying.”

    —  Monty  Bishop  
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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
  12. You  must  learn  to  learn   A lot of people

    won't do something because they're afraid they will fail.
  13. You  must  learn  to  learn   If you can learn

    new things quickly, the only way you fail is by not trying.
  14. 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.
  15. Having  a  cheerleader  helps   Some people function better with

    regular outside input. Mentors can provide that! http://phpmentoring.org or #phpmentoring on Freenode
  16. I  know  what  you’re  thinking   You’re thinking how to

    nd out what you should learn?
  17. Be  a  part  of  the  community   •  IRC • 

    Forums •  Mailing lists •  User groups
  18. Take  advantage  of  the  community   •  Stop reinventing the

    wheel. •  Stop being afraid of other people’s code •  Stop solving uninteresting problems.
  19. Take  advantage  of  the  community   •  Stop reinventing the

    wheel. •  Stop being afraid of other people’s code •  Stop solving uninteresting problems.
  20. Take  advantage  of  the  community   •  Stop reinventing the

    wheel. •  Stop being afraid of other people’s code •  Stop solving uninteresting problems.
  21. Take  advantage  of  the  community   •  Stop reinventing the

    wheel. •  Stop being afraid of other people’s code •  Stop solving uninteresting problems.
  22. But  dependencies  are  hard!   ey are not as hard

    as you think…
  23. But  dependencies  are  hard!   ey are not as hard

    as you think…
  24. But  dependencies  are  hard!   ey are not as hard

    as you think…
  25. Composer  crash  course   Sample composer.json le { "require": {

    "monolog/monolog": "1.2.*" } }
  26. Composer  crash  course   Install Composer Directory

  27. Composer  crash  course   Install Composer Directory

  28. Composer  crash  course   Install Composer Directory

  29. Composer  crash  course   Run Composer Directory

  30. Composer  crash  course   Run Composer Directory

  31. Composer  crash  course   Run Composer Directory

  32. Composer  crash  course   How to then use monolog

  33. Composer  crash  course   How to then use monolog

  34. But  learning  takes  !me   Sure does. So now I’m

    going to show you...
  35. How to make time.

  36. Automate  everything   Anything you have to do by hand,

    you can (and will) mess up. Eventually.
  37. 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.
  38. Automate  your  history   Use Git. Or Mercurial, or Subversion.

    Pick one. Use it. Constantly. Seriously. How? at’s another presentation.
  39. 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  
  40. 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.
  41. 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.
  42. What  happens  if  you  don’t  test  

  43. What  happens  if  you  don’t  test  

  44. Automate  your  tes?ng:  bootcamp   Testing is easy. Let me

    show you how.
  45. Automate  your  tes?ng:  bootcamp   First, the obligatory contrived example.

  46. Automate  your  tes?ng:  bootcamp   First, the obligatory contrived example.

  47. Automate  your  tes?ng:  bootcamp   First, the obligatory contrived example.

  48. Automate  your  tes?ng:  bootcamp   First, the obligatory contrived example.

  49. Automate  your  tes?ng:  bootcamp   Second, the basic setup.

  50. Automate  your  tes?ng:  bootcamp   ird, let’s de ne a

    test
  51. Automate  your  tes?ng:  bootcamp   Testing the wrong way

  52. Automate  your  tes?ng:  bootcamp   Testing the wrong way

  53. Automate  your  tes?ng:  bootcamp   Testing the wrong way

  54. Automate  your  tes?ng:  bootcamp   Testing the wrong way

  55. Automate  your  tes?ng:  bootcamp   Testing the right way

  56. Automate  your  tes?ng:  bootcamp   Testing the right way

  57. Automate  your  tes?ng:  bootcamp   Testing the right way

  58. Automate  your  tes?ng:  bootcamp   Testing the right way

  59. Automate  your  tes?ng:  bootcamp   Testing the right way

  60. Automate  your  tes?ng:  bootcamp   Testing the right way

  61. Automate  your  tes?ng:  bootcamp   Testing the right way

  62. Automate  your  tes?ng:  bootcamp   Testing the right way

  63. Automate  your  tes?ng:  bootcamp   Testing the right way (with

    MockBuilder)
  64. 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?
  65. Automate  your  deployment   “Prayer should not be part of

    the steps in the deployment process.” —  Ayende  Rahien,  @ayende  
  66. Automate  your  deployment   ere are tools speci cally designed

    to help. •  Capistrano •  Magallanes •  Phing •  Bash Scripts
  67. Automate  your  plaUorm   ere are services that can make

    this easier. •  PagodaBox •  Orchestra.io •  AppFog •  Heroku
  68. Automate  your  process   Continuous Integration can use your tests

    and your deployment setup to push updates to production as quickly as possible.
  69. That’s  a  lot  to  take  in   So let’s take

    a moment and re ect on things from a higher level.
  70. 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  
  71. 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.  
  72. 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.
  73. 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  
  74. 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
  75. 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
  76. 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
  77. 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
  78. Let’s  try  it  in  prac?ce.   Find Mr. Jones

  79. #   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  
  80. #   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  
  81. #   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.
  82. 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  
  83. 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  
  84. 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.
  85. 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.
  86. 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.
  87. 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.
  88. 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.
  89. 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.
  90. S.O.L.I.D.   •  Single Responsibility •  Open for extension • 

    Like their sub classes •  Incorporate interfaces •  Depend on abstractions
  91. 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.
  92. 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.
  93. You are only as good as the team you support.

  94. 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.
  95. You’re  not  the  only  geek   As excited as you

    get about code, others get about their specialties.
  96. Some  typical  job  roles   •  Designers •  Project Managers

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

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

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

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

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

    •  Marketing / Sales •  Frontend Developers •  Backend Developers
  102. Unfortunate  truth  #1   Not everyone will be quali ed

    to do the job they are hired to do.
  103. Unfortunate  truth  #2   Not everyone who is quali ed

    will actually be any good at what they were hired to do.
  104. Unfortunate  truth  #3   Not everyone who is actually good

    at something will be given the freedom to prove it.
  105. 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.
  106. 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.
  107. Having  a  great  team  ma0ers,  really   Work with your

    team collectively to accomplish things that individually would never be possible.
  108. 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.
  109. <?php exit(0); Continue learning at: http://jmather.com/talks/2012-11-17/