Timing error detector used for symbol timing synchronization
It depends on your system :)

Seriously, it depends. Gardner is a pretty solid algorithm with a simple implementation, especially if you're using BPSK or QPSK. It can even be used in some MIMO systems. Its main disadvantage is that it requires two samples per symbol. M&amp;M requires only one, but it has its own disadvantages.

I think that these days the preferred solution is some variation of the polyphase detectors first proposed by fred harris. However, if you're experimenting and building your own system and you want to keep it simple, Gardner is a safe bet.