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

Wow Code, Such Read! (NR Ruby UnConf)

Wow Code, Such Read! (NR Ruby UnConf)

Abstract:
When we learn to code, that usually means learning how to *write* code. However in practice, we spend a lot of time *reading* code instead! It’s the way we find answers to questions about how things work. Reading code efficiently is therefore a very valuable skill. This talk will cover how Ruby developers can improve this skill, with tips for comprehending and debugging code faster. We'll also take a look at how you’d go one level deeper and read Ruby’s own source code, even if you don’t know much about C!

This talk was presented at an internal Ruby unconf at New Relic.
Blog post: http://kwugirl.blogspot.com/2016/05/wow-code-such-read.html

Katherine Wu

February 23, 2017
Tweet

More Decks by Katherine Wu

Other Decks in Programming

Transcript

  1. @kwugirl { :sql=>
 "SELECT \"blogs\".* FROM \"blogs\" WHERE \"blogs\". \"id\"

    = $1 LIMIT 1", … :binds=> [[#<ActiveRecord::ConnectionAdapters::PostgreSQLColumn: 0x007fd13a879e58 @array=false, @cast_type=#<ActiveRecord::ConnectionAdapters::PostgreS QL::OID::Integer:0x007fd13a87afd8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,…,42]] } ActiveSupport::Notifications.subscribe 'sql.active_record'
  2. @kwugirl { :sql=>
 "SELECT \"blogs\".* FROM \"blogs\" WHERE \"blogs\". \"id\"

    = $1 LIMIT 1", … :binds=> [[#<ActiveRecord::ConnectionAdapters::PostgreSQLColumn: 0x007fd13a879e58 @array=false, @cast_type=#<ActiveRecord::ConnectionAdapters::PostgreS QL::OID::Integer:0x007fd13a87afd8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,…,42]] } ActiveSupport::Notifications.subscribe 'sql.active_record'
  3. @kwugirl @instrumenter.instrument( "sql.active_record", :sql => sql, :name => name, :connection_id

    => object_id, :statement_name => statement_name, :binds => binds) { yield } def log(sql, name = "SQL", binds = [], statement_name = nil) # active_record/connection_adapters/abstract_adapter.rb
  4. @kwugirl @instrumenter.instrument( "sql.active_record", :sql => sql, :name => name, :connection_id

    => object_id, :statement_name => statement_name, :binds => binds) { yield } def log(sql, name = "SQL", binds = [], statement_name = nil) # active_record/connection_adapters/abstract_adapter.rb
  5. @kwugirl @instrumenter.instrument( "sql.active_record", :sql => sql, :name => name, :connection_id

    => object_id, :statement_name => statement_name, :binds => binds) { yield } def log(sql, name = "SQL", binds = [], statement_name = nil) # active_record/connection_adapters/abstract_adapter.rb
  6. @kwugirl def log(sql, name = "SQL", binds = [], statement_name

    = nil) @instrumenter.instrument( "sql.active_record", :sql => sql, :name => name, :connection_id => object_id, :statement_name => statement_name, :binds => binds) { yield } puts "====== HELLO IS IT ME YOU'RE LOOKING FOR?!!?? ======" # active_record/connection_adapters/abstract_adapter.rb
  7. @kwugirl active_record/connection_adapters/postgresql_adapter.rb:601:in `exec_cache' active_record/connection_adapters/postgresql_adapter.rb:585:in `execute_and_clear' active_record/connection_adapters/postgresql/database_statements.rb:161:in `exec_query' active_record/connection_adapters/abstract/database_statements.rb:341:in `select' active_record/connection_adapters/abstract/database_statements.rb:37:in

    `select_all' active_record/connection_adapters/abstract/query_cache.rb:70:in `select_all' active_record/querying.rb:39:in `find_by_sql' active_record/relation.rb:639:in `exec_queries' active_record/relation.rb:514:in `load' active_record/relation.rb:243:in `to_a' active_record/relation.rb:617:in `pretty_print' Kernel#caller
  8. @kwugirl resources Jason Clark’s talk “GDB: A Gentle Intro” Hsing-Hui

    Hsu’s talk “Time flies like an arrow, fruit flies like a banana”
  9. @kwugirl resources Jason Clark’s talk “GDB: A Gentle Intro” Hsing-Hui

    Hsu’s talk “Time flies like an arrow, fruit flies like a banana” Ruby Under A Microscope
  10. @kwugirl resources Jason Clark’s talk “GDB: A Gentle Intro” Hsing-Hui

    Hsu’s talk “Time flies like an arrow, fruit flies like a banana” Ruby Under A Microscope Definitive Guide to Ruby’s C API: 
 https://silverhammermba.github.io/emberb/c/
  11. @kwugirl Net::HTTP is maybe 2000 lines of code, not including

    comments. It has ~1000 lines of comments… Julia Evans jvns.ca
  12. @kwugirl Net::HTTP is maybe 2000 lines of code, not including

    comments. It has ~1000 lines of comments… I can read 2000 lines of code, Julia Evans jvns.ca
  13. @kwugirl Net::HTTP is maybe 2000 lines of code, not including

    comments. It has ~1000 lines of comments… I can read 2000 lines of code, mostly! Julia Evans jvns.ca
  14. @kwugirl doge The White Rabbit, Alice in Wonderland sad Keanu

    pear/pair programming Lionel Richie + Where’s Waldo !!1!one!! the “!1” phenomenon breadfish Slurms MacKenzie, Futurama