A little background: I have been out of undergraduate college for a little under a year now. I work at a decent sized corporation as a software engineer. I am well paid and have good benefits.
My concern is I have not been working this job long at all and I feel as though it is completely a technical dead end. I am not someone who has ever struggled with learning new things in the field of computer science or software engineering. I can pick up most programming languages in a week (not just imperative or OO, but functional and logic language as well). I have never touched an API I could not learn in a weekend. It has been over a decade since I can remember looking at source code and not being able to figure out what it is doing.
My problem arises that at work, I feel like I have to consciously not use my technical knowledge to ever have any hope of fitting in. My workplace does have standards. I don't really have much of a problem with the coding standard, nor do I have a problem with a documentation standard for software. I think some of the things in those standards are unfathomably stupid, but they really aren't deal breakers. Some of the business process standards seem silly to me, but I go along with them because I am paid to. I'm not naive enough to believe that I will somehow change the business processes of a large corporation.
The thing is, it seems like any sort of technical improvement is actively discouraged. The examples are so scattered and numerous, it hurts to even think about, but here are a few examples:
If someone else can't immediately understand what I am doing, it's automatically out. Even if I do a phenomenal job of explaining it (not my words), it's probably going to be forced out.
Writing portable (i.e. code that can move from one architecture to another) is actively discouraged. I could speculate as to why, but I really have no idea why.
Using a standard set of functions to validate user input is completely inadmissible. I have actually been made to duplicate the same logic hundreds of times across a code base rather than use a single function to encapsulate it.
A coworker was once told to decouple his software from the mathematical concept of pi. It involved mathematics in spherical coordinates. He was not successful in fulfilling this request.
Trying to identify problems with software architecture decisions ends up with me getting treated like a heretic. Keep in mind this isn't the new guy refactoring the 6 million line of code base that started while he was in diapers. It's trying to suggest improvements to make everyone's life easier while developing new software. This resulted in the 'not your job' speech at least once in front of a room of 20 other engineers.
I feel like this career is absolute technical dead end. As in, if I never learned something new for the rest of my life, no one would ever notice. At this point, I have completely given up on trying to create anything of value. No matter how stupid of a request comes across my desk, unless it is not simply not possible I just go along with it. The only thing keeping me at my job is the paycheck and the location.
I could go on, but I would just like to get to my real question: Is all software engineering like this? I'm pretty young, so I could easily change careers. I haven't quite yet strapped on the life preserver to jump ship, but I would rather make a decision now than just become completely disillusioned with what I do.
What are my options here?