A good part of this is that almost all software engineering is vocational, right? But it isn't always taught that way, and somehow in the public mind CS has become equated with "able to program computers".
This sucks two ways: first, it means that people with solid theoretical foundations in CS are derided if they can't--for example--get an iPhone to print to a wireless printer, and second (and worse!) it means that people who want to do something with computers think they can't because they don't have a CS degree. It's a sad state of affairs.
Another way of looking at it is that CS graduates are overqualified for 90% of current internet jobs. They are also underqualified, judging from the number of CS grads and upperclassmen asking for help with a Rails tutorial, since CS programs do not actually teach web development. They are also likely to have a fair bit of debt from college loans. This is a great way for companies to prejudice themselves down the salary ladder while overestimating the potential of any one recruit, since the underpaid-and-overqualified are going to want a raise as they become more proficient in the vocational side of programming, and as everybody knows: the best way to get a raise is to change jobs. Rinse and repeat.
> CS graduates are overqualified for 90% of current internet jobs. They are also underqualified...
This is 100% true for new CS grads I think.
It's even true for people like myself (who have been working in industry for over 5 years, but then don't know a particular tool that a new tech job is asking for...if I don't have to use it at my current job, and I can only program small things on the side using a particular language/tool, how does one get the needed experience that the startups want you to know if they won't hire you so you can learn it, firsthand?).
I just finished a 3-4 month stint having a past student volunteer with me so I could give him the additional direction and practical experience I knew he needed to actually get a job locally (and web developer positions are few and far between where I live). This is a few years AFTER he had already graduated from San Diego State's CS program.
Now with that additional training he was able to get a part-time position at a local web development firm (a foot in the door) and is also on his way to a 2nd interview for a web developer position at our local county office.
It hurts when you can see the potential in someone and know that it's not being developed properly because no one else (a.k.a. potential employers) can see it and make the jump to hire the person based on their potential and then give a bit of their time to train that person properly.
It's also awesome to know that my past student is going in the right direction now through my guidance (partially) but also through his hard work these past few months to acquire the needed skills :-).
P.S. I forgot to mention in our area, most of the graduates of our CS program can't find actual software development jobs (because there are hardly any available) so many of them end up in regular IT work, which makes them even more overqualified (and underqualified) since their schooling really didn't teach them about the IT stuff, per se, so they have to learn a whole lot on the job (once they are even able to get one).
I may have misinterpreted what you meant by vocational, but no it's not. In my CS program we had maybe 3 programming classes. I learned pretty much all my programming on the job, but my CS program taught me to think about problems differently and it was definitely useful.
> it means that people with solid theoretical foundations in CS are derided if they can't--for example--get an iPhone to print to a wireless printer
1) You need to explain to people what you do - "write database applications and generate web pages from the data stored in the database".
2) And what the people questioning your ability are looking for "you are looking for someone that works in a mobile phone shop, not a software engineer".
The fact they expect a software engineer to deal with configuring /installing applications on a mobile phone, makes them look stupider than a software engineer who "can't" configure a phone.
This sucks two ways: first, it means that people with solid theoretical foundations in CS are derided if they can't--for example--get an iPhone to print to a wireless printer, and second (and worse!) it means that people who want to do something with computers think they can't because they don't have a CS degree. It's a sad state of affairs.