Tab completion is for wusses. Sure, I use it, but only when
I have no choice. Most of my day I'm in
XEmacs, where I've bound
M-/ to
hippie-expand.
Even the default binding for M-/, dabbrev-expand, is pretty scary. It searches the entire buffer (optionally, buffers) for a completion to the word you just typed in.
But what if you want to complete a file name instead of a word? Or an entire line or balanced braces construct (according to the buffer's rules)? Across this buffer and all other buffers? hippie-expand does all this (and more) for you! It searches for all these types of completions, presenting them according to a list of completion types.
And you can write your own Emacs Lisp functions to get yet more completions. But I'm not that far gone. Yet.