
Object Thinking blends historical perspective, experience, and visionary insight - exploring how developers can work less like the computers they program and more like problem solvers.
Start with Make It Stick (Brown et al.). Apply what this book teaches you to every one afterwards.
Next, read and work through Exercises for Programmers (Hogan) and A Common Sense Guide to Data Structures and Algorithms (Wengrow).
After you finish those two, read The Missing README (Riccomini et al.) and Extreme Programming Explained (Beck et al.). These two books provide very different viewpoints into the stuff that isn’t coding in a programming job.
Assuming you’re using an OO language, follow that up with Object-Oriented Analysis and Design with Applications (Booch et al.) and Object Thinking. They contrast each other quite a bit; having both perspectives is handy.
Once you’re through all those, I recommend Tidy First (Beck), Implementation Patterns (Beck), and Test-Driven Development By Example (Beck). These three books of his provide an incredibly accessible view into better ways to code.
If you’re anything like me you get bored reading one book for too long. I’ve found that having a second book going that I can switch to is great for that. A parallel track with The Pattern On the Stone (Hillis), The Pragmatic Programmer (Thomas & Hunt), The Mythical Man-Month (Brooks), and How Computers Really Work (Justice) provides a reprieve and some technical and cultural context.
- Cat is the subject noun
- Eats is the verb
- Rat is the object noun
In object-oriented programming, the subject is most often the programmer, the program, the computer, the user agent, or the user. The object is... the object. The verb is the method.
So, imagine the sentence "the customer canceled the order."
- Customer is the subject noun
- Canceled is the verb
- Order is the object noun
In OOP style you do not express this as customer.cancel(order) even though that reads aloud left-to-right similarly to English. Instead, you orient the expression around the object. The order is the object noun, and is what is being canceled. Thus, order.cancel(). The subject noun is left implicit, because it is redundant. Nearly every subject noun in a given method (or even system) will be the same programmer, program, computer, user agent, or user.
For additional perspectives, I recommend reading Part I of "Object-Oriented Analysis and Design with Applications" (3rd edition) by Grady Booch et. al, and "Object Thinking" by David West.
---
That said, I think you're right about the single responsibility principle in this example. A class with too many behaviors should usually be decomposed into multiple classes, with the responsibilities distributed appropriately. However, the object should not be left behavior-less. It must still be an anthropomorphized object that encapsulates whatever data it owns with behavior.