Teaching Java the Extreme Way - a good intro to test-first programming.
Java examples and tools are used, but the technique is applicable to any environment.