Regarding a few of the other comments:
"It is a poor craftsman that blames his tools." Absolutely. However, the same good craftsman who can do amazing things with terrible tools will choose high quality tools because he can do so much better work with them.
"It's... the rush to produce easy code." That continues to be a problem -- and everyone who wants to throw more bodies at a late project needs to be fed a copy of The Mythical Man-Month one page at a time -- but it's a different problem.
"Formal verification is worthless IRL". They keep working on it and maybe someday it'll happen; but in the meantime we could use design by contract to improve our code.
"There ain't no such thing as free memory checking." No, there ain't, and yes, when you get into things like tiny embedded systems and operating system kernels memory management and checking still has to be done by hand, but for a really really large (and growing) amount of software, the costs are very low compared to the benefits. Modern runtimes (JVM, CLR, V8...) do a very good job of managing memory.