I like the book “A Philosophy of Software Design” by John Ousterhout, specifically the first half. The reason I like it is that it goes a bit against the “best practices” touted by classics such as Clean Code or any TDD book, and it explains why. Personally, I’ve always found Uncle Bob’s books and talks too academic. Many Clean Code principles such as DRY and Single Responsibility become antipatterns when used indiscriminately. It doesn’t help when people go around parroting those guidelines as if there were “The 10 Commandments of software development”.
On TDD (Test Driven Development), I recommend watching this talk if you are unconvinced as I was: https://www.youtube.com/watch?v=a6oP24CSdUg
Just ignore anything that mentions “The 3 laws of TDD” or any book on TDD for that matter. They are unpractical and will bore you to death.
Ending on a philosophical note, I’m of the opinion that, it’s better to write beautiful software than beautiful code. As programmers, it’s easy for us to become way too fixated on our code and lose the perspective of why we write code in the first place. Take your favorite software, can you tell if it’s written using Object-Oriented Programming? Can you tell if it uses MVVM?
Software is created to delight users, not to look pretty in programmers’ editors. Never forget that.