There are many ‘rules’ for programming and they have recently gained a renewed ‘following’ that expounds their virtues as things to strive for.
These rules are not things to strive for. Your overall goal of working code that achieves a function is what you strive for. These rules are merely possible ways to achieve this goal. They are easily mistaken for the goal itself though, because the attributes that we actually want in our code make it look like these rules are in play. The reality tends to be much more post-hoc, with rules and guidelines being extracted as patterns from code that has already been identified as exhibiting desirable attributes.