I got the job!
All in all it was an amazing experience. Even if they hadn’t hired me I still would have been pretty happy (I was saying that before I had the offer). I got the chance to have dinner and talk about programming with extremely bright people. I met really nice and smart people from my own country and now we are going to be working at the same company; most likely not on the same team/group, but still…
I went to Vallarta for three days. My dad, who is a businessman, made a “business meeting” in Vallarta so that he could be with me.
The hotel didn’t give me room right away so I stayed at my dad’s room studying. I was pretty paranoid so I was making sure that I knew all the stuff I put on my CV as deeply as possible. When I was taking a smoke-break next to the window, I saw other interviewees chilling out. Having some drinks and spending time at the pool. In retrospect, that is how I should have spent the day. Nothing I studied during those hours directly helped during the interview. It may have helped my confidence but I should have just relaxed.
We were invited to have dinner with the interviewers the night before the interview. We were told it wasn’t an assessment. I still had the suspicion that there were ninja interviewers taking notes on our behaviour. There were three tables set up and I chose the one John Guin was sitting at. Both because the prettiest girl was sitting there and because John was hilarious. Turns out my choice of table was pretty good since Mike Fortin came to our table and sat next to me.For the next couple of hours I had a great time talking to Mike and John. Topics included what’s it like to work at MS and their backgrounds, we even spent time talking about the version control system they use at Microsoft. Mike made quite an impression on me when he said “I’m the one to blame for Windows Vista”. He is in charge of the team that is responsible for Windows being fast. Hardcore stuff.
I took the risk and told them that MS Paint sucks. Fortunately they agreed. Not only was the dinner delicious and the conversations interesting, but I made a good impression on Mike which helped me when, praise Zeus, he ended up interviewing me the next day.
I returned to my hotel so excited that instead of sleeping I spent a couple of hours at the bar with my dad, his friend, and a bunch of drunken Canadians.
My interview was supposed to be at noon, but they moved it to 7:30 am a couple of days prior. I only slept about 4 hours but the adrenaline of the next day was enough to compensate. The Microsoft guys were nice enough to get us breakfast at their hotel since ours didn’t serve until later. The interview began at 7:30 sharp.
We were taken to a room within the conference center. There were cookies and soda. Within a minute or two a small army of interviewers came into the room calling people by name. Slowly, pale students and recent graduates were standing up.
I had four interviews. All of them consisted of around ten minutes of talking about my interests and around 40 minutes solving a coding problem. There were no whiteboards in the conference center rooms so the small point markers I bought were pointless (no pun intended). We wrote code on paper. I always kept in mind all the tips I read from the Internet.
Donna, my first interviewer told me that Manav, the guy who interviewed me in Mexico City had put in a very good word for me during dinner. That was a tremendous boost of confidence. She made me write an algorithm about returning a sorted linked list from two sorted lists. It was pretty easy but I chose C so I could show her that I knew how pointers work. She gave me some tips and we wrapped it up.
My second interviewer was named Bambo, and he started off telling me that with my math background maybe I could find an formula to the solution of an algorithmic problem involving consecutive letters in a string. I spent a couple of minutes thinking and I found a solution only to realize that I hadn’t understood the problem correctly. He posed to me another problem and I went on to try to find a formula for the solution. I realized too late that this time what he wanted was code.
Realizing I made two mistakes in a row, I told him “damn… I’m not doing well”; he just laughed and told me that the point of the interview was to find out how I think. He changed directions and asked me how I would test a dialog box. Then he asked me how I would test Notepad. One thing that made me feel good was that he complemented me on not giving up on a problem. Still, my confidence dropped after the interview. I didn’t feel like I had done well. The disappointment didn’t last long. I found out that Mike was my next interviewer and I got excited.
Mike started of telling me that I asked some good questions the night before; again, confidence boost. He asked me if I wanted to go right ahead to the coding but I was a bit tired so I told him to ask me some questions first. He asked me what was my favorite program that I have written. I told him about an Internet proxy I wrote to substitute all images in websites for a picture of myself on my mom’s computer (For instance, instead of the google logo, there was a picture of me doing a stupid face). He laughed, but clearly he wanted me to tell him my most challenging program. I told him about the shadowing in pycave. It was the first time I had to buckle down and read research papers, learn a bunch of stuff and then implement it. Programming smart tricks with OpenGL’s fixed function pipeline is not exactly an easy skill.
The problem I had to code was to determine if a matrix had a copy of a smaller matrix within it. After I finished, he told me if I had any questions and I asked just the right question to get him to ramble for 10 minutes about some awesome stuff his team is working on; very interesting.
When I returned to the main room, there were only two guys left. Most of us just had 3 interviews. Of the ones who had 3 interviews, they only hired one.
My fourth interview was with a guy named Nar. I was worried that having a 4th interview was a bad sign, but he told me that it was actually the opposite. That meant I was doing well, so I got a confidence boost again. He works on device driver architecture for Windows. He asked me about Haskell and then he asked me to find an algorithm to find the largest palindrome within a string. After staring at a piece of paper for a couple of minutes he told me that I could find a solution in O(n^3), O(n^2), but he didn’t expect me to find the linear solution. I found a quadratic solution but it took too long to write and we didn’t have time to test it or for me to ask him questions. He did ask me some questions that made me think I was getting hired.
When I was waiting in the room for the last time, I was drinking coke and smoking my nth cigarette. Suddenly I heard my name and nervously walked to the aisle. I saw my recruiter and my four interviewers waiting to congratulate me. They gave me a t-shirt and they gave me an offer. My heart was pounding . It was one of those moments that really engrave themselves in your brain.
Tips for the interview.
I asked them during dinner what is it that they’re looking for in candidates. Mike told me: Intellectual horsepower and passion.
This is subjective but I believe this is what helped me:
Be methodical. Understand the problem. Plan the solution and *then* code. I did this in all interviews but the second, the only one I felt didn’t go well enough. I got complemented on it. It is important. Example: My first problem was about linked lists. The problems are going to be ambiguous so they can tell how you think. Is the list composed of integers? Can I destroy the original lists to save memory? Are the lists terminated by NULL? Can they be circular? (you don’t want an infinite loop!) What happens if the function receives wrong data? Say, a Null pointer instead of an allocated node? There are a lot of things left undefined behind a simple definition and they are absolutely vital to give an adequate answer.
Show passion: I made a good impression by having projects of my own and by getting excited when talking about programming. I don’t think you can fake this.
Don’t worry about statistics. There is a lot of luck involved. I got interviewed by the right people. It is likely that a different subset of the interviewers wouldn’t have hired me.
That’s pretty much it.
As for the actual internship, I will blog as much as I legally can about my experience the next summer =).
I edited this post because I realized I didn’t write it as well as I could. I’m still not the best writer, but I had written this in a hurry. The original content is intact, I just made the presentation better and added a little bit of extra content.