One line in this article may have given me an epiphany:
>" If I don’t typically make a kind of mistake (like setting the wrong variables in a constructor), I don’t test for it."
My primary objection to TDD is that it doesn't seem to work, because when I've tried it, the tests caught no bugs at all. I believe that tests can be important for APIs to prevent regressions when you have to work with external components, but its frustrating to put time into tests and then never have the tests fail.
Its not that I'm a perfect programmer, its the kind of bugs I make. The kind of bugs I make are caught by the compiler. This may be because, over the years of my career (many of which occurred long before the idea of "test first" was widely heard) I've trained myself in a style of programming where I can trust the compiler to catch my mistakes (most of which are typos, frankly.)
I don't know if others can do this, but for me, it came about by doing things like:
Old way:
if (variable == 1) then whatever
New way:
if (1 == variable) then whatever
Every time I mistype that as "(1 = variable) the compiler catches it because I can't redefine 1.
My primary objection to TDD is that it doesn't seem to work, because when I've tried it, the tests caught no bugs at all. I believe that tests can be important for APIs to prevent regressions when you have to work with external components, but its frustrating to put time into tests and then never have the tests fail.
Its not that I'm a perfect programmer, its the kind of bugs I make. The kind of bugs I make are caught by the compiler. This may be because, over the years of my career (many of which occurred long before the idea of "test first" was widely heard) I've trained myself in a style of programming where I can trust the compiler to catch my mistakes (most of which are typos, frankly.)
I don't know if others can do this, but for me, it came about by doing things like:
Old way: if (variable == 1) then whatever New way: if (1 == variable) then whatever
Every time I mistype that as "(1 = variable) the compiler catches it because I can't redefine 1.