science that involves breaking a system into distinct sections, with each section handling a specific responsibility or "concern". The goal is to make software more modular, maintainable, and easier to understand by avoiding the mixing of unrelated functionalities.