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

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...

Christophe Philemotte

April 04, 2015
Tweet

More Decks by Christophe Philemotte

Other Decks in Programming

Transcript

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

    View full-size slide

  2. _toch
    toch
    Hi, I'm
    Christophe

    View full-size slide

  3. @matylda © 2011
    Intro

    View full-size slide

  4. @matylda © 2011
    The most
    common
    task

    View full-size slide

  5. continuous typing

    View full-size slide

  6. but
    continuous reading
    Jono Witts © 2008

    View full-size slide

  7. Each written line
    is read
    at least 1 time
    Gavin St. Ours © 20013

    View full-size slide

  8. ● 300 dev days
    ● 14633 LOC
    ● 634595 Changed lines
    ● → 634595 / 14633 ~ 43 changed LOC / LOC

    View full-size slide

  9. For 1 final line,
    I read at least
    43 lines.

    View full-size slide

  10. How to
    Dive
    into a project
    Stuart Hamilton © 2008

    View full-size slide

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

    View full-size slide

  12. Journey
    Needs
    Plan
    Peter Southwood © 20011

    View full-size slide

  13. Plan
    1. Goal
    2. Map
    3. Equipment & Dive
    4. Next?
    Peter Southwood © 20011

    View full-size slide

  14. 1.
    Goal
    Peter Southwood © 20011

    View full-size slide

  15. ➔ fix a bug
    ➔ implement a feature
    ➔ write some doc
    ➔ style the code
    ➔ refactor a small piece of code
    ➔ simply use it

    View full-size slide

  16. ~/.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 `'

    View full-size slide

  17. 2.
    Map
    Peter Southwood © 20011

    View full-size slide

  18. Find the Map
    ➔ Repository URI
    ➔ Project URI
    ➔ Intro Doc: README

    View full-size slide

  19. Find the Map
    ● https://github.com/ruby/ruby
    ● https://bugs.ruby-lang.org/
    ● https://github.com/ruby/ruby/blob/trunk/
    README.md

    View full-size slide

  20. Find the Legend

    View full-size slide

  21. Find the Legend
    ➔ CONTRIBUTING Guideline

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  24. Find the Legend
    ➔ CONTRIBUTING Guideline
    ➔ Directory Structure

    View full-size slide

  25. Find the Legend
    ➔ CONTRIBUTING Guideline
    ➔ Directory Structure

    View full-size slide

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

    View full-size slide

  27. Find the Legend
    ➔ CONTRIBUTING Guideline
    ➔ Directory Structure
    ➔ Talk to other contributors, maintainers
    ➔ Participate to the dev meeting

    View full-size slide

  28. If blocked?
    ➔ ASK!

    View full-size slide

  29. Boris Dimitrov © 20009
    3.
    Equipment
    & Dive

    View full-size slide

  30. Get a Toolbelt
    ➔ Pick an Editor

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  33. Get a Toolbelt
    ➔ ST3
    ➔ Apply a Patch & Use it
    ➔ MRI WIKI DeveloperHowto
    ➔ Sign up to Ruby Redmine

    View full-size slide

  34. Use your Toolbelt
    ➔ Run the App & Use it

    View full-size slide

  35. Use your Toolbelt
    ➔ Run the App & Use it
    ➔ Read & Edit the Code

    View full-size slide

  36. ➔ Find proxy management into open-uri.rb
    ➔ Understand how OpenURI.open_http works
    ➔ Spot the bug
    ➔ Fix it

    View full-size slide

  37. Use your Toolbelt
    ➔ Run the App & Use it
    ➔ Read & Edit the Code
    ➔ Report a bug
    ➔ Submit a contribution

    View full-size slide

  38. If blocked?
    ➔ ASK!

    View full-size slide

  39. 4.
    Next?
    Peter Southwood © 20011

    View full-size slide

  40. How long?
    ➔ Keep it reasonable at first
    ➔ From ½ to 1 day

    View full-size slide

  41. Find Next Goal
    ➔ Fix a bug
    ➔ Develop a feature
    ➔ Run Static Analysis Tools
    ➔ Review a PullRequest

    View full-size slide

  42. Iterate
    ➔ :)
    Jean-Marc Kuffer © 2007

    View full-size slide

  43. If blocked?
    ➔ ASK!

    View full-size slide

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

    View full-size slide