Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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.

share|improve this question
add comment

closed as not constructive by Morons, Walter, BЈовић, Bill the Lizard, ChrisF Apr 23 '12 at 19:24

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

up vote 8 down vote accepted

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.

share|improve this answer
    
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 –  Mike 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
add comment

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.

share|improve this answer
add comment

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