RubyConf India 2015: Diving in the Unknown depth of a project

RubyConf India 2015: Diving in the Unknown depth of a project

As a developer, diving in a new code base is not uncommon: you've just been hired, you change of project, you want to help an open source project, the open source library your project depends on is buggy, etc. It's like entering in a underwater cave, you don't know the treasures or the monsters you'll find there, neither if the path is treacherous or if it's a true labyrinth where you'll get lost. You can prepare yourself, you can plan your visit, you can equip yourself, you can survive and find the gem you're looking for...

3f8fcddf7ab5d1bd90b0a0a9adfd6527?s=128

Christophe Philemotte

April 04, 2015
Tweet

Transcript

  1. Diving in the Unknown depth of a project Andy Spearing

    © 2009
  2. _toch toch Hi, I'm Christophe

  3. @matylda © 2011 Intro

  4. @matylda © 2011 The most common task

  5. continuous typing

  6. None
  7. but continuous reading Jono Witts © 2008

  8. Each written line is read at least 1 time Gavin

    St. Ours © 20013
  9. • 300 dev days • 14633 LOC • 634595 Changed

    lines • → 634595 / 14633 ~ 43 changed LOC / LOC
  10. For 1 final line, I read at least 43 lines.

  11. None
  12. How to Dive into a project Stuart Hamilton © 2008

  13. DO NOT Wander without a plan Felix Esteban © 2004

  14. Journey Needs Plan Peter Southwood © 20011

  15. Plan 1. Goal 2. Map 3. Equipment & Dive 4.

    Next? Peter Southwood © 20011
  16. 1. Goal Peter Southwood © 20011

  17. ➔ fix a bug ➔ implement a feature ➔ write

    some doc ➔ style the code ➔ refactor a small piece of code ➔ simply use it
  18. None
  19. None
  20. ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED) from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `open'

    from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `block in connect' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in `timeout' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:877:in `connect' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in `do_start' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in `start' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:313:in `open_http' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:708:in `buffer_open' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:210:in `block in open_loop' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:208:in `catch' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:208:in `open_loop' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:149:in `open_uri' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:688:in `open' from ~/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/open-uri.rb:34:in `open' from -e:1:in `<main>'
  21. 2. Map Peter Southwood © 20011

  22. Find the Map ➔ Repository URI ➔ Project URI ➔

    Intro Doc: README
  23. Find the Map • https://github.com/ruby/ruby • https://bugs.ruby-lang.org/ • https://github.com/ruby/ruby/blob/trunk/ README.md

  24. Find the Legend

  25. a Legend

  26. Find the Legend ➔ CONTRIBUTING Guideline

  27. Find the Legend ➔ CONTRIBUTING Guideline https://github.com/ruby/ruby/blob/trunk/ CONTRIBUTING.md

  28. Find the Legend ➔ CONTRIBUTING Guideline https://github.com/ruby/ruby/blob/trunk/ CONTRIBUTING.md

  29. Find the Legend ➔ CONTRIBUTING Guideline ➔ Directory Structure

  30. Find the Legend ➔ CONTRIBUTING Guideline ➔ Directory Structure

  31. Find the Legend ➔ CONTRIBUTING Guideline ➔ Directory Structure ➔

    Talk to other contributors, maintainers
  32. Find the Legend ➔ CONTRIBUTING Guideline ➔ Directory Structure ➔

    Talk to other contributors, maintainers ➔ Participate to the dev meeting
  33. If blocked? ➔ ASK!

  34. Boris Dimitrov © 20009 3. Equipment & Dive

  35. Get a Toolbelt ➔ Pick an Editor

  36. None
  37. Get a Toolbelt ➔ Pick an Editor ➔ Bundle &

    Run Tests
  38. Get a Toolbelt ➔ Pick an Editor ➔ Bundle &

    Run Tests ➔ Others
  39. Get a Toolbelt ➔ ST3 ➔ Apply a Patch &

    Use it ➔ MRI WIKI DeveloperHowto ➔ Sign up to Ruby Redmine
  40. Use your Toolbelt ➔ Run the App & Use it

  41. None
  42. Use your Toolbelt ➔ Run the App & Use it

    ➔ Read & Edit the Code
  43. ➔ Find proxy management into open-uri.rb ➔ Understand how OpenURI.open_http

    works ➔ Spot the bug ➔ Fix it
  44. None
  45. Use your Toolbelt ➔ Run the App & Use it

    ➔ Read & Edit the Code ➔ Report a bug ➔ Submit a contribution
  46. None
  47. If blocked? ➔ ASK!

  48. 4. Next? Peter Southwood © 20011

  49. How long? ➔ Keep it reasonable at first ➔ From

    ½ to 1 day
  50. Find Next Goal ➔ Fix a bug ➔ Develop a

    feature ➔ Run Static Analysis Tools ➔ Review a PullRequest
  51. Iterate ➔ :) Jean-Marc Kuffer © 2007

  52. If blocked? ➔ ASK!

  53. Outro 1. Goal 2. Map 3. Equipment & Dive

  54. ? _toch toch