Anyone that has heard me give a talk or just sat around a table with me over lunch will have heard me go on and on about how software programming is not yet an engineering subject and software developers are not engineers. This is how I define engineering:
I take two napkins from the lunch table. One the first napkin I draw a diagram of an M10 full-nut. On the second napkin I draw a diagram of a 25mm M10 hex bolt. I send the first napkin to my father in England and ask him to make what's drawn in the diagram and mail it to me. I send the second napkin to the president of Honda in Japan and ask him to manufacture the bolt in the diagram and send it back.
When the two parts arrive, they will fit together. Amazing eh?
The reason I know that the parts will fit together is that there are international standards for the drawings, the manufacturing processes and most important, there are ways to test that the manufactured part conforms to the specification in the diagram. That specification not only defines the shape and size of the part but also the material it should be made from, the surface roughness, the hardness of the final surface and so on.
When software is written the way nuts and bolts are made, software developers will have earned the right to call themselves engineers.
So next time you fly to a software conference, be happy that Boeing doesn't build its planes the way Microsoft writes its software.