http://www.slate.com/blogs/blogs/thewrongstuff/archive/2010/06/28/risky-business-james-bagian-nasa-astronaut-turned-patient-safety-expert-on-being-wrong.aspx
tl;dr: "Telling people to be careful is not effective. Humans are not reliable that way. ... You need a solution that's not about making people perfect."
This article doesn't say anything about software, but I think it is very applicable to programming and the design of programming languages. I often hear that a fault isn't a fault because we can "educate" programmers to avoid the problem. This article puts the kibosh on that. Errors that we can eliminate by changing the design of the language, we should so eliminate (unless their costs make the language unuseable, obviously).