Don't get me wrong, I am not saying that I hate grep. I still use grep at least once a day, usually because it comes installed in some sandbox environment that I don't have sudo access for. grep's generic outputs are not the most well suited to search through millions of lines of code to see where a codee is changing a specific variable. After learning of ack about 2 years ago, grep has more or less been relegated to secondary use in my tool kit, to be used only when I am unable to install and use ack.
Here I want to outline some of the awesome things I can do with ack, that I have grown to appreciate in the last couple years:
ack(1): grep-like text finder - Linux man page
Ack is designed as a replacement for 99% of the uses of grep.