Golang has prove itself awesome to play with. GoGo Wars! started from a late night whim and has grown bit by bit and may become a playable game. The amazing part is how refactoring in Go has kept the codebase flexible. Yesterday I added unit collision by rewriting the adhoc shared game state into a proper shared object. 20% of the existing code got touched in some way yet the rework did not feel like drudgery. Changing object name or types did not cause a cascade of boiler plate rewrote. Yet Go still provides strict typing. So far in less than 1000 lines every major feature of go has found a use. In total golang is proving to be my new second favourite language.
Before applying to Microsoft I had read every blog post I could find by past interns and intern candidates. Since I know I’m not alone I want to leave my own experience. The summery of my story is next summer I will be interning at Microsoft working in on Windows. The internship does not start for another 4 months but I am already very excited. This post should be long so if your busy or lazy you might want to read at a better time. Please do not stay awake past your bedtime reading everything you can about the internship and interviews; I did a few times and frequently regretted it in the next morning.
The next two cover the process before the Redmond interviews which in turn is the third section.
Applying at Campus Career Fair
You can apply either online or in person if Microsoft sends recruiters to your campus. If you get the chance to apply in-person you should jump on it. Microsoft’s recruiters were real engineers and a lot of fun to talk to. A few months ago I wrote about my application. One thing I should add is the on campus recruiters perform a resume screen before sending the collected resumes to Microsoft. At the Q&A session the recruiters held after the career fair they warned about dropping off resumes without chatting.
Reading in between the lines I think this means the recruiters were tasked with making recommendations. Without talking to you they can only go by your resume which is no better than submitting online.
On campus interview, aka first round interview
I also wrote a post on my first round interview. Overall at this stage I would worry about whiteboard coding and have a project you can talk passionately about. Also take the time to review as many problems online as you can. Microsoft says they want candidates passionate about tech and I do not think those are not fluff words. This does mean you need to worry about signalling your passion. Getting excited and animated is easy for me but I know many programmers are a lot more reserved. You might need to practice by talking with yourself. One extra warning: check your house for quiet roommates before entering into long & loud debates with yourself over technique subjects. Nothing is quite as awkward as discussing the merits of C++’s exception handling then turning a corner and running into your roommate.
After the first round interview I got an email of congratulations. About two weeks later someone contacted me with the interview date and arranged travel to Redmond.
Redmond Interviews, aka second round interviews
Finding out who I was interviewing with
Two days before I was to leave a third person emailed telling me who I would be interviewing with. Their email’s exact text was “Windows Windows Live”. Now if you are a non-Microsoft employee this means two exact things: 1, they made a typo and wrote Windows twice, and 2, I was interviewing with Windows Live. I later verified this conclusion with other interns. Since I was gunning for low level work to complement my prior experience I was disappointed.
Yet I was wrong. It turns out Windows Windows Live is Microspeak, jargon specific to Microsoft. Since intern candidates are by definition not working at Microsoft you can imagine why we would get confused by this Microspeak. What Windows Windows Live is supposed to mean is Windows & Windows Live, which is a division of Microsoft.
It may seem like a minor issue but for the few hours it took to discover the misunderstanding my enthusiasm was killed. I was still happy with the chance to interview but working outside of my existing interests wasn’t very appealing.
Flying to Seattle for the Interviews
Below is a photo I took the night I flew out. There is nothing special about the photo, this is Calgary’s natural state. By this time of year the concept of a room temperture outside is foreign. The snow bleaches the landscape a cold white. The occasional chinook may melt the snow but this serves only as torture by simulating the beginning of winter, again.
Now here it is before the flight, at 18:00. We do not get very much sun during winter.
And for comparison here is Seattle before my flight home:
When I landed in Seattle I could smell the air, and it was sweet. I thought I might have been smelling spilled oil or other plane liquids but the sweet smell carried on into the city!
It did rain over my stay but that was not enough to dampen my enthusiasm to Seattle. Stepping off the plane was like time travelling five months forward to a none frozen Calgary.
Both my way there and my way back was quite painless. Microsoft arranged for a towncar to pick me up at the airport and even provided a Taxi voucher for the way back to the airport from the hotel. It was only back in Calgary that I had to arrange my own transportation.
The reimbursement for my travel and food expensive was also painless. I have already received and cashed the check. They even provided an option to reimburse in Canadian dollars.
Microsoft booked me at the Westin in Bellevue. I must say the hotel was the nicest I’ve ever stayed in. For a bit I got worried Microsoft had mistaken me for a full time candidate since it was that nice.
Morning of the Interview
At point I had yet to meet a Microsoft employee. Everyone from the towncar driver to the hotel knew I was coming. It almost felt like Microsoft was masterminding everything, always in control but never appearing. Since I don’t travel often this made the trip much more relaxing.
12:00 was our departure time so I went down to the lobby at 11:30 hoping to meet some other candidates. At first there was just three of us. One New Yorker and an Ontarian. The New Yorker was interviewing with the Office division and the Ontarian with Servers & Tools. As more intern candidates piled into the lobby’s couches we found out that the Ontarian was vastly outnumbered. Everyone else was split between Windows & Windows Live and Office. All the candidates were Software Development Engineer candidates.
When 12:00 hit we all split up into buses based on interviewing division. The trip to Microsoft’s Redmond campus did not take long and we were soon at the main Windows & Windows Live building. After checking in and receiving name tags we moved to a large board room. This board room acted as our home base. In between interviews we all returned and had ~15 minutes to eat, chat, and rest up for the next interview.
Interviewing at Microsoft
The whole interview process was planned and scheduled. And when I say scheduled I mean we received a schedule:
After launch at 13:00 the interviews started. This was both the most interesting portion of the experience and the portion I can least talk about. Prior I had read most of Glassdoor’s interview reports but even so all the questions I was asked were new to me. I liked it that way since I could puzzle through the problems and ask real questions. One interesting fact was that all candidates were asked questions from the same question pool. Thus after the interviews we all chatted about the questions.
For the first interview my interviewer was from Visual Studios.To my despair I missed the solution by a mile. Here I’ve gone and flown to another country and I’m grasping at straws on the first question. I was humbled and just a bit depressed. To my luck this question was a tricky problem for most people. One of the Office candidates told me the official answer and I think I might have been close without realizing it.
The second interview went better but not great. My interviewer was from the Internet Explorer team and picked a question from outside my area of expertise and had the grace to tell me so. This made me feel better about not completing the entire question. My implementation was going fine until it wasn’t. One of the three cases I needed to handle required me to break a critical assumption I made at the top of my implementation. This was after taking a decent quantity of time to come up with my algorithm. Still I am proud of how far I did get even if I did not very far at all.
Interview number three was the most awesome. I had an interviewer from the Windows Kernel! He even had a massive unix hacker beard! To be more specific he worked on the filesystem. His question style was to look over your resume, pick a term, then ask you “What is <term>?”. If you were not excepting this, like I wasn’t, then you’ll be taken aback. Still he was a lot of fun to talk to and had no problem with me referring back to linux for the technical questions.
My final and forth interviewer was from Sustained Engineering and will be my boss this summer. This interview went the smoothest of all. I found the “perfect” solution and implemented it with only one bug resulting from my being clever. In hindsight a bug due to over cleverness is the exact *wrong* thing to do when your interviewer has to deal with the resulting codebase. My clever trick was to use bit manipulation to avoid a conditional branch which I then not mixed up with negation in two’s complement.
In every interview I had a real chance to ask questions and got honest answers. They even stopped my problem solving to leave time for questions. The interviews themselves were held in various unused offices. The offices had two chairs, a desk, and one or more whiteboards. The occupied offices I walked past were well outfitted for programming. As a bonus there was even a pile of old unused computer parts and monitors sitting in the larger corridor. I can only assume that this pile bodes well for a non-authoritarian office environment.
On a fun note one of the interviewers used a prototype Surface Pro, this was a few days after the official announcement. I only noticed it when he closed the kickstand and I got a glimpse of the distinctive “128GB” labelling. He said the battery worked very well for his needs. Note: I’m not sure if this information counts as confidential or marketing.
After the interviews we piled back onto buses and went to a Microsoft showroom/waiting room. There was a Microsoft Pixelsense, Microsoft Xboxes, Microsoft Phones, and Microsoft snacks. To be honest I don’t think Microsoft designed the snacks; but they did provide them. There was pop in a mini ridge and bowls of candy everywhere. While waiting for the results we played tower defence on the Pixelsense, snacked, or chatted. Some candidates browsed wikipedia for sights to visit the next day.
About an hour later the first candidate was given his results. He had not been accepted. Soon after I was called away.
Imagine my excitement when the recruiter said “Congratulations!”. Yup, I managed to get the internship despite not solving all the questions and failing the first interview.
Since multiple recruiters were delivering the news in parallel when I got back to the waiting room only three candidates were left. Me and another guy took an SUV back to the Westin and I went off on my own to find a McDonalds. Other candidates, successful or not, went off to max their food budget. I would have went with them but I wanted to skype my parents.
Microsoft said not to disclose the exact details. What I will say is that it is high, as in rivalling the introductory full time offer territory. The offer should be equivalent or superior to Google’s. The base monthly salary should be similar but Microsoft subsidizes housing. I also checked with a friend who got a SDET internship that the offer does not discriminate between development and testing. I do not know the Project Manager Intern’s offer was different.
One thing to note is the contract contains a non-compete clause: I cannot work on any software that competes with any of Microsoft’s products for six months after the internship. In a nice aspect the contract does allow personal projects provided they are unrelated to my Microsoft work.
I am very excited for this summer.
That Microsoft has no problem with my Linux heavy experience is impressive. I hope this means Microsoft has changed and is not the insular monolith I used to hear about. One of the candidates with an offer even wore his Google backpack from his last summer’s internship for the interview, and no chairs were thrown at him!
With libjtapi done and two weeks before the next semester I’m taking the opportunity to overhaul my workflow:
- vim (replacing gedit)
- Ruby on Rails (replacing wordpress for non-blogs)
- less (a super set of css)
- lower desk height
- dual portrait orientation monitors
Once I feel comfortable with the new tools productivity should return. Until then I feel rather in-effective.