#Learning POODR

Over the last few months, I’ve been involved in the CodeNewbie community, especially on it’s quite active Slack channels. There are a lot of channels and the topics of discussion are quite varied. We discuss everything from code problems and interview tips, to the latest xkcd comic and what book we’re currently reading. When one topic becomes popular enough, it’ll sometimes spin off into a whole new discussion group.

For example, one of the more popular books in the Ruby community is Practical Object-Oriented Design in Ruby (POODR) by Sandi Metz. I’d been planning on reading it ever since I heard Sandi’s interview in the back catalog or the Ruby Rogues podcast, and I finally got around to ordering it recently. As soon as I announced that I was getting it in the CodeNewbies Ruby Slack channel, several people expressed interested in reading through it along with me. It wasn’t long after that long before a new slack channel was formed, and the first POODR book club began.

The format we stumbled upon was the best possible situation. We’d get together at a set time on Google Hangout (Thursdays at 9:00pm EST), discuss one chapter of the book, and record the discussion for those who couldn’t attend.

Several advantages to this approach have become apparent over time, and I thought I’d share them with you as we near the end of our discussions:

##Group Collaboration

Almost every person I’ve talked to about POODR said some variation on these three statements, “That book was great, but I missed so much the first time.”, “I get something new out of it every time I read it.” and”I need to read that again. I think I’d get more out of it now.”

POODR deals with some concepts that, if you are a new or intermediate developer in an Object-Oriented language, or if you’re an experienced developer in non-OO langauges but fairly new to OO, can be difficult to approach and grasp. Sandi does a great job of making them as accessible as possible, but difficult concepts that require some level of experience to internalize are just that.

All of that said, puzzling through POODR with a few others who are fairly new to these concepts in a collaborative setting, where nobody is really considered an authority and nobody has conceptual turf to defend, may be the best possible way for newer developers to approach this book. It gives them the opportunity to work through questions together and come to tentative conclusions.

More than once, someone in our discussions has had a misconception cleared up, or been able to grasp a concept they couldn’t get their head around on their own, because they had other people there with them to try to wrestle through it.

##Recording the Discussions

By recording and posting online what we’ve said, we get a two-fold benefit. Not only does it allow those who wish to participate, but have missed one or more weeks, the opportunity to get current, it also provides a certain level of accountability. More people watch the videos of the Google Hangouts than ever participate in them, and on more than one occassion they’ve come into the slack channel to further explain some topic we had puzzled about or discuss something that was said in the recording that they disagreed with. Despite the moniker, not everyone in Code Newbies is new to code, and having more experienced Rubyists come in and clarify for us something we’d had issues with, or help us understand where we went wrong, has always been a help.

##Breaking Discussions up by Chapters

Book clubs I’ve participated in in the past have always, even when they’ve recorded the discussions, tried to cover the entire material in a single sitting. That works great for fiction and non-technical works, but it would be a nightmare for something like POODR. Every chapter bores down into a concept or category of concepts. Additionally, every chapter builds on the previous one. If you fall off the path half way through the book, the rest of it is probably going to be pretty useless to you.

By breaking up the chapters and really digging into them as a group, one week at a time, it allowed us to shore up the concepts we thought we understood, and finally come to get our heads around the ones we’d missed.

It isn’t uncommon for us in these later chapters to reference ideas from earlier in the book to explain some new concept. POODR builds on itself forming a kind of ladder, one rung at a time, creating a conceptual scaffold for the really important tools and ideas in the later chapters.

Wittgenstein’s Ladder

A short philosophical digression…

This idea of the book being like a ladder is perfectly illustrated in the concept of Wittgenstein’s Ladder. In his early work, Wittgenstein purposely wrote ideas he new were wrong, but necessary to work through to get his readers to a place where they could approach his later writings. He talks about using this ladder to reach a higher level of understanding, and then kicking away the ladder of wrong ideas that got us there.

Sandi does the exact same thing both within and between chapters of POODR. She’ll approach some problem, and show common procedural or misguided OO paths people will often take, before using whatever concept she’s trying to introduce to rescue the code. By showing how to do it other ways and giving us a glimpse into the dark paths they can lead down, she shows the advantages of her approach.

But she also doesn’t let good code get out in front of whatever concept she is trying to illustrate. Early in the book, if Sandi is introducing a concept, she’ll solve the problem with that concept, even if there are better things to do that she will be introducing later. She’ll mention that the code she is presenting isn’t optimal, but it’s the best available with the tools she’s provided so far in the book. It takes knowing those tools, having those rungs in the ladder, to get to later concepts like duck typing, module inheritance, and object composition. Then, when the reader has reached a place of better understanding, she’ll drag up the useful parts of these ideas, and kick away the rest.

##Future Discussions

I don’t expect that POODR will be the last book club the Ruby crowd has over on the Code Newbie Slack channels. It’s too strong of a community, and it’s too good a way to learn a difficult text.

If you want to participate, you can find the list of videos of the first seven chapters here. We’ll be covering chapters 8 and 9 over the next couple of weeks.

Several of the Code Newbie members are planning to attend RubyConf 2015 in San Antonio this month. We’re on schedule to finish the POODR book club a few days before the conference begins. RubyConf historically has what are known as Birds of a Feather groups, organized by attendees, that cover some topic members are intersted in. A few of us are currently planning on trying to organize one of these around discussing POODR. I’ll do my best to get a recording of it and see that it also gets added as a capstone to the Google Hangout playlist.

What our next book will be, has yet to be decided. A few contendors have been kicked around, but I’ll announce it on here once it has been organized.