We learn again and again that it's not possible to prevent people from doing something bad with your programming system no matter how safe you attempt to make it. And there's a boundary beyond which all the "directing" guidance will fail -- a programmer must have a certain level of understanding and be able to buy into a particular language, environment, framework, etc., up to a certain level in order to use those tools properly. Less than that, and they need training, not type-checking.


...which implies someone doing the training, which most programmers (that I've met) are not equipped for, which implies a (human) management layer, which many programmers balk at. Which is a shame.