> I certainly see younger programmers who don't understand simple "separation of concerns" when writing code and get themselves in to trouble with overly complex approaches
I was also like this before. I didn't receive a formal CS education. I majored in electrical engineering. Then I read the book How to Design Programs[0] and understood that I have been approaching coding problems all wrong.
Waterloo uses the HTDP book to teach freshmen introductory programming and CS. Now, I am sure, there are many students who take CS135 with no knowledge of what programming is. They are taught a functional language without state or mutation.
My question is how do they fare when they are to use imperative languages later on in the CS program where they have to use messy for loops and mutation and memory allocation? Is it better because they did CS135 first or hard?
To be frank, I don't think imperative language use is going away anytime soon. So, they need to learn the best use of both the worlds, hence, asking.