Obviously. That's really a convention thing in the end, to remember that you had a good reason to do things a certain way and not try to cheat your way around a problem and make your own life harder.It's also easy enough to go around the safety mechanisms and create more problems, which is actually one of the concerns I had in mind earlier. I mean, if supplying "x" and forgetting "y" is a concern, then removing "x" or "y" the usual way and forgetting to use the safety mechanism should be just as much of a concern, shouldn't it?
I'm not sure what's "training wheels" about having your code try and help you when you are about to make a mistake. I would say it's more about how good you are at remembering all the names you set for things. If you have a really good memory, you won't make the mistake and you don't need the extra help. Personally, I have a crap memory so I like having the code remind me that I already used a name for something else.
I'm always torn between the development speed of dynamic languages and the strong IDE support of fixed-type languages precisely because I like to quickly try things out to see what works best (which is easy in dynamic languages) but lack the mental memory capacity to remember the names of variables and need the code to help me with that (which is easy in strict languages).