Pros
Most people are smart, lots of vacation days, lots of perks, good food, many interesting distractions like guest speakers, nap pods, good culture. Pay is decent, but not as good as elsewhere.
Cons
I'm used to startup culture, and I had a serious culture shock coming to Google. Maybe it varies somewhat by team, but from my vantage point, engineering seemed very bloated and bureaucratic. There is an obscenely long and restrictive "style guide" of programming rules that must be followed and company-wide banned language features that makes coding much less productive than I'm used to. Code reviews sometimes become bickerfests and can drag on for weeks or months. The allocation of engineers to teams is awful - my recruiter basically lied about what I would be working on, when I arrived I was assigned to a team and project that I had no interest in whatsoever, and there was nothing I could do about it except suck it up until I could leave. My coworkers were extremely risk-averse and were far more concerned about breaking something that already worked than about making progress. Also the culture is biased towards "perfect" engineering solutions, and just hacking to get something done is highly frowned upon. This isn't always bad, and you can learn good programming practices and discipline, but unfortunately it just isn't always practical in the real world of deadlines and needing to make progress. The worst part of all is that I never felt like my work mattered anyway to the success of the company. I worked on various projects that my manager assigned (there wasn't much discretion in choosing things to work on, and the vaunted 20% time is just hype), and my manager had a lot of "pet projects" that he wanted done but didn't really have any great justification for why they should be done at all. Anyway Google is a big company and managers and teams vary in quality. I'm sure there are plenty of people who are much happier than me, but I also think my situation is hardly unique.