I much prefer to know that all objects are always valid. Otherwise I have to constantly keep in my mind the state of the objects as I read through the program. A small piece of code is not "transparently correct" as it depends on a "hidden" internal state. This means I have to rely more on program testing and will have more hard to find bugs. As the program gets large, (and they're always getting larger!) the problem just gets worse. In order for me to be confident that a given program is correct (or has few bugs) is for it to be composed of individually verifiably correct modules. So minimizing the number of internal states helps correctness. Of course I realize that this is not always possible to eliminate "two phase construction" - in C++ often due the problems of handling exceptions in constructors but I still I prefer to minimise this. "Exploratory Progamming" - I haven't heard of this but I can imagine what it might mean. It doesn't sound good to me. Though I must confess I have fallen into the habit of testing ideas - but, in my case, this usually means relying on compile time syntax checking to help figure out how to use boost libaries which often isn't easy from the documentation. Robert Ramey Scott Meyers wrote: ...
So, library users, what do you prefer, and why?
Thanks,
Scott