As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

2 Answers
2

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?
–
AnonymousApr 19 '12 at 16:33

Had to look up PEAA. :P Sounds like you have enough on your plate already. Good luck!
–
Robert HarveyApr 19 '12 at 16:35

Thank you Robert. I have lots of things to learn both programming and English language. :)
–
AnonymousApr 19 '12 at 16:36

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.