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 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.
  2. If all goes well they’ll ask you to come in for an on-site interview. This is not only to further test your skills, but for you to meet the team and have conversations with them about technology. The more you think about it as being a casual conversation rather than a test, the better off you’ll do (at least I’ve found). Flipkey is based in Boston, and they had me come in around 10 AM for four hour long interviews. The first interview was mostly about me and what my interests are. What technologies I use and why I use/like them. I also had a chance to learn about how development works there and the tools they use. The next 3 were strictly implementation. It was all white board coding and it’s exactly like the phone screen in terms of the types of questions. Similarly, Google flew me out to Mountain View where they had me do 4 hour long interviews and an hour for lunch where I could ask a Googler any questions I had, and Raizlabs had me for 4 interviews for about 40 minutes each.
  3. At this point it’s the waiting game and it’s a pretty horrendous experience. All you can do is sit and hope for the best. I knew I had screwed up on one of my Google interviews so I wasn’t very hopeful for it. (And by screwed up I mean I wasn’t able to complete one of my interviewer’s question). More on the outcome of my interviewing adventures later…

I’m definitely making the entire process seem a bit laid back than it actually is, but the point is is that companies are picky. And they have every right to be. Google isn’t going to hire any new grad. They’re looking for the best and brightest and they have the reputation and resources to do so. And, if anything, the smaller companies are the harder ones to get in to at times because they’re looking for bright people that can crank out a working product in no time. Companies aren’t looking for people with Computer Science degrees anymore. They’re looking for people who have a portfolio of projects to show off. They’re looking for the people who have taken their knowledge of computer science and applied it to something they can put on display. I don’t think I would’ve gotten a chance to interview at Raizlabs if I didn’t have a portfolio of projects to show on GitHub and in the App store. (But that’s for a different blog post).

So I’ve rambled on about how hard it is to find a job in the tech world and how much work companies put in to find the best candidates, but how did that help me in finding where I wanted to work and what I want to do? Well, after visiting the various companies and meeting the people there, I found that I wanted to work for a smaller to mid sized company where everyone (at the very least on the team) were friends and socialized on top of being smart. I want to learn a lot during my time at work and I want to be the dumbest person in the room for that reason. If I’m the dumbest one there, I’ll learn more. I also want to be making major contributions to a project. When talking with developers at Google, a lot of them worked on little things or added small features here and there. I knew I wanted to contribute to something grander than that. I wanted to help build applications from the ground up. But what type of applications? I’ve built an iOS app. Did I want to continue that? Maybe work on an Android app? I’ve built web apps. Maybe that’s what I’m passionate about? Or maybe I want to be an internal tools developer. I’m not 100% sure what realm I want to reside in, but what I do know is that I love design and I’ve been loving creating web interfaces, so I’m going for the route of front-end developer as of now.

Sweet, now I kind of know what I want. So where am I going to end up for now? I accepted an offer made to me by Raizlabs in Boston. They have an amazing culture of smart, hard working people. They have some of the best developers I’ve seen and they’re very personable. Their office is a fun space (open floor plan and Nerf guns galore) and, best of all, only 30ish people inhabit it! Sounds right up my alley! I couldn’t be happier with the decision I’ve made to join their team for the summer (and hopefully beyond). They’re well renowned in the mobile application world having built the mobile apps for companies like Macy’s, Rue La La and EMC to name a few, and now they’re also starting to do more web development. They offer everything I want from a company (since us developers are picky at times too) and they understand that, yes, I do need a Mac (or UNIX based system) to develop. I couldn’t have made a better decision and I am so grateful for their offer. I know once June comes and I start I’m going to have the time of my life. Until next time!