Pro Yearly is on sale from $80 to $50! »

Establishing Yourself

Establishing Yourself

… A Ruby Gem method of building experience and confidence. Get yourself ready now to apply for that promotion or dream job.

Presented to Triangle Ruby Brigade, July 8, 2014


Nathan L. Walls

July 08, 2014


  1. A Gem/application method of building experience + confidence Establishing Yourself

    Nathan L. Walls
 July 8, 2014
  2. Why are we here tonight? ❖ A lot of us

    want to grow by seeking out new challenges at work! ❖ Promotions or a new gig likely require you to demonstrate development skills! ❖ Q: What’s an effective way of demonstrating those skills?
  3. Q: What’s an effective way of demonstrating dev skills?

  4. A: Build a code portfolio

  5. My background ❖ Software engineer here at WebAssign! ❖ Prior

    experience as a hiring manager! ❖ Two perspectives on the importance of building and demonstrating experience through a code portfolio
  6. Whys of a portfolio

  7. Job or Promotion Seeking ❖ Build your own confidence applying

    for a new position! ❖ Keep skills fresh in areas you may not cover in your day-to-day work! ❖ Build new skills that you don’t have opportunity for in your day-to-day! ❖ Portability + safety of code
  8. Hiring managers ❖ Increased confidence a candidate possesses essential job

    skills! ❖ Presents an opportunity to ask specific questions to a candidate about decisions made on a project! ❖ Offers team a view of a candidate’s sample work and builds confidence in a hiring decision
  9. What’s in a portfolio?

  10. Writing samples! ❖ Writing is good exercise to clarify your

    thinking! ❖ Blogging is a great practice and helps you build community awareness! ❖ It’s not something many people do! ❖ Include at least two substantial posts in your portfolio! ❖ Proofreed. Better, find yourself an accommodating editor! ❖ But, this is about writing code…
  11. Code! ❖ Toy + learning code! ❖ FizzBuzz! ❖ Code

    kata! ❖ Project code! ❖ But, your employer may take serious exception to bundling much, if any, work-for-hire code! ❖ See safety + portability concern earlier! ❖ Personal code! ❖ More on this shortly!
  12. How much code? ❖ Any code that you’re happy to

    stand behind is better than no code! ❖ Many applicants provide no code samples at all(!)! ❖ But, not everything! ❖ One or two complete or near complete projects representing recent work are likely sufficient! ❖ Direct attention to files or methods you want to highlight
  13. When to write all this ❖ A portfolio is the

    “go bag” for your career! ❖ Start now, iterate and refine before you need it! ❖ Key promotion opportunity! ❖ End-of-year reviews! ❖ Job opportunity at a dream company! ❖ Treat it as a personal kanban project! ❖ Start tonight!
  14. Get going with a gem

  15. Why a gem? ❖ Defined distribution target and installation mechanism!

    ❖ More opportunity to work on pure-Ruby, challenging your understanding of the language vs. a framework! ❖ You’re learning and expressing your own opinions! ❖ Gems can be published to RubyGems or just to a repository and then installed locally! ❖ You can ship a CLI application as a gem
  16. Is a gem enough? ❖ Maybe. Your situation is your

    own! ❖ A gem can easily be one of the two or three code components in the code portion of your portfolio
  17. Should I publish to RubyGems? ❖ If you’re building code

    you genuinely believe would be useful to others, publish to RubyGems! ❖ If you’re just building “practice” code in gem format, I recommend keeping the gem in a Git repository and sharing the repository link or a tarball
  18. Gem Components ❖ README.(md,markdown,txt)! ❖ super_gem.gemspec! ❖ Gemfile + Gemfile.lock!

    ❖ lib/super_gem/version.rb! ❖ Code!
  19. Code layout ❖ …/! ❖ bin/! ❖ lib/! ❖ super_gem.rb!

    ❖ super_gem/! ❖ (test|spec)/
  20. Practices ❖ Test Driven Development! ❖ Red, Green, Refactor!! ❖

    Source control practices! ❖ Writing good, sign-post commit messages! ❖ Branching, tagging! ❖ Documentation! ❖ YARD or RDoc! ❖ Project README
  21. Practices – Patterns ❖ Gang of Four design patterns! ❖

    See Russ Olsen’s Design Patterns in Ruby! ❖ Small methods, well-organized classes! ❖ See Sandi Metz’s Practical Object Oriented Design in Ruby! ❖ Confident initialization, type coercion, smart error handling! ❖ See Avdi Grimm’s Confident Ruby
  22. Potential gotchas ❖ Gemfile + Gemfile.lock vs. super_gem.gemspec! ❖ Non-POSIX

    installation! ❖ Data storage + available dependencies
  23. Example of a gem in progress

  24. Making it work

  25. Guidance ❖ Solve a small problem! ❖ Solve a problem

    you understand in full or most of! ❖ Host it where others can see it! ❖ GitHub! ❖ BitBucket! ❖ DIY GitLab! ❖ For the portfolio itself, up to you, but static sites with Jekyll or MiddleMan are nice! ❖ GitHub pages
  26. Guidance, continued ❖ Seek feedback! ❖ Trade code reviews and

    portfolio reviews with a friend! ❖ Iterate on your project! ❖ Review and edit your portfolio
  27. How much time will this be? ❖ It is under

    your control, but keep it sustainable against other interests and commitments! ❖ Aim for two, two-hour sessions per week! ❖ Build a habit! ❖ Aim to complete an initial iteration in six to eight weeks (24 to 32 hours)! ❖ Take a break, iterate again
  28. Further materials ❖ Portfolios for software engineers! ❖ portfolios/!

    ❖ Make your own gem! ❖
  29. Contact Me ❖ Personal site:! ❖ Slides to be

    available at:! ❖ Twitter: @base10
  30. Thank you and good luck!