The Foundations of a Software Engineering Discipline
So, what are some of these foundational ideas? What are the ideas that we could expect to be correct in 100 years’ time and applicable whatever our problem and whatever our technology?
There are two categories: process, or maybe even philosophical approach, and technique or design.
More simply, our discipline should focus on two core competencies.
We should become experts at learning. We should recognize and accept that our discipline is a creative design discipline and has no meaningful relationship to production-engineering and instead focus on mastery of the skills of exploration, discovery, and learning. This is a practical application of a scientific style of reasoning.
We also need to focus on improving our skills in managing complexity. We build systems that don’t fit into our heads. We build systems on a large scale with large groups of people working on them. We need to become expert at managing complexity to cope with this, both at the technical level and at the organizational level.