This is closely related to why Sussman and Abelson stopped teaching SICP: it is not possible to engineer software any more because systems are too complicated to completely understand and abstractions hide too many behaviors. So now we do "programming by poking" to understand what the system does instead of making it correct by construction.
http://lambda-the-ultimate.org/node/5335
We just tinker. That's all we can do to get stuff done.