I've interviewed (either on-site or phone-screen) ~110 new grads over the past 6 years, for a company that theoretically gets the best of the best (though in practice, it turns out more like http://www.youtube.com/watch?v=OXRi28W-ENY).
I'd agree with the BS part. The best BS students can write programs that accomplish the goal they want to accomplish, but aren't "good" at it.
The MS students are hit and miss,in the sense that most (let's say 70%?) are not significantly better than the BS programmers at programming, though they are often have better at algorithm understanding.
However, there are some MS students who are really good at programming. I don't know why there is such a stark difference from the BS folks, who are uniformly bad, but it does exist.
Let's think about this for a minute. Most students earning their BS are around 20-22. Were very good at programming when you were ~21 with little to no experience? This is why entry level positions need to really be entry level. You're going to have to find the ones that are really motivated and bring them into an environment that promotes mentoring. If you're lucky, then in 2-3 years you have someone that can program your socks off.
You don't go to school for art if you don't know how to draw. You don't go to school for history if you don't know who King Tut was, and you sure as hell don't go school for math if you don't know what a protractor is.
Why do people feel that they belong in a comp sci program if they've never written a line of code in their life?
If I have an option of hiring someone at 22 and mentoring them for 2-3 years in the hopes that they'll become useful or hiring someone at 22 who has been programming for the last 6-8 years and knows what the hell they're doing, I'm going to pick the self-taught programmer almost every time.
But you do study Philosophy, Medicine, Economics, Archaeology and Anthropology and many other subjects without having studied them before. The subjects that are not (or are rarely, or badly) taught at school often expect people with little existing knowledge but a strong interest and an enquiring mind. Computer Science falls into this category. Also if you think of Computer Science as being primarily about programming rather than the maths, theory and science of computing I don't think you fully understand computer science.
I chose to do Computer Science because I wanted to properly understand computers. I had essentially no programming experience although I had tried a couple of times but hadn't found the right way in, (QBasic by Example didn't work for me and I didn't discover K&R or a C compiler which I think would have worked better for me). At the end of my degree I was definitely not a great programmer but I could program in Java and ML (taught in the degree programme) and C/C++ and the WIN32 APIs self taught and used for my final year (significant scale but poorly structured) project.
There people on the course (at a very famous university) who really couldn't program at the end of the course but knew the material and official answers well enough to get good degrees. There were also many that started with good programming skills but it was certainly possible to learn enough in the three years to be able to start work and do useful programming and build experience.
Something that surprised and disappointed me at University was how few people seemed to really try to take advantage of being there and learn generally within and beyond their subject rather than being course and exam focused (not just CompSci but all subjects).
Am I a great programmer? No, but I've only spent 15 months within a professional development team, another couple of years on demo level and proof of concept software in an R&D environment and the last year self retraining in iOS and Rails development following five and half years in Product Planning and Business Development.
Who should you hire? I don't know but some simple programming tasks I. The interview stages are probably a good idea. If you want someone who is just a programmer maybe someone incurious is a good bet if they have the skills you need now but whether they are self taught or university educated I think the big question is whether you want someone to fill a particular role now or for the future growth potential that they have. If you are only interested in the fully capable now rather than the trainable (and mouldable to your company way) you may miss out onbetter long term bets.
I didn't say i thought it was strange that BS students can't program, only that i agreed that they can't.
Personally, if college is not preparing them for the practical practice of their art (I'm not saying it should be done to the detriment of the theoretical side, i'm just saying it's not being done at all right now), that seems like not necessarily the best use of time/money.
FWIW: I have the same view of law school, which is essentially worthless in terms of real world practice. If you practiced law how they test you in law school or on the bar exam, you'd be disbarred.
Let's think about this for a minute. Most students earning their BS are around 20-22. Were very good at programming when you were ~21 with little to no experience?
I'd expect a 21 year old who studied computer-science to have programming experience outside school exercises, and not show any signs of sucking at it.
If this isn't the case I see no reason to expect them to improve to a level that they "can program your socks off" after another 2-3 years.
We can argue about what "bad at programming" and "program your socks off" means, but my main point is that there is no excuse not to have some programming experience by the time you graduate.
grad students tend to have a curiosity and motivation. A few grads go to put off real life - most I have met are much better at questioning and probing.
I would expect a ms/phd to be distinctly better at questioning and thinking about things outside of face value than a bachelors, on average.
Were you able to find out when they first started programming? My experience is that BS candidates who started programming way before college were much better than the ones who started only after joining a CS program. I think it's a combination of longer experience programming, plus once you have some practice at programming, it's much easier to learn and understand the theoretical underpinnings of CS.
I think it's also about the reasons for starting programming. Most people start programming before joining a CS program not because they have to, but driven by their curiosity. And it's quite probably that they retain the curiosity throughout their education, pursuing more programming opportunities than your average BS.
I think this is largely a result of the average CS student never working on a non-academic project. The projects that CS students tend to work as coursework don't require too much investment in learning to become a good programmer--the code they write is written, turned in, and never looked at again, and working in teams typically isn't common. They never have to learn to be good programmers. The exceptional one's seek out extracurricular work and their programming improves with practice.