Maybe the whole concept of colleges in engineering is broken. I've met with people with a CS masters degree who didn't understand the concept of exceptions, were wondering why you can't just insert a string into the middle of a text file and were surprised that you can have more than one table in a SQL database.
I'm not saying that every graduate is bad but that even the reputable colleges hand out degrees to people who have no business having them.
If I look at the (CS/SW related) degree from the employers perspective, all that it grants is that the holder knows how to use variables, loops and branching in programming and that he/she has a rudimentary idea about what a compiler, an OS and a file system is. Is that really worth the 4-5 years and $100K (and more) spent on a something a high school kid could learn in half a year?
That produces a disconnect between the graduates expectations and the company's requirements - the graduate has invested time and money into his degree and expects a salary of a professional and the company doesn't want to pay that much for somebody with so little training. I believe the really good graduates do actually get god jobs out of school - it's just the average and below average people who cannot get employed.