1. I didn't want to code PHP and probably would have to at Facebook, while Google's frontends are in C++, Java, and some Python.
2. I didn't want to work for Mark Zuckerburg.
3. If I wanted to do social networking, I'd much rather work for myself than for a big company.
After almost 4 years at Google, and having met several Facebookers here in Silicon Valley, I'd say there're a few major cultural differences though:
1. Facebook thrives on "Move fast and break things", while Google thrives on "Do the impossible". You will likely pump out features and launch things much more quickly at Facebook than at Google. However, many of those features will just be incremental tweaks on what's already there. Google's one of the few places where you can say "I have an idea that has a 5% chance of success, will take a year to investigate, but will radically change the world if it succeeds" and get buy-in from both management and your peers.
2. A while back, I read a comment here that divided the programming population into 3 groups. Developers focus on getting useful shit done, and will resort to duct tape and chicken wire if they need to. Engineers focus on scalable, maintainable, beautiful solutions, at the expense of time-to-market if necessary. Computer scientists focus interesting algorithms and pushing the state of the art forwards, regardless of usefulness. Facebook seems to be a largely developer-driven company (with some engineers backing them up in infrastructure), while Google usually has mixed teams of engineers and computer scientists.
3. You will likely learn more about technology at Google. The hybrid approach to research at Google means that you're frequently working with Ph.Ds at the very top of their fields, doing absolutely fascinating, science fiction research. You will likely learn more about the market and the realities of shipping software quickly under deadlines at Facebook.
4. Overall, I'd say that Facebook's market strategy is to use speed to move into markets before anyone else does, and then hold them through network effects and constant innovation. Google's market strategy is to use smarts & persistence to get into markets that nobody else can enter, and then hold them by holding onto the only talent that can produce a working system with products of that complexity. Both cultures are highly optimized for these strategies. Facebook tries to hire fast, driven engineers, work them hard, and take away any roadblocks or distractions to shipping new features. Google tries to hire either really smart, curious young engineers or world-leaders in their fields, put them together, and give them the freedom to work on world-changing problems. Google IMHO treats their employees slightly better because their market strategy is more dependent upon retaining employees.
For me, I'd already worked in startups before, so I'd done the "toss together a pile of hacks to get to market before we run out of funding" dance before and wanted to try something new. No regrets at all - I've learned a ton at Google, and it's probably opened up markets that I wouldn't be able to play in before if I choose to go found another company. Right now, I'm finding that the number of toys and smart people helping out within the Googleplex makes it more efficient to try the intrapreneurship thing, though.
Is this really true for the average Googler? Honest question.
From what I hear from friends working there, superstars like Peter Norvig or Sebastian Thrun may get a year(EDIT or more! see comment below) to work on self driving cars or massive neural networks doing computer vision etc, but a lot of developers just fix production bugs on Gmail or Google Plus or whatever, and implement incremental features decided by their managers and don't really have the option to work on the cutting edge projects, especially if you aren't working in the Mountain View office.
(Not to challenge the rest of your points, they also tell me Google is a good place to work, but Sebastian Thrun might be able to pull off working on self driving cars even at Facebook.)
Fwiw, if I had to select between FB and Google, I'd go with Google (I have some superficial reasons not to work for FB, mainly because I don't want to do 'social networking'), but once in I'd do everything I could to change teams to one of these world changing groups ;).
I've got pretty much complete freedom to work on what I want as long as it's related to Search and will benefit the company if it succeeds. I came into Google with some minor name recognition in the startup & Haskell communities (I wrote a top Haskell tutorial and a blog about my experiences founding a failed startup) but no world-changing accomplishments, and between then and getting my current project I contributed to 4 major "wins" in search (Search Options, moving the individual property searches to www.google.com, the visual redesign of 2010, and the Authorship program), plus some pinch-hitting on the Google+ and Doodle teams.
I think this type of freedom does differ among departments. G+, Docs, and Android are very command-and-control, with somebody at the top deciding exactly which features everyone will be working on and relatively little individual discretion for engineers. Research is the complete opposite end of the spectrum - usually researchers are brought into Research, and then they keep doing their specialty but with more data available. Search, Chrome, YouTube, GMail, and Maps all give engineers a large amount of discretion in proposing projects from the ground up and then working on them.
But an average Googler gets their 20% time, plus a real chance to pitch for more resources. The (relatively flat) management chain is very open to great ideas regardless of where they come from, and willing to invest in them if they're sufficiently good. Mind you that bar isn't met all that often, but it does happen with some regularity.
I wouldn't go to Google for the sole purpose of pursuing your own idea there, but you should feel confident that if you have a great one, you'll be given a chance to make a case for it.
This is from the perspective of a Seattle Google employee, so I don't think location is an issue.
I have to disagree a little with one of the earlier points, though. Through start-up acquisitions, Google is getting a lot more groups with the developer/hacker mindset. Those groups tend to keep to themselves and rail against Google's slow pace, and often eventually quit. Google could learn from that mentality, but equally those developers could learn from Google's methodical approach. In my (limited) experience Google could do much better at integrating newly acquired start-up teams into the overall corporate culture and development philosophy.
(Disclaimer: I've been acquired, and so far, retained!)
of course. sorry that was sloppy writing on my part. Edited.
"This is from the perspective of a Seattle Google employee, so I don't think location is an issue."
Oh I was thinking more Bangalore or Buenos Aires, not Seattle vs Mountain View (though I keep hearing that the really cool projects are run out of MV, with the occasional exception like the V8 work)
The real key to doing such work might be "become a superstar and do cutting edge work" ;-) . Then the fact that you work at Google is just a detail.
I'm not sure how this sentence is related to the previous sentence; are you associating django and/or ruby on rails with duct tape / "core" products ?
Google is overwhelmingly C++/Java/Python, but there are outliers (especially among acquisitions). I can't comment as to Facebook's mix.
As an intern, I started a project on my second day at a Hackathon that had absolutely nothing to do with my assigned team. I ended up devoting the second half of my internship to that project and by the end of the year I took an offer as a full-time engineer at Facebook, still working on that same project that I had kicked off on my second day.
I'm not here to say Facebook is way better than Google; I think they're both amazing companies. But the idea that Facebook isn't willing to take crazy chances definitely contradicts my experience at the company.