Pros
Atmosphere is informal. Projects are often gov't contracts that get extended or delayed for reasons outside the company's control. Most people get put on multiple projects. This is good -- it enables you to learn from a variety of situations. It's sort of against company culture to directly pressure you. You won't be forced to work a certain way as long as you can juggle your tasks at the slow & steady pace that's expected of you.
We develop primarily on Windows, which can be awkward compared to Unix-like systems, but we do keep up with developments in software. We don't develop in a cave.
Cons
Going hand-in-hand with that atmosphere, management style is passive and laissez faire. This is a double-edged sword. If you get on a project with management that's interested in what you're doing, the job can be fun and educational. If not, you can waste a lot of time and be quite lonely. Oftentimes I'm told that things will be happening 'very soon' and then wait months before work begins.
I've never had an in-person code review. Some of my tasks are reviewed more thoroughly than others. Some of it is barely looked at. Again, this varies by whom I work with; some teams are quite good about feedback.
The pay is relatively low. They're honest about this up front.