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

Initiation to Code: A Roadmap for New Developer...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Alice M. Alice M.
September 12, 2014

Initiation to Code: A Roadmap for New Developers and Their Mentors

Starting your first programming job can be a daunting experience. How do you progress from basic CRUD apps to competent work on a complex application? Meanwhile, training inexperienced developers can feel like a goal with no roadmap. How can you help a newbie when you can’t even remember what it was like to be in his shoes? Drawing from a wide range of topics including cognitive psychology, mysticism, and alligators, this talk will address both sides of the technical onboarding challenge, providing thorough and structured advice for both entry-level developers and those who mentor them. Many of the tips on skill acquisition and learning should be helpful to those in more advanced positions as well.

Avatar for Alice M.

Alice M.

September 12, 2014

Other Decks in Programming

Transcript

  1. Junior developers are good for your team. • Challenge more

    experienced engineers to clarify and refine their knowledge • Practicing communication makes your team stronger • People do their best work when they’re treading water ◦ Best case scenario: you’re challenging everyone, all the time ◦ Junior devs make that easier to achieve
  2. Structure • Three phases based on the noob’s comfort level

    • Each phase covers advice for both the mentor and the noob • No time estimates — everyone is different
  3. PHASE 1: Learning to Swim • You know some basics.

    • You’ve never gone swimming in a large code base before. • You have no experience working on a team making software that people actually use.
  4. PHASE 1: For Mentors • Best case scenario: assign the

    noob a dedicated mentor • This person: ◦ Is a good communicator ◦ Actively budgets time for the noob • Significantly lowered onboarding time at New Relic • Even if you’re not a dedicated mentor, you can still use the advice from this talk
  5. Communication: A Template • Provide a framework for learning without

    spoon feeding all the answers • Think of the template method pattern...
  6. class Developer def do_stuff debug learn_pattern learn_quirk_of_design end def learn_quirk_of_design

    # teach your noob! end end Communication: A Template class JuniorDeveloper < Developer def debug # fix that bug! end def learn_pattern # study that pattern! end end
  7. class Developer def do_stuff debug learn_pattern learn_quirk_of_design end def learn_quirk_of_design

    # teach your noob! end end Communication: A Template class JuniorDeveloper < Developer def debug # fix that bug! end def learn_pattern # study that pattern! end end
  8. Communication: A Template • You fill in: anything unusual or

    unique to your application • They fill in: pretty much everything else
  9. Communication: A Template • Don’t assume knowledge • To get

    a sense of your noob’s initial level, quiz him a bit ◦ Don’t ask “Do you understand nested resources?” ◦ Instead, ask “How do nested resources work?” • If he doesn’t know some fundamental things, have him go read about them • If he has it covered, start him on some simple assignments
  10. Communication: A Template • Don’t restrict your guidance to the

    technical realm ◦ Introduce the team process ◦ Tell your noob who is working on what ◦ This is easy to forget, but it helps your noob a lot! • Be honest about your own limitations ◦ If you’re busy or you run out of patience, let him know politely ◦ If you’re confused, say so
  11. Metacognition is your brain’s skeleton key. • Active control over

    the cognitive processes involved in learning • Tightening the feedback loop with yourself • Correlated with general intelligence
  12. Metacognition is your brain’s skeleton key. • Plan an approach

    • Monitor the process • Reflect on the outcome
  13. Set explicit goals and expectations. “Plans are useless, but planning

    is indispensable.” – Dwight D. Eisenhower
  14. Set explicit goals and expectations. • It doesn’t matter if

    your goal changes in the middle; in fact, that’s great! • Not just for big things; for anything ◦ Reading documentation for a gem you’re about to use ◦ Writing a blog post ◦ Going into a meeting • Write it down
  15. Empower yourself with curiosity. • Stage I: Curiosity • Stage

    II: Control • Stage III: Conscious intent – Wallace Wang’s outline of the hacker mentality, from Steal This Computer Book 4.0
  16. Memory Palaces • Effective technique for encoding information into long-

    term memory • Oldest known mnemonic strategy ◦ Described by Cicero in De Oratore
  17. Memory Palaces • A walk through a familiar place •

    Add imagery representing what you want to memorize • Make the images as outrageous and weird as possible • You can also try using imaginary locations with characteristics that represent the ideas
  18. Phase 1 Summary • Provide a framework for skill acquisition

    without spoon-feeding • Be honest about your own limitations • Pair program Mentor
  19. Phase 1 Summary • Provide a framework for skill acquisition

    without spoon-feeding • Be honest about your own limitations • Pair program Mentor • METACOGNITION • blah blah other stuff Noob
  20. PHASE 2: Touring the Swamp • The path is clearer

    and the stumbling blocks are well- defined. • You can work independently on small things, but you still need guidance often. • You usually have a rough idea of what to do next, but less often how to do it.
  21. Help your noob stay challenged. • This phase is all

    about improvisation • DON’T just assign whatever happens to come up
  22. Help your noob stay challenged. • Your objective: Keep your

    noob’s head just barely above the water • Much like decorators add functionality to an object at runtime… ◦ You must improvise to add new functionality to your noob
  23. Help your noob stay challenged. • Pay attention to what

    your noob has worked on and favor assignments that are harder or dissimilar ◦ If you can’t remember what your noob has done, it’s okay to ask
  24. Help your noob stay challenged. • Train your noob to

    look at her code with a pessimistic eye ◦ What could go wrong? ◦ What assumptions have we made that could sometimes be false? ◦ What would a null input do? ◦ Does it open any attack vectors?
  25. Encourage. • Could be as simple as saying “Good work”

    ◦ This is very easy to forget! But don’t forget! • Tell your noob when his code has been deployed ◦ Shows the noob his work matters ◦ Familiarizes him with the process ◦ “No, your code is not just being swallowed by a dark void.”
  26. Encourage. • The next tip is difficult to apply gracefully,

    so please take care... • Don’t let your noob be a wuss
  27. Be a code entomologist. • You’ll probably be debugging a

    lot at this stage • Whenever you fix a bug, think about what you got hung up on • Develop a taxonomy ◦ Generalize your bug as part of a category • “How could I have figured this out faster?”
  28. Be a code entomologist. • The SLT (Stupid Little Thing)

    ◦ The error is in syntax or spelling ◦ Smells like: complete understanding blended with mystifyingly broken code
  29. Be a code entomologist. • The SLT (Stupid Little Thing)

    ◦ The error is in syntax or spelling ◦ Smells like: complete understanding blended with mystifyingly broken code • Framework gotcha ◦ A component of the framework you’re using works in a way you didn’t expect ◦ Smells like: Mild confusion with a hint of changelog
  30. Be a code entomologist. • The principle here is: ◦

    Notice when you’re deep in a rabbit hole ◦ Take a step back ◦ Compare to previously encountered bugs
  31. Have opinions, even if they’re wrong. • If you change

    your mind later, you’ll remember it forever • Emotional connection strengthens memory retention • Deeper understanding of the tools you use ◦ Their philosophy, what they do and don’t do • Open opportunities for great conversations with people who know more than you
  32. On that note, review others’ code. • Even if you

    don’t feel qualified • Thoughtful exchanges are not a waste of time • The reviewee will most likely appreciate it
  33. Find an independent project. • This is the ideal time

    for a self-driven project • A personal project is okay, but richer experience if it’s for your company or team ◦ Lots of potential collaborators ◦ Real usability testing! ◦ Accountability is almost as good as a deadline • Using the product (cf. Phase 1) can provide ideas
  34. Find an independent project. • Otherwise, try an internal tool

    • What would help your team be more effective? ◦ Faster? ◦ More knowledgeable? ◦ Easier to communicate?
  35. Phase 2 Summary • Objective: maintain the right challenge level

    • Tactics: ◦ Improvise ◦ Add depth • Don’t forget to encourage Mentor • Catalogue what you learn from bugs • Invite opportunities to be wrong • Start working on an independent project Noob
  36. PHASE 3: Swimming Free • You still have a lot

    to learn, but you can work independently most of the time. • Progress is mostly self-driven. • Pairing sessions feel more collaborative than instructive.
  37. What makes an initiation? • Would not be trivial for

    someone at a higher level • Demands communication with senior engineers • Provides demonstrable (preferably quantifiable) value
  38. My rite of passage... “There are only two hard things

    in Computer Science: cache invalidation and naming things.”
  39. My rite of passage... • Build predictable keys based on

    a set of attributes (sort type, request type, account ID) • When cache is busted for a given account, build all possible keys and delete each ◦ Much faster than a wildcard match!
  40. My rite of passage... • Build predictable keys based on

    a set of attributes (sort type, request type, account ID) • When cache is busted for a given account, build all possible keys and delete each ◦ Much faster than a wildcard match! But what if we add a new sort type? (The code shouldn’t have to change.)
  41. My rite of passage... • Store any encountered value for

    sort type in Redis • “But I thought we were reducing load on Redis!” Yup. • So add an intermediate layer of caching at the class level ◦ Thread-safe key-value store in controller ◦ If a value exists in the class-level cache, it’s already in Redis, so don’t store it again
  42. My rite of passage... • Store any encountered value for

    sort type in Redis • “But I thought we were reducing load on Redis!” Yup. • So add an intermediate layer of caching at the class level ◦ Thread-safe key-value store in controller ◦ If a value exists in the class-level cache, it’s already in Redis, so don’t store it again Oh, and test all this.
  43. What makes an initiation? • You don’t have to tell

    your noob it’s an initiation • In fact, you probably shouldn’t
  44. Post-Initiation • Keep up the same communication style as before

    — but a lot more hands-off • Introduce the noob to new ideas ◦ Elaborate or suggest resources on topics she’s interested in
  45. Invite your own initiations. • Keep working on your independent

    project(s) ◦ If you haven’t started coding in your free time yet, do it now ◦ You might be surprised how easy it is • This routine works for me: ◦ Directly after getting home, 15–20 minutes of meditation ◦ Then, 45 minutes of “creative time” ◦ Creative time can be writing, coding, or drawing ◦ NOT reading
  46. Invite your own initiations. • Read texts that are over

    your head. ◦ Seriously, OVER YOUR HEAD!
  47. (Disclaimer: Sandi rules and POODR is a great book!) (But

    you should be reading stuff that makes your head threaten to pop off.)
  48. Invite your own initiations. • Go to conferences ◦ Especially

    hacker conferences! ◦ Try some events that are outside the scope of what you do at work • Learn a new language, especially in an unfamiliar paradigm ◦ C or a purely functional language are good choices
  49. Teach yourself design patterns. • The most important thing you

    don’t learn in boot camp • High ROI for your time ◦ Easy to understand ◦ Extremely useful ◦ Makes you a better person on the whole, really
  50. Phase 3 Summary • Set up an initiation • Then

    broaden the scope Mentor Noob • Invite further initiations • Learn design patterns • Be a mentor
  51. What did we learn? 1. Develop metacognition 1. Communicate 2.

    Apply metacognition 3. Invite challenges 2. Challenge 3. Initiate NOOB MENTOR
  52. References / Influences • Chuck Lauer Vose, “Building kick-ass internal

    education programs,” RailsConf 2014. https: //www.youtube.com/watch?v=LPZmNfhPPOs • U.S. Bureau of Labor Statistics. http://www.bls.gov/ooh/computer-and-information- technology/software-developers.htm • Vanderbilt University Center for Teaching, “Metacognition.” http://cft.vanderbilt.edu/guides- sub-pages/metacognition/ • Wallace Wang, Steal This Computer Book 4.0 • Jose Valim, Crafting Rails Applications • Pat Shaughnessy, Ruby Under a Microscope • Aaron Patterson, “Tenderlovemaking.” http://tenderlovemaking.com/ • Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates, Head First Design Patterns • Grant Morrison, The Invisibles • Robert Anton Wilson, Masks of the Illuminati • Cajun Pride Swamp Tours, LaPlace, LA