I feel this way sometimes too, despite having a traditional CS degree and being in the software industry my entire professional life. Apparently impostor syndrome is more common than we think.
Personally I've come to believe there are very few people who "fit like a glove", and everyone else has varying degrees of this.
Edit: On rereading this it might appear that I am trying to diminish/dismiss your experiences. I apologize if it came across that way - my intention was more to share that I've heard this same sentiment for different reasons from many different people.
It is usually just your mind playing tricks on you; there is a delta between your internal picture of what a "real" programmer (or senior manager, or whatever position) looks like and your internal image of yourself.
One solution is to duck type yourself until the feeling goes away. Another is to start to recognize that some of your internal definitions might not be shared by others.
I'll leave it as homework to decide which internal definitions matter the most here.
I definitely feel like I’m able to bring significant value, and I’m on a team where almost half of us have masters degrees in CS, while I have just a BA in math and a couple years clocked in grad school (math again).
I tell you what, though: I live for those times when I can make something work easily because I’m able to leverage my math background. It certainly makes understanding recursion fairly easy (many math definitions are recursive), and my graph theory courses help on occasion. I was once even able to help solve a problem that involved calculating the area of a general polygon specified by coordinates, which nobody on the team at the time really knew how to approach.
> Five years later I'm a Senior Software Engineer
> hoping to upgrade to principle
> Sometimes I suddenly feel like a fraud
You're not alone. Without a broad and rigorous education, it's hard to imagine being anything other than an advanced journeyman after only five years.
I also own code-bases simply because no one else was willing to or interested in doing so. Many times I've been out of my depth, but I've surrounded myself with an incredible team. I've found that in conversations where I was totally out my depth, I was able to contribute simply by asking basic questions or acting as a rubber duck.
Maybe Principle Engineer is a little but of a stretch I'll admit. But I'll still shoot for it and if I don't get it this year, it'll happen next year or the year after that. That's how I made senior after all, and probably why I find myself in roles like interim manager presently.
While having a CS degree does not hurt it is probably on a bottom of things one needs to be a good programmer.
Sometimes I suddenly feel like a fraud, especially when I realize I'm in a meeting where everyone in the room has a CS degree or higher, but overall I feel like I bring a lot of value to what we do and most of all, I really love doing it.
I remember anonymously asking on Quora if people thought I was too old to learn how to program. The amount of support and stories that were shared with me were positively overwhelming. Probably the best answer I received was, "do you enjoy doing this thing?, if so, the answer is you should just do it."