Was this really necessary? Why are all of these debates Black vs White? I'm less inclined to try the 0MQ library now that I know one of the maintainers doesn't care about the correctness of the library as a whole (yes that's hyberbole).
I love how the OP negates his entire argument at the end by saying that you need to have "... test-driven development increasing as the product matures;..."
So what is it? Is testing considered evil? Is TDD considered evil? Make up your mind.
FYI: TDD is a design tool. Yes, the OP is right in that at the beginning you're at the point of most ignorance. TDD is a tool to help you learn and figure out your design. Is it right for all circumstances? Probably not, prototyping is a big one here too, but once you figure something out prototyping, THROW IT AWAY, and do the TDD on what you learned, you'll probably figure more details out that way.
I agree that R&D/hacking/prototyping should not be inhibited by always requiring TDD/BDD/FDD/etc. But once the idea has been ironed out, the developer(s) should really throw out/comment out the code and then start using the xDD of choice to bring that code back into the code base: safely.
I find the idea of "testing" funny in that it admits we are going to fail before we even try. It's like going into a game and saying "Ok, we aren't going to win, but let's make sure our score is at least 80% of the final score".
I am no way saying that we shouldn't test (though I'm more of an advocate of TDD/BDD).
I guess this philosophy is why so many "web 2.0" companies make terrible iPhone apps. If testing and QA is responding to users experiencing bugs, then you will fail at making good packaged software.
I love how the OP negates his entire argument at the end by saying that you need to have "... test-driven development increasing as the product matures;..."
So what is it? Is testing considered evil? Is TDD considered evil? Make up your mind.
FYI: TDD is a design tool. Yes, the OP is right in that at the beginning you're at the point of most ignorance. TDD is a tool to help you learn and figure out your design. Is it right for all circumstances? Probably not, prototyping is a big one here too, but once you figure something out prototyping, THROW IT AWAY, and do the TDD on what you learned, you'll probably figure more details out that way.
Addendum: Step 4 of http://unprotocols.org/blog:13 is writing a test case, before any API code is written.