Engineers precisely specify a problem and then build a solution that's correct to within a tolerance. I'm afraid I don't see the resemblance to programming.
You could describe programming that way too, though the "within a tolerance" would probably have to be about input coverage rather than output/behavior.
That depends on the program, I suppose. Some programs require more engineering than others. I think you could make a very good argument for the programmers at Google being engineers.
I disagree. I don't find many similarities between what I do and what a "real engineer" does. I do not consider myself an engineer; I write software. Nowhere in the 18 years I've been doing this for money have I met anybody that could explain what software engineering really is. Without a definition, the term to me is meaningless.
the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.
That's what they'll teach you at engineering school. Not everyone who is writing software is engineering.