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).<p>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.<p>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.<p>Teach C when they really need it in some low level systems class in it's own right. Similarly for Java.<p>For Data Structures and Algo class make them implement the assignments in languages of different paradigms so that they really get the essence.
CS department in my country teach insane amount of math but not really any programming languages. Students cannot write a damn code with ~100 lines even when in master degree. Is this normal?
When I studied in Spain 20 years ago I had a mandatory Compilers course in my degree's curriculum. After Bologna's Process[1], it has stayed the same, there is indeed at least one compilers/interpreters course.<p>[1] <a href="https://en.wikipedia.org/wiki/Bologna_Process" rel="nofollow">https://en.wikipedia.org/wiki/Bologna_Process</a>
Making them compulsory would be good, but replacing the "intro" courses with a paradigm-survey course would probably be too much for students to handle.<p>Students would also likely not be technically mature enough to be able to appreciate these early in their journey. I certainly didnt when I worked through SICP in my late freshman/early sophomore year, eventually I ended up forgetting everything about it.<p>I like the PLAI lectures as the prof (Shriram) was able to relate the concepts to those in the industry and various languages like haskell, as well as made it practical by discussing program design -- perhaps HtDP was also a prerequisite?