Pros
I mean the title in both the most positve and the most negative way possible (but not much in between.) It is mostly academic in its environment: most projects have the feel of research projects, and the primary measure of success in the company really seems to be participation with customers on high profile journal publications. I did not experience any budgetary pressure, which was nice. Socially, Nion is both a delightful and a difficult place. Most coworkers are both extremely competent and very friendly. Most of the company goes to lunch together daily. The remainder often eat together at the main facility. Work is generally interesting and widely varied. I worked on several hardware interfacing projects, primarily focused on CCD/CMOS camera devices, and explored Python-C++ bridges deeply in the process. Most of it has a scientific slant, which is nicer than working on an advertising webpage. The customer base is gold. These are many of the world's top electron microscope groups. They aren't often software experts, but they are extremely skilled operators, and give clear feedback on issues they're encountering. They are mostly very patient with bugs, which is good, because there is often no way to completely test software on a machine before shipping it to them.
Cons
Overall customer satisfaction is often a lower priority than doing things the way management wants them done (from the perspective of software). Management is extremely passive aggressive, and the social camaraderie at lunch can often become an uncomfortable work discussion. It takes a thick skin and a lot of forgiveness to be happy here. Despite coworkers being very friendly, people mostly won't stand up for one another when the boss gets ornery. A fair amount of throwing under the bus happens, but not vengefully - more simply out of ducking for cover when the boss is on a rampage. There is a rather large, rather organically grown code base that is quite fragile. I was frequently under uncomfortable pressure to fix problems that I introduced by fixing some other part of the code base. Integration tests, you say? There were none when I started. There are now a few, but by no means complete for the complexity of these systems. Unit tests will require monumental effort and time. The major downside of software I see at Nion is how much software serves a compensatory role. Much of the software is a hack to accomodate a hardware flaw, and a lot of confusion and finger pointing results. This mostly leads to nearly constant customer support calls and bug fixing, and little time for development of new features. Further, the tiny software team is completely fragmented, with each internal project typically only having a single developer working on it. Code review did not feel welcome - other programmers were friendly about it, but ultimately avoidant.