If you're a fan of test-driven development, you're likely to be a fan of functional programming. One of the mindsets of test-driven development is that if something is hard to test, it may be an indication of poor design. The natural upshot is that in a test-driven system, objects tend to hold less state and methods tend to be fully described by the value of their input parameters and the value of their output.
Which might make F# the perfect test-case forĀ somethingĀ I've been thinking about for a long time, a test-driven language tutorial.