As a recent graduate (about a week and a half) in Computer Science I still find myself asking the question “What do I want to do and where do I want to work?” I’ve read dozens of articles on how there is a surplus of software engineering jobs and a lack of people to fill them, so finding a job should be pretty easy, let alone figuring out what I want to do, right?

People have told me about this infamous surplus and I believe it, but there are still a large number of people with Computer Science degrees without jobs or working in a non-engineering role. So what’s the deal? Instinctively we think in a supply and demand kind of way. If the demand is greater than the supply, make more! And we’ve been doing pretty well at promoting Computer Science in schools. Look at the work code.org is doing and the amazing, free services out there such as Codecademy. When I took my intro Computer Science course there were about 15 people. For my school, that’s a mid sized class and large for a Computer Science course. My graduating class is the biggest for the Computer Science department with 12 people and everyone was happy to see Computer Science growing as a major and that interest for it is also growing. I took that intro course in the Fall of my Sophomore year (2011) and then became a teacher’s assistant the Fall of my Junior year. The class size when I was the teacher’s assistant was over 30 and by the time I stopped TA-ing (Spring of my Senior year) the size of the class was just over 40. So we’re doing a pretty good job in supply area, so why is demand growing and not being filled?

To answer that question we need to understand how tech companies perform interviews. Having interviewed at many places and having gotten through various stages in the process I’ve learned a lot about the hiring process. Some places I’ve interviewed at include, FlipKey, Raizlabs, Facebook, Amazon, Crashlytics, Google, Pebble, and Yelp. The only thing about the process that may differ between these are that some companies do a pre-screening before they consider you for a phone interview. This pre-screening may be a coding challenge or a project which you’ll have to turn in, but I’m not going to really touch upon that since it varies. I’ll primarily be talking about my interviews with Google, FlipKey and Raizlabs. I’ll break it down into steps because reading a huge block of text isn’t very appealing. So,

1. With the exception of Raizlabs, I had an initial phone screen where I was on the phone and had a collaborative text editor open. Which editor a company uses varies. For Flipkey I used JSFiddle and for Google I worked in a Google Doc. (Also, the position I was interviewing for was for an Entry Level Software Engineer, and for Raizlabs it was as an Engineering Intern). Yelp and Pebble had me Skype call for the phone screen, but it was still the same idea. During this phone screen they do brief introductions and, essentially, go right in to their questions. Sometimes they’ll ask about a project you’ve worked on or technologies you’re passionate about, but I’ve encountered few of those. The number of questions they ask vary, but they’re all technical. Some can be general knowledge questions (e.g. what is inheritance, what is an interface in java, etc.), but for the most part they’re implementation questions. For example, given an unsorted array of n integers, write an algorithm to display the smallest 100 in descending order. Instantly you may think to yourself, “Ok, just sort the array and then get the first 100 and print it in reverse order.” It’s not a bad solution, but it’s not the final solution. There’s a faster way to do it (but I’ll leave that for you to think about). During all of this, you’re typing away on your collaborative editor, hopefully speaking out loud, and they’re just watching you. They’l ask the occasional question, but for the most part it’s all you. Then they may ask you some follow up questions like “what’s the Big Oh of this? Or why did you choose to do it this way?” etc. They’ll leave some time at the end for questions you may have and then get back to you with a decision to move forward or not within a couple of weeks.