A simple example. It often happens that developers query only a subset of a view. But in the view itself, all the tables must be joined. It is a waste of resources. It sounds very stupid and you may assume that developers wont' do it. But it does happen often.
Also, never believe in optimizer. This is only my opinion. People may disagree. Although optimizers have been very smart, still they can get confused in many cases and generated a sub-optimal plan. Oracle has the best optimizer till now, but you know what, many database people make a joke to call it "randomizer". :)
As for views, optimizers can get confused much more often on hints in a view. Then it will generate sub-optimal plans. This is especially true for views of complex queries.
On the other hand, if the query is simple, why bother to create a view for it.
Of course, views can be beneficial in security. It is a trade-off.
As for materialized views, I think in databases that require high performance and high concurrency, the issues it causes outweigh the benefit. First, it consumes resources to materialize it. Second, materialized views may become stale and require regular update, which requires more resources as well.