Just because people call themselves software engineers and schools teach it as a discrete program, doesn't make them true engineers. There are plenty of schools that offer 'financial engineering' programs. IMO, programmers have a lot more in common with traditional artisan trades than engineering. They call themselves 'software engineers' because skilled technical workers prefer to associate with their cultural equals in an established white-collar profession than blue-collar craftsmen.
In regards to what is taught at universities, my program involves courses on Engineering Design, Computer Engineering and Computer Science, but it also has classes on what constitutes Object-Oriented design, HCI, etc. I think those courses are more than enough to teach students on the basic principles of software construction.
Also, what do you define the "basic principles of software construction" to be?
[1] http://www.engineerscanada.ca/e/index.cfm [2] http://uwaterloo.ca/ [3] http://www.softeng.uwaterloo.ca/ [4] http://www.peo.on.ca/
The problem for me is that there don't seem to be any basic principles of software construction. Most programs just teach a selection of software development fad methodologies. A decade ago, most programs taught some variation of waterfall development. Now they tend to teach some variation of agile development. As far as I can tell, there's no scholarship to support one method over the other - it's pure fashion and industry demand. (The decline of academic research on software construction methods since the 80s is another problem) Look at software engineering programs in another ten years and I'm sure you'll see a different mix of classes emphasizing the business trends of the day.
In comparison, you could look at the curriculum for almost any electrical engineering program from thirty years ago and you would see almost the same classes as a modern program: circuit theory, E&M, electric machines, control, communication systems, etc. The only significant difference would be the addition of courses on software and digital electronics.
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. (http://en.wikipedia.org/wiki/Engineering)
By using art, it would indicate that process is not necessarily needed for something to be classified as engineering. The fact that software engineers do use mathematical concepts (similar to how a civil, mechanical, or chemical engineer does) to build systems would make it an engineering discipline.
Disclaimer: I am a software engineer and I don't look at myself as any more or less of an engineer as any others.
I hate the term "software engineer" but for the opposite reason: I see "engineering" as a lesser profession than computer programming. In programming, you never solve the same problem twice; you make something new each time because you can freely reuse what you made last time. In engineering, you're building the same bridge 1000 times over 1000 rivers.
A "software engineer" is a person that makes a career out of solving the same problem over and over again. There are a lot of people like this, but I'm not going to associate myself with that.
The trick is to know which is which.
Engineering has a long history of building things that can kill people. In that context significant caution is required which is still at the heart of any of the true engineering disciplines. Some software fits into that context but the failure of most pieces of software tend to have less dramatic outcomes with most critical systems designed to operate even if it's software does the worst possible things at the worst time.
"Most/all people who call themselves software engineers are not engineers. I'm not convinced that software engineering itself is actually a field of engineering, for that very reason."
Extracting meaningful information from a corpus of documents involves dealing with physical laws.Identifying spam deals with physical laws. So do a lot of other problems which often have strong mathematical theory. Mathematics is lot abstract and often comes before the physics of things.