Writing software is such a _human_ thing. It has so much more in common with writing than it does with other kinds of engineering.
Most of what we're doing has to do with how to lay things out so that it's clear and easy for other humans (including the humans that write code) to understand, interact with, and modify. Any time you're dealing with humans brains, there's going to be a lot of complex subtlety in terms of what the "best" approach is.
But because it's software "engineering", people think we need to have fairly hard-and-fast rules about the right way to do everything.