I highly recommend Sandi Metz's book Practical Object Oriented Design in Ruby (aka POODR). (The choice of Ruby is not essential to the content.) It deals with exactly the themes you ask, and gives ways to think about such decisions. The central criterion guiding the book is not "how to write perfect code you can set in stone and never change", but "how to write code that will be easiest to evolve".
The book is surprisingly concise but very clear. I've been programming for ~2 decades, and still it was interesting & refreshing to read.
She has many lectures online if you want to sample her style.
I highly recommend Sandi Metz's book Practical Object Oriented Design in Ruby (aka POODR). (The choice of Ruby is not essential to the content.) It deals with exactly the themes you ask, and gives ways to think about such decisions. The central criterion guiding the book is not "how to write perfect code you can set in stone and never change", but "how to write code that will be easiest to evolve".
The book is surprisingly concise but very clear. I've been programming for ~2 decades, and still it was interesting & refreshing to read.
She has many lectures online if you want to sample her style.
That sounds like exactly what I need, thanks! I'll check it out soon.
Also, do you know any analogs to this for functional programming?