Hosted by
Ben Orenstein and Joe Ferris
Ben and Joe review several pull requests against the Learn database, pointing out techniques and patterns for having a constructive and efficient code review. Learn how the thoughtbot protocol leads to cleaner and faster reviews. Follow along as...
Hosted by
Ben Orenstein and Joe Ferris
Ben and Joe discuss the dos and (mostly) don'ts when it comes to ActiveRecord callbacks. You'll find out why you're generally better off not using this feature, with several suggestions for better alternatives.
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Joe and Ben look at a class which was written without using TDD. By rewriting it with tests first, we discover that a new class was waiting to be extracted, making the overall solution clearer.
Hosted by
Ben Orenstein and Joe Ferris
How do functional program and object-oriented programming stack up in Ruby? In this episode, Ben and Joe dive find out. We've put together a number of code samples, each of which follows an object-oriented, functional, or hybrid approach. We'll...
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Ben shares a story of how he screwed up but still had some good come of it.
Further reading:
Kent Beck's tweet
When to refactor
Hosted by
Ben Orenstein and Tony
In this episode, special guest Tony joins us to give his first impressions on Swift as an Objective-C developer.
Swift Programming Book
WWDC Swift Session Videos: Tony recommends Intro, Intermediate & Advanced Swift to get started.
Hosted by
Ben Orenstein and Joe Ferris
By popular demand, Ben and Joe return with the "Ship A Feature" series. This time, they add Markdown support to the comment field for Learn's exercises.
The pull request
Previous Ship A Feature
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Ben and Joe extract a matcher written in a project and create a pull request to include it in shoulda-matchers.
Check out the pull request
Hosted by
Ben Orenstein and Joe Ferris
Learn how to debug confusing test failures using interactive tools like byebug. Also learn the difference between REPLs like pry and stepping debuggers.
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Ben and Joe ship a feature from start all the way into production.
For more info, check out:
The actual pull request and commit in the Learn codebase. Our protocol for getting things done, The parity gem and Travis, our CI...
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Joe demonstrates his setup for development including:
How he uses rcm to combine the thoughtbot dotfiles with his own customizations
How he uses MacVim, vim-rspec, and OS X Terminal to streamline TDD
How he uses snippets to...
Hosted by
Ben Orenstein and Joe Ferris
Ben and Joe follow up on a previous episode on extracting classes to demonstrate the classic followup punch to Extract Class: Invert Control.
They show the previous example in the context of an integration-tested Rails application, and...
Hosted by
Ben Orenstein and Joe Ferris
In this episode, Ben and Joe discuss value objects.
You can learn more about value objects in Ruby Science, or on Martin Fowler's blog.
You might also want to try you hand at our Extract Value Object exercise on the Refactoring Trail.
Hosted by
Ben Orenstein and Joe Ferris
This episode covers the D in SOLID, the Dependency Inversion Principle (DIP). In it, you'll learn why you might want to inject a class' dependencies and how to do so. Additionally, we'll show how following this principle makes it easier to follow...
Hosted by
Ben Orenstein and Joe Ferris
Take a tour through the history of dependency management in statically compiled languages. Learn why languages like C++ and Java need to explicitly build up small interfaces where Ruby is saved by duck typing, and then discover the lessons Ruby...
Hosted by
Ben Orenstein and Joe Ferris
Ben and Joe tackle the third principle in SOLID: the Liskov Substitution Principle. Learn some basic rules you can apply to subclasses and other "is a" relationships to improve flexibility in your applications and reduce subtle bugs from interface...