Monday, June 23, 2008

There's Nothing Micro about Microsoft

Hello everyone. Ah me. We live in Washington now! (State, that is.) We're happily ensconced in a nice rental home in Kirkland, and so far just about everything we hoped for from the move has happened -- we have less commute, cooler weather, a better school for our daughter, and my wife no longer has to work. And my new job at Microsoft is going very well so far, though I've actually been there less than a month -- I took May off to help our family settle in, and THANK GOODNESS, because moving is a LOT OF WORK even once you actually arrive!

But so far so good up here... I'm sitting in our living room looking out at the evening sky and the pine trees across the street, through the full-length windows and French door that front our house. It's beautiful up here.

I can't say too much in detail about what I'm working on, because Microsoft (like Google) is mighty touchy about confidential projects. But I can make some general observations after being back on the inside of the Borg for a few weeks. (I was amused to discover that they remembered me! I interned at Microsoft in 1988 and 1989, and I guess they gave me employee number 40775, because when I signed back up they gave me the same number back again. People were like, why are you 40775 rather than 263484? Microsoft's gotten BIG over the years....)

It's very curious how deep the not-invented-here goes at Microsoft. It seems to be partly historical -- Microsoft was such a winner-take-all company for all of the eighties and nineties, it sank deep into the marrow of the company. And it is partly reactionary -- the rest of the industry reacted so negatively to that aggressive attitude (antitrust suits, pitched legal battles with Apple and Sun, etc.) that it drove Microsoft even further into its own corner. I've got kids now, and I think a fair bit about sibling rivalry, and how kids (and adults, and nations) tend to define themselves in opposition to one another... sometimes your identity emerges through your interactions with your peers. That's definitely happened to Microsoft, and as a more than thirty-year-old company, it's going to change only slowly if at all.

Regardless, Microsoft really is its own technological world now. And this has its good points and bad points. Coming from the Java world, and from California where lots of my friends are vehemently anti-Microsoft, it's a bit bemusing to see it all with an outsider's eyes... plenty of my new colleagues have been here for decades, which is almost unimaginable to me. It's certainly part of my value here, that I've got recent experience with how things are on the Outside.

I can't be too specific, but there are quite a few areas where I feel like Microsoft's internal technical isolation is hindering them... particular tools that seem like a step backwards, or particular design problems where it seems like there just aren't quite enough people providing fresh ideas. The relative isolation of the Microsoft software stack can seem a bit... I don't know... lonely? The "us vs. them" thinking is hard to escape in the blogosphere, and it's such a polar choice -- either you're on Windows / .NET, or you're not. And if you are, you've got to pay to play -- at my last startup, we were a Linux and Java shop, partly because it got the job done and partly because it was free. (Though as one of my new cronies says, the people who won't pay aren't customers anyway, because how can you make a business out of non-paying customers? That's a very deep-seated belief in Microsoft-land, and you know, there's some truth to it.)

But on the flip side, there are some real advantages to owning all the code you could possibly need to run an entire industry of PCs. I've spent the last two months spinning up on LINQ, one of the coolest new features in C# 3.0. It stands for Language Integrated Query, and on the face of it it seems like syntactic sugar to let you write SQL-like code in C#. But it turns out that under the hood there's a lot more to it -- it's implemented via compiling language statements into expression data structures, that can then be rewritten, reparsed, and used to generate entirely different kinds of language output. It is very cool technology, very useful for creating domain-specific languages -- in fact, it's rather along the lines of my extensible language rant from a few months ago.

And it would not have been possible if Microsoft didn't completely own the C# and Visual Basic languages, and have the resources to come out with a new iteration of the language spec, and all the compilers and tools to support it, simply because they thought it was a good idea. Compared to the slowness of Java's evolution (how long has the closure spec been rattling around?), Microsoft's ownership is yielding real benefits to .NET programmers. (OK, so the closure spec is deeper and wider-reaching than C#'s lambda expressions, but nonetheless there are several intersecting features in C# 3.0 that are all needed to make LINQ work, and I don't see Java catching up very quickly.)

It's also pretty amazing to see the breadth of the expertise here -- my team happens to be pretty closely connected to Microsoft Research, which is teeming with world-class experts. If you look at the roster (Simon Peyton Jones, Don Syme, Erik Meijer, Galen Hunt, Nick Benton, Martin Abadi, Luca Cardelli... heck, search 'em yourself!), you'll see a whole lot of people who've driven the world of software forwards. Microsoft has a deep commitment to that goal, even if their not-invented-here, no-open-source mentality gets in the way sometimes. So it's exhilarating to be part of that mission.

Microsoft is a colossal company, and I'm fortunate that I've landed in a very ambitious and solidly supported team -- in fact, I can't think of any job I'd rather have in the industry. I'm feeling very lucky indeed, and I'm doing my best to get productive quickly -- this opportunity isn't going to come along again anytime soon!

And, that said, I'm obviously not doing very well on keeping to my blog schedule. Realistically this blog is going to slow down a bit, probably to more like once per month. Eventually -- once our team's incubation project goes public (knock on wood!) -- I'll hopefully have another blog on where I'll blog semi-officially about our technology. But this blog will be my personal property into the indefinite future. Stay tuned!