Today I had my brief phone interview with Microsoft - it was a relieving experience. I say relieving, because I was fretting over it, when I really shouldn't have been; it went quite well. I'll list some of the questions below so if that's what you're interested just scroll down until you see them, otherwise I'll give you a bit of context for the interview.

I'm currently a freshman in first year computing science, and my only real programming experience started in high school in a Java CS course. However, I did very well in that course, completing the entire three year curriculum in the first three months of my first year in High School. I don't want this to come off as a boast however, because I really don't feel this should reflect on my skill, but on the inadequacies of the content covered in the course--but I digress, that's content for another day's moaning. I spent the remainder of those two and a half years (mostly) playing games and (sporadically) applying my theoretical programming knowledge to the practical implementation of a forum website. Upon graduating, I immediately enrolled in a computing science program where I feel, admittedly, a bit out of place. I was expecting everyone around me to have diverse and extensive personal projects, with coding experience down to when they were 4 or 5 years old playing around in DOS like I read about on the internet. In practicality, these are people who are, in general, average students who got into programming for any number of reasons and often hadn't touched any amount of software development before university. This was a confidence booster for me, as I had personal projects on my resume and they did not - which should make up for my deficiencies where actual years of computing experience completed is concerned.

It should be noted that these last couple months have seen my dive hard into web development (the result of which is http://fgtstarcraft.com) and also do some development properly instead of the spaghetti code I had written previously. MVC, TDD, OO and Agile aren't buzzwords anymore; I actually understand what all of them mean and their practical implementations in real software, which I would say was the biggest helper in my interview. In terms of actually getting the interview, Microsoft held a Q&A session with their engineers and PMs about the hiring process and accepted resumes on the spot - that's how I got my in. But on to the actual interview:

The interview was pretty frustrating, honestly. I felt like I nailed some answers perfectly, but my answers to others were wish-washy and poorly thought out. However, her response to each question was and identically toned "Okay, great". Toward the end it actually started to become relatively grating as I almost felt it was condescending and mocking in nature. I know it wasn't, but stress can do crazy things to the brain. At one point in the interview I actually answered a question very concisely and really not up to the spec that the question should have fufilled, but she said "Okay, great" and started to move on anyway. I interrupted and asked "Was that answer sufficient or would you like me to elaborate on it" and she said "Oh please do elaborate". I get that she was trying to be a foil to get my thought process down on paper, but the lack of feedback actually felt like a brick wall at times. I don't recall all of the specific questions I was asked, but I'll try to transcribe the more important and larger ones below:

  • Describe an assignment or project you've worked on and troubles you had in creating it. Outline the solution.
  • How would you test a pen?
  • Explain your method of software development and how to start a project.
  • Explain how you test software.
  • Explain the internet to a kindergarten student.

Overall the questions were pretty standard fare that I'd seen elsewhere on the internet. Just before the interview I actually came across the "explain the internet to a young student" question and prepared, what I thought was, a pretty clever and succinct answer to it. She actually went out of her way at the end of the interview to mention that she'd never heard my explanation before and thought it was pretty good. Essentially what I did is laid out a set of numbered desks with students drawing pictures at them. The desks were servers and the numbers were domain names/IPs. The student could ask to see another students drawing and the teacher would walk over to the desk, take a picture of the drawing and show the copy to the requester. This is the obvious HTTP protocol for fetching a copy of the document. My analogy doesn't really acknowledge that the internet exists outside of web browsers and that there's far more to the series of tubes, but I'm not sure that's relevant to a kindergartener, and I feel I filled the spec of the question pretty sufficiently.

One place that I stumbled in the interview, and I realized it as soon as I was doing it, was in the section where she asked about a problem I've had on a project. I've had my fair share of problems on projects, but often they weren't fundamental logic issues they were fighting with syntax or "it just doesn't fucking work". If I were to give advice to someone going into my same position again it would be this:

  1. Thoroughly understand testing and the practices associated with them, even if you're just applying to be a software developer. While it's more important for SDET, regular SDEs get quizzed - a lot actually - on the basics.
  2. Think about what you've done and present specific examples from code that have given you logic/developmental problems. "It just didn't fucking work" doesn't make a great conversational piece.

I'll hear back from Microsoft, they said, in a maximum of a couple weeks. I'm cautiously optimistic. I think I showed that I have the project work background and the capability of testing my code enough to overshadow the fact that I'm a first-year. Here's hoping.

UPDATE: They didn't offer me a second-round interview.