Do you have to be a computer science major to work on Microsoft products? NO you don't.

A potential intern sent me the following question:

While my major is computer related, I'm afraid it's not technical enough to assure that I become a competitive candidate. So I'm wondering what you would say are the core technologies candidates should have to be competitive and any other tips you can offer.

I’ll address this for interns and full time hires for the product groups at Microsoft.

The short answer is that we don’t require any specific major and what we are looking for are the skills associated with the three core technical disciplines at Microsoft (Software Design Engineer, Software Design Engineer/Test, Program Manager). Being a computer science major (or computer engineering if your school has that) is helpful only because it is usually the place the recruiters go looking. However, don’t let the lack of a specific major stop you from applying if you think you meet the core skill requirements outlined below.

But above all, the most important thing for you to possess when considering Microsoft is a passion for software and bringing software products and services to market. If you aren’t excited about software then Microsoft isn’t the right place. If all you want to do is “make money”, or “get a sense for how things are done” then there are probably places that are a better fit.

Just taking a look back, computer science is a relatively new major at many universities (new compared to say Physics or Political Science). In many schools computer science is an off-shoot of Math or Electrical Engineering. So early on at Microsoft we would expect to see lots of hires from technical fields, not necessarily computer science. We still see that, though with the prevelance of comp sci folks who want to work in software generally find that major. Some of the very very best programmers I’ve known at Microsoft never studied computer science formally—some studied Music, Physics, Math, etc. Cornell always made it very clear in their requirements for graduation that your major was not a career choice, but rather it was a necessary part of graduating to have in depth coursework in one area. So I majored in Chemistry (and comp sci) J

Software Design Engineers (“developers”) are going to write production code that ships to customers. So for this job you are going to need to know how to program. The following are some of the core programming skills you should be familiar with: high level languages (C++, Java, Scheme—beyond scripting HTML), data structures (linked lists, trees), machine architecture (instruction sets, virtual memory, hex math), and algorithmic concepts (complexity theory, recursion, abstraction). You will notice that this list is not a list of Microsoft technologies – we love to see that, but by and large over the course of your career you will learn many languages, toolsets, and runtimes so mastering a specific one is cool but you will not be quizzed on the keyboard shortcuts of the IDE that you use. A significant portion of development at Microsoft is in C++, which does often prove to be challenging for folks that went to programs that teach exclusively in Java. We try hard to interview without a bias towards the language, but rather to gauge how fast you will be able to pick up a new language. A good acid test of your skills would be something like “if someone told you that you needed to implement the Java Collection classes, how would you do it”. If you have no idea except going to the reference book and just using the Collection class then being a Software Design Engineer is probably not for you. But if you could write a Collection class only using some of the primitives of Java then go for it!

Software Design Engineers/Test (“testers”) require many of the same coding skills as developers and will put those to use routinely. The primary differentiator is that the code testers write generally facilitates shipping software code, but is not itself a product customers will run. In addition, there are significant differences in the types of problems being solved and the approach. Whereas a developer might have to implement a Collection class, a tester really looks at that and says “how do I figure out if it really works”. A tester would put their problem solving and coding skills to work demonstrating that the code meets the specification or satisfies all the boundary conditions. A cliché about testers is that they like to “break things”. I don’t think that is exactly fair, but perhaps a way of looking at the difference is that a tester definitely likes to focus on insuring that things operate the way they are supposed to, rather than claiming they operate correctly. With testing, you generally do not need as much specific background as developers in terms of data structures and algorithmic concepts, which is why we see a lot of success with testers hired from all sorts of “technical” majors. Many of our senior test managers in Office have backgrounds in physics, math, operations research, or a whole host of other majors where you learn critical thinking and problem solving and become significant users of computers and programming.

A Program Manager (“PM”) is a job that is unique to Microsoft. You can read lots about this in Michael Cusumano’s book (somewhat dated) Microsoft Secrets. This job was created as a way of bridging the “gap” one often sees between customers and developers, and at the same time the idea is to allow developers to focus on what they love to do (write code) and testers focus on product quality while PMs go and develop a product specification that meets customer needs. Program Management is a highly technical position of course and you must have in depth knowledge of how software works and how people interact with computers. You don’t write any code, though knowing how to write code is super helpful. Important skills for program management would include communication, negotiation, organization, and important character traits would include empathetic and detail oriented. Chris Pratley has written quite a bit on what program management does so check that out. Successful PMs can be found with all sorts of backgrounds including anthropology, linguistics, political science, art and architecture, music, etc. But of course many program managers come straight from computer science as well. If you worked on a group project in computer science and somehow found yourself trying to orchestrate the work of the team, filling in the holes, and writing down the details of how things should work, and then presenting the work to a professor or class then you just might be a program manager. One thing to keep in mind is that the job title is a bit misleading as program managers don’t really program and don’t manage the project. What a program manager does is “manage the program” where the program is a feature area of the software.

A neat thing about these three jobs at Microsoft is that they are all peers. People new to Microsoft, but with industry experience, find this awkward because they are used to an org structure where test reports in through an engineering manager who manages development and test, and the specifications come from product management/marketing in the form of a “market requirements doc”. If there are any specs that are detailed then development writes them, but these are usually architectural. At Microsoft we have “triads” of development, testing, program management that work on the code together from the beginning. This is a super important organizational concept and one that I think adds a lot to how we build end-user software in Office. It also says that consensus and understanding different viewpoints are an important part of building products. Successful members of a team at Microsoft work across the other disciplines to get their job done.

So basically, the big tips I would offer, to answer the email question:

  • Be passionate about software
  • Know the concepts behind computers, and understand how those are reflected in a specific system
  • Understand what drives you and where in the triad you think your personality and character puts you

If you want more information on the specifics of these three different roles at Microsoft, just check out https://www.microsoft.com/college/ft_overview.mspx.  

Oh I want to thank everyone who has sent me mail and thoughts on the topics I’ve written about. By all means, feel free to post comments and suggestions. I love the dialog.

--steven

Comments

  • Anonymous
    August 10, 2005
    this is false, all of the interns on the link you posted come from IVY league schools while the majority don't goto ivy league schools, Yeah Microsoft hires college graduates but they come from Ivy league schools..

  • Anonymous
    August 10, 2005
    I'm not sure which link, but out on our web site the full time and interns represented in the "meet them" sections are from: waterloo, stanford, michigan state, tuskeegee, rice, carnegie-mellon, harvard, and university of illinois.

    So there was one ivy league represented.

    I don't know if the site rotates people throughout the day though.

    Having just printed up the t-shirts for Office this year, I can say that for Office the interns come from 54 different universities and colleges this summer. We print the schools represented for the summer on the t-shirt!

    Our full time hires will come from an even broader array of schools, especially internationally.

  • Anonymous
    August 10, 2005
    All of those are distinguished schools..plus does MSFT have a network protocol team?, I'm a networking guy and would want to apply for a internship in the future, I would presume C,C++?

    plus how hard is getting a Internship?

  • Anonymous
    August 11, 2005
    There's nothing wrong with hiring from distinguished schools. Although many great programmers do not have a 'distinguished school' caliber college education, the great majority do. And if a company hires at prestigious schools, it is because they know that there is a much higher chance of finding great talent in such schools. And truth is, if you are a company that wants to hire good talent, you're gonna go where the good talent is.

    Also, I know of Physics, Information Science and History majors who program and are great at it and could easily compete with many CS majors in the Cornell CS department.

    Microsoft internship interview: it's quite a challenge I hear.

  • Anonymous
    August 11, 2005
    One discipline that is noticably absent from your list is design.
    http://www.microsoft.com/resources/design/

    It really should be a part of the "triad" of development you talk about. Leaving design to Dev, Test, and PM is a gamble. Sometimes you win (like with MSN Explorer), but more often than not, you lose.

    Also, a better, more recent book on Program Management is The Art of Project Management, just published by ex-MSFT PM Scott Berkun.
    http://tinyurl.com/7lyba

  • Anonymous
    August 11, 2005
    Design is an integral part of the product development process for office. I could not agree more!

    Not every aspect of the product requires product design skills (say the XML file format, SharePoint clustering) so when speaking in generalities about the process I do not generally include it. The designer referenced in the link you sent was hired into the Office team and spent a good part of his career working with us on Office :) I bet he would vouch for the critical role of design!

    If you want to be fully inclusive, then you would list: program management, development, testing, product design, usability, product planning, product managmement, product support, localization, and maybe even a bit of general management and administrative support. All of these are critical members of the team that it takes to bring a product like Microsoft Office to market.

    And incidently all of them are roles you can be hired for directly from college!

    Thanks for the pointer on the book. Project management is one aspect of program management but by no means the focus (particularly with respect to the focus of this blog). The role is definitely well described in the Cusumano book. I will certainly check out this book.

    --steven

  • Anonymous
    August 12, 2005
    Thanks for the response. I'd argue that even your SML file format needs to be designed, especially if it's an API you're release to developers. If it's going to be useful and understandable by developers, you need someone who understands the needs of these developers and how they think about file formats and APIs. Maybe the PM or the Dev knows this, but maybe they don't. From my time at MS, I've seen far too many projects go awry by PM, Dev, and Test getting too caught up in what's cool, or what's possible, rather than what's needed and what's useful. I think IntelliMenus is a pretty good example of this.

    I think Scott used the term "Project Management" for his book title since that's a more widely recognized and accepted concept. However, it's pretty much all about his 10 years of MS PM experience. Here's a review by a current MS PM:
    http://tinyurl.com/aw6x2

  • Anonymous
    August 17, 2005
    Dave, in Office PMs are expected to be able to design such things as file formats and APIs (and UI and user experiences). If they couldn't, they'd just be project managers. If the PM gets distracted by what is cool but not useful then they are just not a good PM. A "designer" is usually concerned more with the user experience and visuals, so they do not typically get involved in things that have no UI and they are often not very "technical" compared to PMs.

    Intellimenus was an attempt to do what we thought we were being asked by customers to do back in those days - control "bloat". Many of the problems with Intellimenus were known at the time but it was felt that the value of addessing the customer concern around bloat outweighed those issues. As an idea it has some merits, but in retrospect it wasn't really the right approach to address that problem.

  • Anonymous
    August 18, 2005
    The comment has been removed

  • Anonymous
    September 13, 2005
    Just a quick note, those who were crticizing MS for only hiring from ivy league schools are just lieing. My buddy from Michigan State just got back from an internship, and last time I checked MSU isn't Ivy leugue. If anything is true, it is that microsoft doesn't really care where you go to school. If you know what your doing and have a passion for being the best in software development you've got a better chance then a chaunce from Harvard.

    Either way, quick question, if MS doesn't scout at your school specificaly, can you travel to another school in your area and apply at their internship fair? I go to Wayne State University and could go to the internship fairs at University of Michigan or Michigan State, i just want to make sure its allowed.

    If you don't post replies on your blog, you can back chan. me by emailing AP0549 AT Wayne.edu (at = @, trying to ward off the spam bots).

  • Anonymous
    October 24, 2005
    Hello Steve,

    Read your blog, interested me a lot. I have cleared 3 phone interviews and I am not invited to Redmond for interview for a PM position.

    While i consider myself a passionate person in terms of software....I have a slight phobia of coding. Yes I do have a software engineering degree...and I can simplify all the complex thoughts via algorithms, but if someone asks me to write code (may it be 10 lines) I freeze, and i think my this attitude can make me lose the career oppurtunity at MS.

    I have been having this Coding Phobia since i started Software Engineering, I can eventually get over it but the first thought is always scary for reason that makes my hands n feet cold. Can you provide me some suggestions regaridng how to do good in the interview and get over this phobia?

    I do not want to lose the career oppurtunity due to this phobia.

    Sincerely
    SDS.

    PS - I am not sure if this is the right place to discuss.

  • Anonymous
    October 24, 2005
    Typo in the earlier post.

    I am NOW invited to Redmond (disregard NOT)

    -SDS

  • Anonymous
    February 13, 2006
    The censored elitist barometer of employment at MS is mensa level I.Q.
    Look at some (in)famous  MS almuni bloggers

    www.joelonsoftware.com
    www.wesnermoise.com
    www.sellsbrothers.com
    www.netcrucible.comweblog

    the list goes on...
    these are the sort of people who boast in solving very complex abstract problems in minutes and when these sort of people interview you, they will like to hire one of their own.
    You might be very passionate about software and wanting to bring changes into the world by software as a tool but dude superior intelligence is what gets you into MS !.

    Let me qoute Joel on his article "The Guerilla guide to interviewing" --->"If you have some idiot savant who happens to be very good at SQL programming at the moment but incapable(!?) of learning any other topic ,its a no hire"
    When i try to think about what sort of ppl does MS really want, i think the sort of ppl who will solve the prisoners puzzle (www.techinterview.org) in 5minutes in a tense room with 5 ppl drinking coffee looking at you

  • Anonymous
    March 21, 2006
    very informative site with lots of useful info

  • Anonymous
    May 29, 2009
    PingBack from http://paidsurveyshub.info/story.php?title=steven-sinofsky-s-microsoft-techtalk-do-you-have-to-be-a-computer

  • Anonymous
    June 15, 2009
    PingBack from http://debtsolutionsnow.info/story.php?id=9492