What does it take to not be able to get an engineering job as a computer science major in Silicon Valley?
-
When I graduated in CS in 2003 it was hard for many graduates even of top schools to find software jobs in the bay area. Now, it's obviously much easier and demand is very high. I'm wondering how many computer science majors still struggle to secure jobs after a couple months of solidly looking and what qualities usually prevent them from turning their desirable background into an actual offer.
-
Answer:
I've hired lots of people, including lots of new college grads. And I've rejected many. These are the three issues that tend to trip up new grads: Failing the technical interview - most companies will spend a few hours asking you technical problems, doing whiteboard coding sessions, asking to see previous work, and generally figuring out if you know your stuff. Although the standards are lower for a new college grad than for an experienced hire, there is a minimum bar you need to reach, and I'm often surprised how CS grads, even from good schools, fail these technical interviews. They manage to get a BS without learning many of the basics. Although any good company provides lots of on-the-job training for new college grads, they generally cannot go back and cover remedial topics that you should have learned in school, not when other fully-trained candidates are available. And given how many resources are available on the web now (open source projects, tutorials, videos, Stack Exchange) there are fewer and fewer excuses for a really motivated person who loves programming to not have learned the basics, even through self study. In fact, I meet many people without a CS degree who are more qualified than those who have one, simply because their passion for programming has driven them to fill in the gaps in their lack of education. Lack of career clarity - I would not expect a new college grad to know exactly what she wants to do over the next few decades - most of the best people do not. But often I'll meet a candidate who is completely drifting and seems like she'll just take the first job that comes along. For example, if I'm trying to hire someone at a startup, but that candidate has no interest in startups and is also applying for jobs at IBM and Merril Lynch, I'd ask her if she really has made the decision that this is what she wants. I don't want to hire someone who will leave the company in a few months because she never did the research and soul-searching to decide where she belongs. I'd wait until she figured it out. By the time a candidate shows up for an interview, I'd expect her to be able to explain what she is looking for and why there is a possibility my company can provide it. Poor interpersonal skills or cultural fit - the purpose of the recruiting process is to evaluate the "soft stuff": How motivated is someone to achieve and learn on the job? How will they work within a team? Will they be willing to take on difficult and non-glamorous tasks? Are they good communicators? Are they able to work outside of their department with product managers, designers, and even with end users? At least at my companies (all startups) it was very hard to accommodate anyone without those skills or at least the interest and aptitude to learn them. Some of these candidates may have been better suited for larger companies where they could focus more on "just being an engineer." All this being said, candidates still control their own destiny given how in-demand computer science people and given how fixable all of these barriers are to someone motivated enough.
Michael Wolfe at Quora Visit the source
Other answers
The places you want to work and I pass on candidates with computer science degrees that lack the basic aptitudes (we can't seem to teach them) they should have needed to earn computer science degrees but don't in a lot of places because that leads to a high drop-out rate (Joel Spolsky observed a 40-70% rate in the 1990s, and hiring in industry for one company subjectively we went from a negligible reject rate to about 50% after a change to a more lenient data structures professor at one school) with lower revenue for the computer science department. I've worked places where senior management enforced a lower hiring bar and found that candidates lacking the aptitudes generated more work for other people than they put into the product making them net negatives so I won't budge, although I do compromise on experience because the right guidance can produce good results using junior people with aptitude. Those aptitudes are 1. The ability to form consistent mental models Saeed Dehnadi has a paper on this one http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf with the title referencing the pair of bumps in place of a bell curve seen in an introductory programming class and mentions recursion and concurrency as other aptitudes. 2. Thinking through problems logically, identifying their end/edge conditions, and expressing a solution in code. An example of this might be the classic "reverse a string in place" job interview question. People fail to get to start at the ends and swap until getting to the middle, not stop in the middle so they have the original string, or don't handle empty strings. Extreme examples with computer science degrees can't code a solution to that scope of problem given an English algorithm description and illustrations. 3. Applying knowledge to engineering problems Some people learn by rote. They can parrot back numbers and information related to a context but not apply it to problems. For example people can rattle off big O complexity of all their data structures but not choose one for simple problems. 4. Indirection People can't think of when to use it, like from part of one data structure to another. They get confused between pointers and what they refer to in simple linked list problems. 5. Concurrency Even given definitions of lock, unlock, and semaphores or monitors some people can't think along two lines of execution and come up with the right ordering to solve a simple thread-safe producer/consumer problem. 6. Recursion
Drew Eckhardt
Here is my perspective as a computer science professor (and a software developer in Silicon Valley long, long ago): A number of CS majors are in it simply because of the (putative) job prospects. They have no passion for computers, and thus no intellectual curiosity. They go through their coursework obediently, but never give any thought to questions like "Why are we doing it this way?" or "What could else could I do with this method?" They have no idea that a lot of the real learning about CS comes on one's own, not through formal coursework or if related to coursework, not specifically required by the professor. These students worry only about "Will this be on the final exam?" I don't mean to say that that is an unimportant (though I don't give finals), but if that is ALL a student thinks about, the consequences are obvious. My favorite example of that is use of debugging tools. At my school, these are taught as part of the beginning programming course, but I've noticed that most students never use debugging tools after that; it was just something to learn for the final. It never dawns on them that the debugging tools are there to help THEM, to save THEM time and frustration. Unfortunately, at many universities (or better, with many specific professors), "obedient" students like this can do quite well in terms of grades. Some professors give "practice tests," for instance, which turn out to be close to the real thing. Other professors will give detailed outlines on how to do a programming assignment. It is quite possible for a CS graduate to have never written a complete program from scratch in his/her entire college career. At research universities, many professors minimize the time they put into teaching, and thus recycle old exams, old assignments and so on, again making it easy for the uninspired to get good grades. Often a large portion of the grade will come from projects, which students can do well on by asking lots of questions of their professor, TAs and classmates. If you want a rough but quick test to see if a new CS grad has any insight, you don't need to ask him/her to write recursive code (though I agree it's a good test). Instead, just ask, "Have you ever written a program for your own use, not for a class?" If they say no, they are almost certainly in the "obedient" group. Note, though, that any kind of test becomes known and circulated, and thus gamed.
Norm Matloff
Related Q & A:
- What kind of jobs are there for a computer science major?Best solution by Yahoo! Answers
- Where should I work as a computer science major?Best solution by Yahoo! Answers
- What are the steps to get a computer science major?Best solution by Quora
- What can I expect when I do a computer science major?Best solution by Yahoo! Answers
- Is a Computer Science major good for what I want to do?Best solution by collegexpress.com
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.