As a senior engineer in my current role one of my responsibilities is to assist with the interview process and help on-board and train any new engineers we get to the team; I can assertively say that logic and critical thinking are the most severely under-developed skills in engineers today. In fact, I don’t even do “code” interviews anymore really — I couldn’t care less if you know how to map-reduce a binary tree or some crap — what I really want to know is how do you work through a problem you’ve been given, and how do you adapt when confronted with new information.
I have to disagree with some of the other comments here saying that we need more true CS and less software engineering training — I don’t care if you know how to calculate big-O complexities for your code, or whatever else you learn in CS, if you come to me for a job and don’t know how to use a shell, or understand that unbound thread creation is a really bad idea, or don’t know when to use a queue, then I’m sorry, I don’t care if you have a PhD in CS from MIT or a BS from University of Phoenix, you’re not getting a call back.