I agree with the thrust of what you're saying here, although:
> TDD won't improve your proficiency
Disagree. Knowing that you need to test your code, and going back and testing your old code gives you a real feel for how to split out code, how to write interfaces, and how to organize your objects - at least in Perl and JS, which are the languages I'm proficient in.
If you know that your routine that'll be accepting an object might be accepting a mocked up object, you're more likely to resist the temptation to get all molesty with its private methods; if you know you'll spend time trying to drive up the code coverage, you'll be more inclined to abstract and not repeat yourself.
Random plug for a book that made me a waaaay better Perl programmer: http://perlmedic.com/
re: Perl Medic... Excellent book. What I learned there has served me very well with Perl, and also helped me with work on some crufty Python as well!
Also, yeah... I should take-back the TDD comment, or at least re-word it. I just get a little knee-jerky when I hear the word TDD mindlessly spouted out as a panacea. TDD works best when combined with other best-practices, and of course, learning how to write tests that help and don't become yet another ball of mud is an art in itself!
> TDD won't improve your proficiency
Disagree. Knowing that you need to test your code, and going back and testing your old code gives you a real feel for how to split out code, how to write interfaces, and how to organize your objects - at least in Perl and JS, which are the languages I'm proficient in.
If you know that your routine that'll be accepting an object might be accepting a mocked up object, you're more likely to resist the temptation to get all molesty with its private methods; if you know you'll spend time trying to drive up the code coverage, you'll be more inclined to abstract and not repeat yourself.
Random plug for a book that made me a waaaay better Perl programmer: http://perlmedic.com/