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.