This is both a warning and a cry for help.
Just to give you a vague idea of who I am: I just graduated with a degree in computer science with honors at a decent school. I'm now working as a full stack web developer at a startup. I did two internships at large tech companies and a bit more mildly impressive work.
I'm realizing now that I made a lot of mistakes with my education and I want a change in direction. We all know that making mistakes is good, but sometimes you will make one misstep after the other without realizing until you're far from the right path. Being in school doesn't give you enough time to reflect and I was even afraid to do so out of fear of sounding naive. I'm guess I'm glad I'm having these realizations now, but I still lost out on critical time. My perspective won't apply to everyone (most programmers do seem genuinely content with their career, and that's ok with me), but on the off chance it might resonate with a few people, here goes:
1. Nobody cares that you work at a prestigious tech company that gives you ~cool benefits~. It's true that nobody cares about most of what other people do with their lives, but do not let Google/Microsoft/etc. sell you hard on the career. This was what drew me further into CS: I didn't know what I wanted to do with my life and these predatory companies convinced me on going towards a seemingly good-looking lifestyle. I should have looked around more instead of just holding onto the first thing that looked semi-decent. I know that "software engineer" is on the top of every top ten careers list and that you have reason to believe you are subject to the same statistics of what constitutes an enjoyable job as everyone else, but you really need to do more self-exploration than that. How in love with the field are YOU - not what your peers/family/friends (especially most of whom aren't in it) think it's cool that you can land a job at a well known place?
2. I hated my peers in undergrad and I hated working on projects with them. These projects were frighteningly representative of what work-life is. I always excused my misgivings with group work as something that would pass in the real world. Just because you graduate you won't magically enjoy their company or your work with them: your peers don't really "grow up" and the code doesn't get that much better. (Side note, ask yourself: do you really care about good code? Good code can be great to read, interesting, and make your job a hell of a lot easier, but is it really something you want to be remembered by? To structure your life around?) If you can't make friends in your classes, consider if you actually want to like them in the first place. I'll admit that being better at things so-called-nerds said they were really good at was entertaining but it's a terrible reason to be in this field.
3. If you like CS because it's "math with a practical/creative edge", application development will kill that wonder dead. If you worry at all when other programmers talk about programming just being an exercise in gluing libraries together, in a lot of ways it is. There is little intellectual satisfaction to be had from contorting bytes.
4. Learning new programming languages is extremely fun at first but exasperating and repetitive after a while.
5. I'm not really sure I need as much money as I'm making to be comfortable. At some point I just became addicted to comparing salaries at various companies/jobs, but it seems to be having very little impact on my life. I'll admit that my attitude towards this will probably change, but still.
6. If you have any misgivings about capitalism or being involved with a business at all, don't push those feelings aside. (The company I work for is mostly employee owned and I still hate it!)
7. If you get into a deep discussion about programming and you're surprised by how many things you know that you don't care about, really consider what that means.
8. If you are trying lots of CS electives in school and you're not really enjoying any of them, don't fall into the trap of thinking that you just haven't gone deep enough yet. Get domain knowledge in something else. Having /skills/ is nice but you probably want a (more complicated than just business logic) knowledge base to apply it to. Find issues you're actually passionate about and use programming to do cool things in that area. Take courses in something completely unrelated or something you don't think will be useful, it's better than clawing at nothing.
9. If you can't come up with an idea for an app because you can't stand the idea of making something so meaningless, just remember that you will be making someone else's trivial app.
10. Startup/tech company culture is vile. Entitlement, lack of compassion, materialism, and (surprisingly) anti-intellectualism is the norm.
11. If you think you can survive in the software industry by simply escaping into your other interests/friends/relationships: you can't. This was probably the biggest reason I didn't realize I had so many problems with software development: I was too distracted by the rest of my fairly enjoyable college life (except of course for the actual courses I took, almost all of which were CS electives). When you start working and work becomes most of what your life is, then you'll realize just how important it is to actually "do what you love". Love is not forced, and sticking around longer to see if love comes back rarely works. More is not going to fix things. Expand your horizons in every part of your life and don't take your unhappiness for granted.
As for me, I'm not sure exactly what I'm going to do to get out of this just yet, but I'm imagining that it means I should go to school in some capacity. If there was one thing I could tell every undergraduate CS major, it would be to double major in anything else and do as little CS as you feel you can get away with. There's so much more you can do. Don't be terrified of not getting a job, you're pretty much guaranteed to get one with that CS degree even if you weren't dedicated to it 100%.
I hope this gave perspective to someone, but any advice a wiser person could give me would be much appreciated.
However I must admit, this is what I love. I like CS because it's like 'math with a practical/creative edge', and the experience I've had working as a software developer at 3 companies so far has only confirmed to me that this is what it's all about. I tend to choose companies with interesting problems to solve, and that's what I enjoy doing.
I enjoy working with other developers, both at university and in industry, on projects, and collaborating on problem solving. There are many aspects of the startup culture that I've seen myself, or read about, that I don't like, but I don't feel like I have to work in that area. When I get deep into discussions about programming, I'm surprised how many things I do care about, and often surprised when I find out that some of my peers don't care about them. I don't care about the cool benefits, I just want to work with amazing people, on interesting projects, and earn enough to not worry, and from what I've seen, I don't think I'm going to have a problem with that.
Students should read this warning, but if you do, and it doesn't ring true with you, don't feel worried about 'burning out' or losing interest, keep doing what you love.