After switching almost exclusively to managed WP hosting using Nginx with caching baked in, I am so glad not to have to mess with caching anymore, apart from widget caching. Optimization is still enough of a time sink simply due to plugin issues, dependency wrangling, implementing lazy load techniques, and trying to compress/merge/minify JS and CSS where possible.
If you are resigned to traditional “old fashioned” shared hosting with Apache, I echo the recommendation of Fastest Cache and Autoptimize because they always seemed to produce the best results and are also very simple and quick to set up. For relatively simple sites where you can make everything as close to static as possible, this is a good combination.
If you want some flexibility, SiteGround gives you an environment where you can use some, all, or none of their caching options with or without other plugin solutions. (They have their own plugin that just lets you control the 2-3 levels of server side caching they provide that normally you’d have to control via cpanel or the command line.) Some other old shared hosting providers have similar arrangements.
I still use W3TC for high traffic sites where managed WP hosting is not used, but I recommend NOT using it on a regular basis unless you know a good technical reason why you need it. I think W3TC gained huge popularity for being so comprehensive, but a lot of people using it don’t realize it’s way more than they need and may cause more trouble than it’s worth, especially if they don’t understand what the plugin is doing. It’s probably become one of the better explained and documented options now, but there is still a big learning curve involved, and most people just need a quick and easy “staticize my site” button. Back when I used W3TC more I had fairly frequent problems with it, but over the past year it has been totally solid.