My beef with TDD is most every resource merely parrots the steps (red,green,..). No one teaches it well from what I have found. Nor am I convinced it’s easy to teach. I have picked up what I can by watching (what I believe) good TDD practitioners.
I have a feeling this is where TDD loses out the most
I practice TDD for the most part, I agree that it's not easy. E.g. there are a lot of unanswered questions: What if you write the test first, red, write the code but it's still red. Could be your code wrong, could be your test wrong. If your test is wrong, do you go back and see the red? (I do). Do you test your tests? (I don't). Treating TDD like a formal system doesn't make any sense since it's meant to be a tool engineer can use as a heuristic to make judgements about the stage of the development.
Absolutely. Actually doing TDD is nontrivial, and it has to be learned.
Most of the early learning was by pairing with people who already knew how to do it, working on a codebase using it. People learn it easily and fast that way.
But that doesn't scale, and at some point people started trying to do it having only read about it. It doesn't surprise me at all that that has often been unsuccessful.
I mean, there's the actual TDD book by Kent Beck. It's pretty good, and only 240 pages. It was an easy one-week read for me, spread out in the evenings.
I have a feeling this is where TDD loses out the most