FREE Video Sample
Get a free sample of course content
Enter your email below to get a sneak peak of the kind of lessons you'll be seeing in Mastering the Object-Oriented Mindset.
You're working in an object-oriented programming language. You're using an object-oriented application framework. You've read dozens of articles on patterns and SOLID principles.
And yet, it feels as if you spend hours a week struggling over how to factor your application code into small, neatly encapsulated pieces.
Does anyone else have trouble figuring out which of two collaborating objects should "own" a business rule? How are you supposed to keep your controller objects "skinny" when there are so many edge cases they need to handle? And how do those User classes always seem to become a thousand lines long?
You're not alone. These are issues that thousands of other programmers struggle with on a daily basis. From trying to keep domain objects from bloating into behemoths, to figuring out just what the heck "tell, don't ask" is supposed to mean, OO programming doesn't seem quite as straightforward as it appears on the label.
So what's the deal? Are clean, well-factored, easy to change object-oriented designs a myth? Or is getting OO "right" only possible for grey-haired code wizards?
In a word, no. Applications composed of small, pleasant-to-work with objects aren't a fairy tale. You can learn to build them, and do it without agonizing over how to break up your objects. The key is having the right mindset.
Object-oriented programming isn't a technology. It's more like a form of applied philosophy. To wield it effectively, you need the right perspective. And the best way to get that perspective is to be exposed to the thought processes and the design vocabulary employed by experienced OO designers.
Don't worry, you don't need to subscribe to some secret, fundamentalist sub-school of software design in order to "get OO right". There aren't lists of rules and regulations you must observe in order to stay on the golden path. No sacrifices to Cthulhu are necessary
You know that user requests are supposed to be handled by controller objects. You know that data is supposed to go in business model objects. But how are you supposed to keep these objects small when their responsibilities grow ever larger over time? How are you supposed to coordinate the ever-increasing interactions between business models as your application matures? Not to mention managing the connections to the myriad external services with which a modern application must integrate...
Here's the thing: if you're anything like me, you learned object-oriented design like a person learning to swim by being thrown into the deep end of the pool. And sure, you can pick up a mean dog-paddle that way. But it doesn't teach you versatility. It doesn't give you a deep toolbox to pull from.
Where application designs devolve into chaos is in the implicit concepts that never quite emerge as true objects. Instead they haunt your code like ghosts: cluttering interfaces, duplicating the same conditional logic in multiple places, and causing your object dependencies to grow without limit. Or, you see the signs of these unacknowledged concepts in the form of endlessly proliferating mixin modules (or Concerns).
The secret to successful object-oriented design isn't really a secret at all. It comes down to modeling your concepts as objects... all of your concepts.
There's no such thing as "plain old data". Your data has limits, implications and assumptions which can be modeled explicitly... or scattered implicitly.
The "glue" code tying your business models to email, push notifications, webhooks, etc. needs a place to live... or it will camp out all over your codebase.
Every application contains workflows. Can you list them... and point to a single "home base" object for each one?
I know what it's like to struggle with real-world OO design problems. Everything seems so clear in theory, but when the rubber meets the road you end up with tangled conditional logic and thousand-line "God objects". And maybe if you had weeks to ponder your design, you could come up with something more elegant. But this feature was due yesterday...
The truth is, there is no panacea. But you can get better at designing with objects. You can expand your repertoire of solutions. You can develop your instincts for the "right" division of responsibilities.
You don’t acquire these kinds of skills through dry textbook examples. The best way to do it is by watching experienced developers as they apply 00 principles to real-world problems. Which is great if you have the opportunity to work with master programmers. But what if you don’t?
I'd like to help.
My name is Avdi Grimm. I’ve been studying and applying Object-Oriented thinking to software for twenty years, and I’ve been using Ruby for fifteen. I’ve worked or consulted on dozens of Ruby and Rails projects, from tiny to humongous. I'm a Ruby Hero Award recipient, and a co-teacher of Sandi Metz's Practical Object-Oriented Design in Ruby course. And in my books and videos, I’ve helped thousands of programmers level up their software design skills.
Over my years as Head Chef for the RubyTapas screencast series, I've built up a library of demonstrations of effective Object-Oriented design techniques. They're derived from the real-world experiences of myself and others. I've distilled these lessons down to their essentials in order to present them in short, ultra-focused videos.
I thought about simply packaging these videos alone as a course and selling them. But it takes more than just demonstrations to learn to internalize the Object-Oriented mindset. I want to give you something more.
(Yes, it's a mouthful.)
This is a eight-week course that will teach you to apply the Object-Oriented perspective by example, in the context of Rails and Ruby applications. You'll learn in three distinct ways:
@avdi’s book “Objects on Rails” changed the way I thought about OO and Rails and made me a 1000x better programmer
You've made a huge impact on the way that I think about what well-designed software looks like as well as helped me learn more about the Ruby language. Your communication skills and insight into the software development process have been instrumental to me!
Your work has been absolutely foundational for me.
Over my 10 years of professional Ruby programming Avdi has been one of the most influential with all his works that I've encountered. From podcasts to videos, blog posts to books, I've sampled them all and benefitted hugely. [Avdi has] encouraged me to do better, for myself and my peers/communities. Most of the time Avdi's work caused me to pause and think, something I value very highly.
Avdi’s probably one of the reasons I got started with Ruby in the beginning 8-9 years ago and even today I still manage to pull nuggets of insight from his posts. Two thumbs and both big toes up!
Are you ready to increase your confidence in building Object-Oriented software solutions? Are you ready to start seeing the missing concepts hiding inside that big ball of spaghetti? Join me, and Master the Object-Oriented Mindset!
Enrollment closes December 22, 2017, and seats are limited for this initial, live version. Lock in your seat today!
100% Satisfaction Guaranteed
The first run of this course will kick off January 8, 2018, and I'll be assembling the lessons live week-by-week. (Because the technique demonstrations are drawn from the RubyTapas library, you don't need to worry about me falling behind.) Your feedback will influence the direction of the course, and you'll get to have your questions addressed in live Q&A sessions.
Because this is the beta run, I'm offering the course at the lowest price it'll ever sell for. Once this course goes on sale as a final product, the price will increase significantly.
Here are a few things people have said about the videos that make up the core curriculum of this course:
The latest @rubytapas episode is the single most valuable lesson I’ve ever learnt in OO design. Thank you @avdi
Seriously, Ruby Tapas is the best Ruby learning resource I have ever used https://t.co/MVYOuQ3U4d
TIL: If you have a `User` model, you're doing it wrong. Mind expanding episode of @rubytapas today. Thanks @avdi.
This is a really valuable heuristic for writing clean and modular code. Thank you!
326 Differentiation an amazing-must-watch-episode from @rubytapas . Thanks @avdi for such enlightenment :)
The User @rubytapas episode might be one of my favourite yet. So dense with useful, actionable insights.
I can't recommend enough @rubytapas episode #401 "Whole Value". Definitely a must watch along with #400 "Primitive Obsession"
Avdi lives with his four kids in the foothills of the Great Smoky Mountains in Eastern Tennessee. He likes to split his rare leisure time between hiking, and dancing to oontz-oontz music.
Signing up for a course like this is a big investment in both money and time. You may have questions or concerns, and in this section I'd like to address them! Or, if you don't see your question answered here, you're always welcome to send me a message.
Yes! You will be able to select and adjust how many seats you want to buy during checkout. A 20% discount will be applied to purchases of 5 seats or more, and a 25% discount to purchases of 10 seats or more. The discounts will appear on the checkout screen.
In order to get the most out of the course, you'll probably want to devote around 2-3 hours to it each week.
If you're just learning Ruby, or your just exploring OO concepts for the first time, this course probably isn't for you. To get the most benefit, you should be reasonably fluency in Ruby and have some preexisting familiarity with OO principles.
Master the Object-Oriented Mindset is designed to complement other Object-Oriented texts and courses. Unlike most books, it is less of a tutorial and more of a series of inspirations which will help you deepen your grasp of the Object-Oriented perspective.
For the initial beta run, this course will start on January 8, 2018 and proceed for 8 weeks. I'll be adding new content every week, and hosting weekly Q&A sessions.
All of the material, including recordings of the Q&A sessions, will be posted to the course members' area. So if you fall behind, you'll be able to catch up on whatever schedule works for you.
The technique demonstrations will be accompanied by "food for thought" quiz questions that will help you apply the ideas discussed to your own projects. These won't be graded, however.
In addition, I'll be regularly posting links to talks, papers, and blog posts that complement and expand upon the course topics.
Yes! You'll receive access to a members-only forum where you'll be able to interact with other course participants, discuss the week's lessons, and post questions for me or for my special Q&A guests.
Ask for a full refund at any time before the end of the course, and I'll be happy to give it to you, no questions asked.
I'm very lucky to have a lot of friends and acquaintances in the Ruby, Rails, and OO-design world, some of whom have agreed to join me to answer your burning questions about OO in Ruby and Rails. The current guest list includes:
As I confirm more guests who will be joining the course for Q&A sessions, I'll update this page.
Yep! You'll get lifetime access to the course members area (for the lifetime of the course website; I can't make promises about your lifetime!)
You'll also be able to download the course videos.
If you are a subscriber at the Ravenous level, you will be receiving the full static version of the course as part of your subscription, once it is finished and polished up. If you would like to participate in the course during the beta run, keep an eye on your inbox: I'll be sending you a coupon for a steeply discounted course rate.
If you are a RubyTapas subscriber at any other level, here's a breakdown of what you already have versus what's new.
What you already have:
What you don't have:
This is a beta course. You might be wondering whether you should buy in now and participate as it is coming together, or wait for the finished, neatly packaged version. Here are some pros and cons to help you decide.
100% Satisfaction Guaranteed
You are fully protected by our 100% Satisfaction-Guarantee. If you're not satisfied with the course for any reason, just ask anytime before the course ends, and we'll give you a full refund, no questions asked.
P.S.: Not only is this course a chance to cement your understanding of Object-Oriented principles, it's also a great way to network with other programmers who have the same goal! In the members-only forum, you'll be able to connect with other course participants, ask and answer questions, and compare notes.
Copyright © 2017 ShipRise LLC