Many programmers seem to have pathological humility. Being humble is good, it makes you aware of your faults and areas of improvement. Yet that's only half of it. We also have to be aware of our successes so that we know what we
should be doing.
Programmers often look up to civil engineers. They imagine that if we built software like we built bridges, it would be better.
Civil engineering uses the "waterfall" method. You state your requirements, design the thing, build it, and test it. But we have tried this for software and it just doesn't work. We can never anticipate all the faults or design flaws in advance. So we switched to iterative development with very short cycle times. You can't do iterative development on a bridge, so we've already diverged.
Software is fundamentally different to anything that has ever existed. Computers are now writing code, something they couldn't do two years ago. There has been a steady increase in volatility over the previous decades. Attempting to impose rules and structure during a period of volatility is futile. The 2nd Cambrian is starting, enjoy the ride.