SOLID

SOLID is an acronym created by Michael Feathers for 5 OOP principles previously put together by Robert C. Martin.

You can read about all of them in their respective articles:

Let's take a step back

The SOLID principles are the elefant in the room of principles. The reason is not because the principles themselves are bad – please learn about them and respect them.

The issue is more of a mediatic problem: in many conferences, there is only talk about them, completely forgetting about the remaining ~20 principles.

Furthermore, the SOLID principles were not invented in a void, but in the historical context of those many other thoughts of computer scientists. The idea of SOLID was never to be “the only principles”, but rather to give beginners a starting point on which to build up their understanding and skills.

Within SOLID, there is another elefant, the SRP. There are problems with it, described in the dedicated article, but to cut the story short: it's the most misunderstood and the most interpreted and interpretable principles of all.

Quite often I would be in design discussions with fellow programmers, talking about SOLID and SRP in particular, whereas it provides the least guidance on how to choose a design decision over another upfront.

Let's not forget that SRP is an organizational pattern more than a code pattern, so very often you'll come to understand when you're violating SRP only when evolving the architecture, not during the initial design.

How to learn SOLID

My suggestion is to skip SRP when you learn about SOLID, either learn about it after you've learned about the other 4, or even after you've learned all the other ~20 principles.

Sure, learn SRP and take it into account, but keep in mind that it's an organizational principle, which makes it very interpretable when it comes to code. More details in its dedicated article.