Pros
1. Important, interesting problems to work on. NVIDIA at its core is a company focused on making faster computers. That's a deep and broad mission that gives you room to work on a huge variety of specialities. Furthermore, you are helping move the state of the art forward, and contributing to a lot of deeply important solutions: CUDA is being used to research cancer and HIV; to implement AI (artificial intelligence); and much more than I can list here. This really is the center of a lot of incredibly important work, and you can feel the energy and excitement from that. 2. Competent, accomplished colleagues: you can easily find experts in various fields, who are very good at what they do. And you can learn some very advanced, cutting edge things from them, and well as lore and history of why things work as they do. 3. The company is getting large, but so far it is still small enough that you can make a real difference. And if you do, you'll be recognized and appreciated. 4. Polite, amiable culture. More smiling than frowning in most meetings, and lots of people really enjoy what they do, and enjoy working with you. Definitely one of the nicest, most friendly places I've worked. There is technical and political conflict, of course, but not the sort that leads to engineers getting stressed out (except for the resulting project schedules--see Cons, item 2, below. heh). 4. There are lots of projects, and they change quickly, too. This is also a Con, though. :) 5. There is a formal Technical career track, as well as a Management career track. This allows you to progress and move up, without transferring over into management, if you like.
Cons
1. Many of those colleagues are too overbooked to spend much time with you. 2. Software estimation is an elusive art, here and probably everywhere. This can easily lead to working a lot of overtime, in order to meet an unrealistic schedule. 3. The company does not, in its heart, believe that there is significant value in writing down documentation on how either the chip, or the software drivers are designed. Much of the chip interface, rather than being in a datasheet-style documentation, is implicitly documented in the driver (and in bug reports). The driver was written by software engineers who have a close email and personal links with the hardware engineers who wrote various parts of the chip. Everyone else has to suffer along with second-level information. 4. Plans and projects change quickly, and often result in, "can you please get this done in a few weeks? You can, right? Great-thanks-good-luck". :) 5. Despite some recent improvements, the next chip decisions are still too strongly influenced by the engineers who happen to be implementing it in hardware.