Engineering is the discipline, art,
skill and profession of acquiring and
applying scientific, mathematical,
economic, social, and practical
knowledge, in order to design and
build structures, machines, devices,
systems, materials and processes that
safely realize improvements to the
lives of people.
Now this is a reasonable definition of what engineering should be. How this is implemented in the fields of mechanical and construction engineering it doesn't say and I myself can only guess.
Although the term software engineering has been coined, and although it seems reasonable to engineer software, the vast majority of software development as is, can be characterized as throwing stuff together against better knowledge.
I am sitting in a house right now, that is 120 years old or so. And I feel perfectly safe about that. I am using a new computer with up to date software and yet I don't feel perfectly safe about that. Software engineering is now at the stage where civil engineering was in ancient Egypt. We learned how to make things big (we're still working on making them last more than a few years). While I only have a superficial idea of what civil engineering involves nowadays, I feel confident to say, that we're not quite there yet :D
There's this nice quote that is in fact incredibly obvious:
You can use an eraser on the drafting table or a sledge hammer on the construction site.
-- Frank Lloyd Wright
Yet there is a lot of programmers out there who don't see any value in planning or designing.
The gap between software development and "classical" engineering disciplines is so obvious, that you needn't be an expert in any of both to see it. You just need to use the products of each branch and you feel it.