Pros
Microsoft offers excellent pay for relatively inexperienced developers. Even as a junior developer I was given responsibility, but I always had a mentor to aid me when I didn't know what to do. I shared an office with another developer, but I can't think of any engineering positions that had cubicles or open floor spots. There are many training sessions occurring and career progression seemed like a very formalised system - it's easy to see what you need to do to advance. Self-evaluation and goal setting is encouraged by managers. These goals and evaluations are used when determining bonuses or career progression.
Cons
Some of the internal systems seemed a little archaic. Internally, open source software, libraries or tools were viewed as hostile or at least with suspicion. I needed legal approval to use jQuery. My development computer was slow, even if I had a pair of nice monitors. 1 GB of RAM was terrible! A few of the employees seemed somewhat uninterested in their work - it was definitely a day job for them. Benefits like leave are tied to how long one has been an employee. Setting up an environment was not documented well in my team, and it was common for existing employees to not be able to help with this.