The Eternal Struggle Between Business and Programmers

First of all, the vast majority of programmers I've worked with over the years have not had engineering degrees or engineering certifications. In many jurisdictions, you're not even legally allowed to advertise your work as "engineering" without that. If you are, then good for you, but you're probably not talking about the 99% of us who are at CMMI Level 2 or below.

Second, you lump "engineers, mathematicians, scientists" in the same bucket, but these are completely different professions. Engineers have a lot more in common with craftsmen than they do mathematicians. John Nash would have been a *terrible* engineer. Thankfully, he realized this in college and switched from engineering (like his father) to mathematics (where he made huge contributions to the field)

Third, you say "With proper analysis, you usually find yourself in a position where adhering to requirements constrain you so much that there is only one obvious implementation", which may be technically true, but only helpful if "proper analysis" were not also part of the programmer's job. I have never in my career been given a complete, unambiguous specification -- as you say, managers themselves are forcing fuzziness on us. We could make the "coding" part of our jobs deterministic if we limit ourselves to only writing code after the specification is perfectly complete, but since Business doesn't care about this distinction, there's nothing to be gained by eliminating parallelism here.

You seem to associate "engineering" with reliable scheduling, but I don't see it. Every day I can turn on the news and hear about some engineering project that is behind schedule and over budget. Seattle's tunnel project was originally supposed to be finished by fall 2014. Now at 9 months in, they're only 10% of the way done, and currently stuck, with current estimates saying they should be able to start digging again in March 2015. I've been on some bad software projects, but none so bad that they had to take 10 months off from coding just to fix the compiler.

Finally, you claim that "99% of the time we are not conducting research in new fields, just using off the shelf components", which does not match my experience at all. I'm sure there are places where all they're doing is mashing Lego together, but I've never seen the inside of a company like that. Every company worth its salt today seems to have Github repos full of recent projects, with their own patches -- "off the shelf components" that didn't exist 3 years ago, and were never designed to work in the ways they're being used today. The more innovative ones (like Apple, Google, and Amazon) even have their own compilers, operating systems, and databases.