I think XP (eXperienced Programming -- pun intended here) is the single most productive methodology ever. When you got to know and use many tools, read many articles and books, met many smart guys (and girls), worked in many shops with different languages, in many diverse environments then you get things right fast.
Picking the more apt method is a matter of preferences, team composition, project and deadline. Anyway agile methodologies seem to have an edge in that they tend to give the final customer a taste of what's going on very early, avoiding the "impact" which usually brings nasty surprises just when it's too late.
EDIT: as a side note TDD is something that everyone should do, waterfall, spiral, fireworks, sierpinsky, EVERYONE!
EDIT 2: ok, so you'd like more descriptive answers.
At University I've been introduced to the classic waterfall method: requirements gathering, design phase (with UML), development, test, deploy and maintenance. I could never apply this method, mostly because of the fuzzy and ever changing requirements. Plus, since you learn new stuff on the job, you are very likely to get back to the code wrote earlier and look at it in disdain.
I've been lucky enough to have a mentor who used agile (XP in particular) and taught me the value of unit tests, design patterns (and anti-patterns), code documentation and embracing changes. Unfortunately we could never pair program because he worked in UK while I travelled a lot, so I can't say if that could have worked (even if I suspect it would).
At the moment I'm trying SCRUM with my team. I do like in particular the concept of requirements as stories because it gives you a definite working set. I don't like how SCRUM handles the layers (or - more likely - we are doing something wrong). For example: I'm in charge of DB+Hibernate, so of course I have new tasks for every single story my colleagues are developing. I know we would better define some guidelines and develop every story from top-down as a separate entity, but I believe that a certain degree of specialization is not only unavoidable, but even welcome (provided that you can switch roles from time to time to let everyone learn new skills).
IMHO it all boils down to some tools and techniques that are universal: unit testing, for example, the value of communication between colleagues and with the customer, the importance of code review and refactoring, the classic DRY, KIS, DOTW, YAGNI. What I think everyone in favor of a mixed approach is trying to say is that you should not throw away the initial design phase (waterfall) but you have to "steer" the work on the run involving customer and writing code that's easy to change according to the new requirements (agile).