Not the craftsman. Really.

If a tool's design results in the majority of the tools users subverting the tool to accomplish their task, then the tool needs redesign.

Don Norman says it better than I [link|http://www.pcd-innovations.com/norman.html|http://www.pcd-innov...s.com/norman.html]

"Blame and train does not solve the problem."

and here: [link|http://www.typotheque.com/articles/don_norman.html|http://www.typothequ...s/don_norman.html]

Humans are fallible. Learn that. Cherish that. It is a fact of life. We people are creative, exciting, adventurous, imaginative, artistic, emotional, musical. And fallible.

Design for people as they are, not as you would have them be. Design for inefficient users. Design for fallible users. Design for creative, imaginative people who will do things with your design that you never dreamed of, things both good and horrid. Design for people who are tired and stressed, cranky and irritable, sloppy and inattentive. In other words, design for real people.

---------

IOW, the design of Java's checked exceptions doesn't work because it demands too much of the developer and ultimately produces brittle systems. The convenient expedient workaround is to simply swallow the exception - and that's what happens most of the time.