Eu diria que o TDD é a base. Se você não fizer mais nada, seu código ficará melhor apenas com propriamente aplicando essa prática. TDD é o que permite que o desenvolvimento Agile (XP sendo uma metodologia) funcione. Ter uma boa cobertura de um conjunto de testes de unidade permite que você seja destemido ao alterar / refatorar seu código, porque você sabe que, uma vez que algo quebrar, você terá um teste vermelho para alertá-lo.
Sem o TDD, adicionar novas funcionalidades ou alterar a funcionalidade existente torna-se algo como desarmar uma bomba. Pior ainda, imagine que a bomba não explodiu imediatamente, mas em vez disso, em silêncio, libera um gás incolor e inodoro que, uma vez inalado, faz com que você morra seis meses depois. Isso é o que codificação sem cobertura de teste é semelhante. Você pode pensar que está consertando um bug ou implementando um novo recurso, mas, na verdade, você pode estar adicionando um novo bug que existirá sem ser detectado até que todo o maldito inferno se divida meses a fio.
Depois disso eu iria com DDD. Isso ensinará técnicas para criar códigos mais facilmente testados, tornando-o ainda melhor no TDD.
No que diz respeito ao Desenvolvimento Ágil, a única maneira de realmente aprender é estar em um projeto onde ele está sendo implementado corretamente. O XP e o Scrum e as outras metodologias têm suas especificidades, mas há princípios gerais do Agile que funcionarão bem, independentemente da abordagem.