{"version":"1.0","type":"rich","provider_name":"Acast","provider_url":"https://acast.com","height":250,"width":700,"html":"<iframe src=\"https://embed.acast.com/$/65de32896569fa0017d17653/68277ac83e2c04fd7a9510fe?\" frameBorder=\"0\" width=\"700\" height=\"250\"></iframe>","title":"Undefined and Unforgiven (with Joel Drapper and Lucian Ghinda)","description":"<p>In this episode of <em>Dead Code</em>, Jared is joined by Lucian and returning guest Joel to debate a classic Ruby dilemma: whether to access instance variables directly or use getter methods. Lucian advocates for getters, especially in large, fast-changing codebases, arguing they help catch subtle bugs and improve maintainability, as well as insights drawn from his time at Cookpad and the <em>Short Ruby</em> newsletter. Joel, while appreciating the clarity and performance of direct access, introduces his gem <em>strict_ivars</em>, which raises runtime errors for undefined variables, offering a hybrid solution that improves safety without sacrificing flexibility. The conversation expands into the future of Ruby developer experience, discussing AST-based tooling, the role of testing, and how small, intentional coding choices can add up to more resilient and readable software.</p><p><br></p><p><strong>Links:</strong></p><p><br></p><p><a href=\"https://shortruby.com\" rel=\"noopener noreferrer\" target=\"_blank\">Short Ruby Newsletter</a></p><p><a href=\"https://www.youtube.com/@showruby\" rel=\"noopener noreferrer\" target=\"_blank\">Show Ruby YouTube Channel</a></p><p><a href=\"https://joel.drapper.me\" rel=\"noopener noreferrer\" target=\"_blank\">Joel Draper’s Website</a></p><p><a href=\"https://rubygems.org/gems/strict_ivars\" rel=\"noopener noreferrer\" target=\"_blank\">strict_ivars Gem</a></p><p><a href=\"https://bsky.app/profile/joel.drapper.me\" rel=\"noopener noreferrer\" target=\"_blank\">Joel on Bluesky</a></p><p><a href=\"https://www.poodr.com\" rel=\"noopener noreferrer\" target=\"_blank\">Practical Object-Oriented Design in Ruby (POODR)</a><strong> </strong>by Sandi Metz</p><p><a href=\"https://github.com/ruby/prism\" rel=\"noopener noreferrer\" target=\"_blank\">Prism</a> </p><p><a href=\"https://github.com/shopify/bootsnap\" rel=\"noopener noreferrer\" target=\"_blank\">Bootsnap</a></p><p><a href=\"https://github.com/palkan/ruby-require-hooks\" rel=\"noopener noreferrer\" target=\"_blank\">ruby-require-hooks</a> by Vladimir Dementyev</p><p><a href=\"https://en.wikipedia.org/wiki/Abstract_syntax_tree\" rel=\"noopener noreferrer\" target=\"_blank\">AST (Abstract Syntax Tree)</a></p><p><a href=\"https://en.wikipedia.org/wiki/Modified_condition/decision_coverage\" rel=\"noopener noreferrer\" target=\"_blank\">Modified Condition/Decision Coverage (MCDC)</a> – advanced testing technique</p><p><a href=\"https://ruby-doc.org/core-3.1.0/doc/syntax/methods_rdoc.html#label-Keyword+Arguments\" rel=\"noopener noreferrer\" target=\"_blank\">Ruby Keyword Arguments</a></p><p><a href=\"https://www.cookpad.com\" rel=\"noopener noreferrer\" target=\"_blank\">Cookpad</a></p><p><a href=\"https://plane.so\" rel=\"noopener noreferrer\" target=\"_blank\">Plane</a></p><p><a href=\"https://www.shopify.com\" rel=\"noopener noreferrer\" target=\"_blank\">Shopify</a></p><p><br></p><p><strong>Dead Code Podcast Links:</strong></p><p><br></p><p><a href=\"https://hachyderm.io/@deadcode\" rel=\"noopener noreferrer\" target=\"_blank\">Mastodon</a></p><p><a href=\"https://twitter.com/DeadCodePod\" rel=\"noopener noreferrer\" target=\"_blank\">X</a></p><p><br></p><p><strong>Jared’s Links:</strong></p><p><br></p><p><a href=\"https://supergood.social/@jared\" rel=\"noopener noreferrer\" target=\"_blank\">Mastodon</a></p><p><a href=\"https://twitter.com/jardonamron\" rel=\"noopener noreferrer\" target=\"_blank\">X</a></p><p><a href=\"https://www.twitch.tv/jardonamron\" rel=\"noopener noreferrer\" target=\"_blank\">twitch.tv/jardonamron</a></p><p><a href=\"https://jardo.dev\" rel=\"noopener noreferrer\" target=\"_blank\">Jared’s Newsletter &amp; Website</a></p><p><br></p><p><a href=\"https://docs.google.com/document/d/1J71v-oXgK14uqNH-bAjsZWmgDtwTXLiyqOZ8FHaJdQ8/edit?tab=t.0\" rel=\"noopener noreferrer\" target=\"_blank\">Episode Transcript</a></p><p><br></p>","author_name":"Jared Norman"}