I ended up going to Google and not applying to Facebook. At the time, it was for pretty superficial reasons:
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.
"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."
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 ;).
Yeah I think this is an issue for many people at Google in that everyone that I know that has worked for them recently (5 past co-workers... not exactly a fair survey) has overall been positive but negative on feeling overqualified for the work they end up doing. Its probably a symptom of Google being able to load up on so many highly qualified people with a limited amount of high-end, brainy work.
I think it's true for the average Googler as in "wasn't a brand name superstar when they joined". You do usually need at least one solid win (= launched feature that's reasonably successful with users) working on somebody else's team before you get the autonomy to propose and pursue your own stuff - Google wants to make back their investment in you before you go off and pursue some crazy idea, and you usually need that sort of experience with the production infrastructure and internal data sources to have any chance of success. But 20% time exists even for Nooglers, and is a good way to get experience in parts of the company you wouldn't otherwise see, develop skills you wouldn't otherwise have, or prepare for a transfer if you don't like your initial team.
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.
Sebastian has a whole team and much more than a year!
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.
Seconded. 20% time is still real, if you ask/push for it. If your idea fits somewhere under the broad umbrella of your group's mandate, so much the better.
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.
+1 Thanks for sharing. Regarding the language of choice, I think there's some Scala, Erlang and other frameworks in the mix at either party. I think it depends on whether you're working on core products, or the duct tape that you mentioned. (Example, Twitter attracts both sides of the camp - Django and RoR). But regardless, with your skillset, I think you'll be happy with the challenges and intellectual stimulation at either place. It's ultimately about the cultural fit like you said. Congrats, and all the best on the new job!
I'm a Facebook engineer and I definitely feel that Facebook is willing to take those 5% chances. Heck, one of Facebook's mottos is "Be Bold".
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.