design patterns

Coupling and Cohesion: Two Concepts Every Developer Should Understand

Lately, I've been spending quite a lot of time learning about design patterns and software architecture.

And the deeper I go, the more often I come across two concepts that seem to be behind almost everything: coupling and cohesion.

They may sound abstract at first, but they actually describe two very practical things:

How strongly are different parts of the system dependent on each other, and how well do the responsibilities inside a component belong together?