I don't have a problem with test-driven development, but I wish people would see it as what it is: an expression of a larger paradigm, which is "know what code you're going to write before you write it".
(Naturally, that doesn't make as catchy an acronym.)
I express the same paradigm differently: I use outlines, like you might for prose writing. On my own projects, at least, by the time I start writing new code, I've already written an outline that helps me keep track of (e.g.) what this function should do, what parameters it should take, and what it should return.
As a benefit over TDD, my outline also functions as documentation - anyone who's reading my code (if I've done it properly, and I don't always) doesn't have to find my test suite to figure out what my code is supposed to do, because it's all right there in the outline, as a comment or docstring at the beginning of the function/class/whatever.
So I get frustrated when I run into people who insist that TDD is THE paradigm. It's not. It's an expression of a paradigm that has other (and, in my opinion, better) expressions.