Software engineering is more than just programming; it's about building software that works reliably, rooted in a pragmatic and scientific approach. The difficult part of software engineering is the design, given that production is as simple as cloning bytes. Software engineers should focus on exploration and discovery, adapting lessons from science through iteration, feedback, and incremental work. By working experimentally and empirically, engineers can manage the complexity inherent in software development. Modularity, cohesion, separation of concerns, abstraction, and coupling are key ideas that allow software engineers to compartmentalize systems, enabling easier changes and better understanding of code. Prioritizing these properties leads to writing better software faster, making it easier to test, understand, and evolve incrementally.
https://www.youtube.com/watch?v=TRqYQnCfgH8