Software is essentially constructional, synthetic. This means it is crucially about transformation. Software engineering is not so much about defining a formulation, as building it, that is, organising incremental changes.
Mathematics wants to produce timeless final artifacts, permanent truths. But software is not built to be a final statement, a logical foundation; it is built for human intentions. Software is for building changing artifacts. Mathematics seeks truth, software seeks usefulness.
The mathematical ideology of software makes changes seem a bit awkward, a burden, a fault. But really change is what software – as the production of actual useful artifacts – essentially is and should be built on.
Change is what we spend time doing with code. Change is something we want to do – to make new things. And change is something software is uniquely capable of. Yet we do not seem to address it properly. We do not have a systematic, formalised, understandable way of doing it. This looks like a big gap in software engineering.