I skipped the CS degree, but I'm working as a programmer. It's a federal gig and I make systems that help count fish. I mostly work on the system that people report how much fish they caught and where. It's fun work, with a good team and it pays pretty well.
I don't think there are any cons to a CS degree, but there is a certain level of degree snobbery that I've observed - fancier schools (MIT, Stanford, CMU) are weighted much more heavily than everything else. That said, only one of the people I work with has a CS degree, and only one of the people I work with has a degree from a fancy school.
When we hire, we look for (insofar as the federal hiring process allows) technical ability, logical organization and most importantly the ability and willingness to learn new things. Even though we're mostly riding herd on a suite of CRUD apps, an OLTP system and a data warehouse, we generally are doing something new - that is something that we've never done before. The novelty makes constant learning part of the job. It's also pretty important to learn from our mistakes - we all make them, but we try not to make the same mistake twice.
There is also a big difference between CS degrees and the practice of programming. CS is typically more the study of algorithms and how they compare. It can also touch on computing paradigms, like how operating systems should best be organized. I've also seen CS work that focuses more on the human computer interaction. CS tries its best to emphasize the science, but it balances it with basically being specialized abstract math.
Programming is writing clear instructions to a computer to do something useful for someone. Typically with an eye towards making money, saving time, or in my field, complying with regulations. Knowing CS concepts is useful, particularly which data structures match which problem, but it isn't really necessary for 80% of what programmers actually do.
I mean, the biggest skill is reading and applying E36 M3ty docs (apache, I'm looking at you - technically correct, complete and useless) and understanding that you will only be working with broken programs (because you haven't finished them yet, you know).
Anyway, ping away if you've got questions, I can rattle on about programming all day. I tend to like the engineering end of it - it's one thing to make a program, it's quite another to make a maintainable program with the infrastructure to keep it running year after year.