Note: I wrote this about five days ago, right after I got back from Seattle.
I spent this past weekend in Seattle… what a blast. I loved hanging out with my cousin and his new wife. Everytime I’m with my cousin I remember the good times when we used to be in India. Now he’s got a great job, a wife, a car, a house. It’s truly amazing how quickly time passes. The only real downer this weekend was that Northwest lost my baggage on my way to Sea-Tac. That sucked.. I had to basically wear the same clothes for the two days after that (including during the interviews).
The night before my interviews was weird… I slept well, but I had two nightmares — 1) I missed my interviews and 2) I made a fool of myself at the interviews. I woke up in a state of panic/disillusionment/confusion/relief. In that order. Anyways, I got ready (didn’t have much of a selection of clothes), and we headed over to Microsoft’s campus in Redmond.
I remembered it exactly as I left it two years ago when I interviewed as a freshman. That was a harrowing experience — I basically got screwed in the first interview when they asked me to code a string-wrapping solution, and I took the brute-force approach. The interview after that was with a guy who had worked with Microsoft for 10 years; I felt like a toddler when I tried to explain to him the differences between Java and C++. The interview after that was basically trying to explain how an XML parser would work. Either way, as a freshman I didn’t know much and alas, I was too young and the experience turned out to be nothing more than humbling.
This time was different… drastically different. After losing out on a greuling, stressful interview process with Amazon (I went through three technical interviews — I made it to the “bar-raiser” — but didn’t get an offer), I decided to approach the Microsoft interviews with a sense of “try my best” and “think through everything”. More importantly, I was able to de-stress myself by taking the entire thing as a multiple-step process.
I met with the HR rep and I had a fun conversation with her — I felt relaxed and explained my reasons that I was interested in Microsoft. Throughout the rest of the day I would realize more of those interests. She told me that I’d be interviewing with the WinFS team (a truly revolutionary filesystem) and the XML Runtime team; my goal was to get dual offers. She led me outside to the recruitment shuttle and I headed off to my first interview. The recruitment shuttles are pretty sweet — completely electric cars (I think modified Prius’?) with dashboard panels that display stats on the entire car — it’s battery, etc.
The first interview was with a lively developer who was really interested in my past experience. I told him about my research in abstracting web frameworks as well as the software engineering project I’m working on. He was really friendly, and when I ruefully explained my baggage situation and addressed the fact I was dressed so poorly, he stopped and said not to worry, as he pointed to some pretty large ink blotches on the pockets of his jeans. We talked through some team-based scenarios first. Eventually he got to the coding question, which turned out to be more of a design question. It was an interesting problem that required me to find the problem first, and then the solution (Usually in computer science we’re given the problem and asked to find the solution). Eventually I solved it, and I was happy with my solution, but gave a few alternatives and analyzed time/space complexities.
The next interview was my favorite — a super-friendly developer who looked like he had been in the game for a while. He was old, but extremely knowledgable; his office was filled with books on various topics of computer science. We had a great conversation, and I explained to him a few projects I had done as well as some current projects. He asked me to describe Ajax, since he wasn’t extremely familiar with it. So I tried to take a descriptive, high-level approach by drawing state diagrams and such. I gave him an example, delineated my theories on the history of Ajax, and explained to him the problems associated with Ajax and how developers can address them. He seemed satisfied. He then asked me to write some code — specifically, to find the first non-unique character in a sentence. I thought for a bit and gave an O(n) solution, and then coded it on the whiteboard in front of him. I analyzed boundary conditions, and talked about some of the limitations. He guided me to some other limitations later on, but remarked that it was a good algorithm. It was definitely an interesting problem, and there were lots of complex issues involved.
My next interview was with an Indian guy. I was scared. He was the real bar-raiser, and asked me if I knew topics relating to Operating Systems. Unfortunately I am not taking an OS course until the Fall, so I was shaky on some of the concepts. I knew a little about thread programming, but not a lot. Fortunately, I was able to explain the concept of deadlock and how we can resolve it. He eventually pushed me towards a better solution. He asked me to code a solution to a simple problem, but what threw me off course was the fact that I had to explain all boundary conditions as I coded the solution. That was rough, but I made it through eventually.
After the third interview, I was basically sitting in the lobby and wondering if I did well. After some time, an elderly Indian man walked out and introduced himself. This was my final interview, with the guy who managed the three previous interviewers. This PM was amazing — his team includes some people who are known in the industry for their inventions, including Ajax. I knew this was the final interview, so I basically tried my hardest to show my passion and ideas regarding the state of technology. Our interview was about an hour and a half, and I had conversations with him about a wide variety of topics — how my interviews went, what I feel is most important about being on a team, what I’d like to do at Microsoft, what I think is the next big innovation on the Web (I gave two), and the general state of technology. I was asked to write some code — to reverse a linked list. I did it in O(n), and although I did it hastily, I stepped through the code for a couple of cases. He seemed pleased, and then asked me to code another problem — pretty interesting one actually, and it was more math than computer-related. I eventually got it and we took a break — I asked a few questions, and we had a light-hearted conversation. Ultimately, the interview ended and he called a recruitment shuttle for me to head back to the recruitment building.
All in all, I think I tried my best. I learned _a lot_. I had thought so much the entire day that my head was pounding by the time my interviews were over (they had gone from 12pm to 6pm). At least relative to my dreams the night before, I think I did pretty well. By the time the day ended, I had a newfound respect for Microsoft (not that I didn’t have one before). Here’s a company that takes a lot of crap from people about the stability, usability of their software, when ultimately they have a profound impact on the world. Hundreds of millions of people use Windows XP.Why? Because Microsoft knows their users the best. I am a huge fan of open source, but I have to acquiesce that open source is not a user-centric approach. It is a community effort among developers, but it is detached from the rest of the world. I think though, we’re starting to see more of a convergence with amazing software like Firefox and several other open source projects focused on attracting the common user. IBM as well has respectfully adopted open source, and the backing of a successful company like that is without a doubt going to result in something great. No matter what happens in the end, I’ve come to respect both fronts. In the end, we’re all developers, architects, designers, and managers, working for the common goal of creating software that helps people — I’m just humbled to be working with the major players in the game.
Crossing my fingers and hoping for the best…
*Update: 2/25/06 | 3:26 AM: I got an offer from Microsoft. I’ll be hanging out with my cousin and working in Seattle this summer :]
