If you can avoid using the canonical tag - that is the best option.
If your website has pages that are identical or VERY similar (i.e. duplicate content issues) then you should really focus on removing the duplicate content. If you are using URL-parameters (to track user actions, session IDs etc.) then the optimal solution is to do that differently. Or if you are serving the same content for similar terms in product or category pages... the same applies
We have invested heavily in removing dupes and setting up 301s to the correct pages.
If your site architecture doesn't allow for the optimal solution then using canonical AND noindex tags is the next best choice.
The canonical "leaks" more linkjuice than a 301 (which will pass close to 90% of anchor and link power). Since the canonical is only a suggestion, I would always cover my bases with the noindex to avoid duplicates.
You should also try your very best to make sure bots don't crawl the duplicate URLs unnecessarily. That is to say, make sure links on your page are clean. If users decide to link to a page and they copy the "duplicate" URL - this is where the noindex and canonical will make sure that when the bot follows the copied URL link most (but not all) of the link power is passed to the correct page.