I want to learn XP, TDD and DDD to improve myself. My problem is I have general ideas of what they are but I don't know which one should I learn first, do I need to learn something before other?

Please suggest me which topic should I learn first, second and third.


Focus on TDD. XP and DDD are higher-level, management-type software development concepts, and you will be learning them as you go anyway. TDD is a foundational concept.

To be effective at TDD, you will eventually need to know the others, and have a good grasp of software architectural principles. It's impossible to "grow" a sound software architecture by simply doing "red, green, refactor;" you also need to know where you are going.

  • I am learning about design patterns and going to learn PEAA after I finished design patterns book. I also adopt design patterns to my daily project. Do you have suggestion things I need to learn in addition to Design Patterns and PEAA? – Anonymous Apr 19 '12 at 16:33
  • Had to look up PEAA. :P Sounds like you have enough on your plate already. Good luck! – Robert Harvey Apr 19 '12 at 16:35
  • Thank you Robert. I have lots of things to learn both programming and English language. :) – Anonymous Apr 19 '12 at 16:36
  • Funny I was going to recommend supplementing your learning with PEAA in my answer. Another suggestion is "Uncle" Bob Martin's Agile Development: Principles, Patterns, and Practices and Michael Feather's Working Effectively with Legacy Code – Michael Brown Apr 19 '12 at 17:54
  • I guess I know I've arrived when a book I've written becomes well-known enough where it can be referred to by its initials. – Robert Harvey Apr 23 '12 at 15:30

I would say that TDD is the foundation. If you do nothing else, your code would be better off just from properly applying this practice. TDD is what allows Agile development (XP being one methodology) to work. Having good coverage from a unit test suite enables you to be fearless with changing/refactoring your code, because you know once something breaks, you'll have a red test to alert you.

Without TDD, adding new functionality or changing existing functionality becomes something like defusing a bomb. Even worse imagine that bomb didn't blow up right away but instead silently releases an odorless, colorless, gas that once you inhale it causes you to die six months later. That is what coding without test coverage is like. You might think you're fixing a bug or implementing a new feature but in reality, you might be adding a new bug that will exist undetected until all bloody hell breaks loose months down the road.

After that I would go with DDD. This will teach you techniques to create code that is more easily tested, making you even better at TDD.

With regard to Agile Development, the only way to really learn that is to be on a project where it is being implemented properly. XP and Scrum and the other methodologies have their specifics but there are general Agile tenets that will work well regardless of the approach.

Not the answer you're looking for? Browse other questions tagged or ask your own question.