Nevertheless I still maintain that the classic CS61a by Prof. Brian Harvey is a gold standard. It teaches the most important big ideas, such that code is data and hence the whole OO paradigm is mere a DSL over structured data with named slots, with a protocol to follow (inheritance).
It teaches the superiority of declarative over imperative approach - one defines what shall be done, not how it can be done.
It also teaches lazy evaluation, so one doesn't parrot nonsense about monads and Haskell.
It teaches what genetics are, and that everything could be defined as an ADT with corresponding predicates (which represents mental categories we learn from environment).