06/23/2016, 11:03 PM
OK. Can we agree that it's basically defensive programming against bad programming practices?
Not exactly? There's something to be said about declaring and enforcing intent for an interface by only permitting reasonable operations on it. There are many cases when you build a list and do not want it to be changed, but simply observed. It is a cleaner, enforceable mapping of intent to code, since it is clear how you intend to use it without having to rely on mere convention.