In general CS departments make students take multiple programming fundamental courses once in imperative and popular (read Python) , then OOP (read Java), then again a systems low level one (read C).

Instead teach them programming fundamentals in a good way by teaching proper use of functions and state. e.g.: the How to Design Programs philosophy or SICP philosophy without the math overload.

Instead of multiple intro courses make them take a practical programming languages course (not type theory) like the Dan Grossman courses or PLAI course (of BrownU) so that they can understand the inter relationships between different paradigms and how to mix and match them.

Teach C when they really need it in some low level systems class in it's own right. Similarly for Java.

For Data Structures and Algo class make them implement the assignments in languages of different paradigms so that they really get the essence.