Before you write off your company and teammates, get over your own ego and learn how to learn from others.
A defining characteristics of rockstars is that they know what they know and they know what they don't know, and they are honest with others about the boundary. An idiot is not someone who says "I don't know how to X" - it's someone who says "I know how to X" but really doesn't.
Here is how I learn from people smarter or more experienced than me:
1. I look at a problem someone else is working on, and ask myself "how would I solve this?".
2. Then ask myself "why would I solve it the way that I did?". Is it because it's the only solution I could think of? Or is it because there were multiple approaches but the one I chose was best for reasons and assumptions X, Y, and Z. The important thing here is to be honest and rigorous about why I made the decisions I did - no settling for "just because"
3. Then I look at what the other person did. If it's identical to what I would have done, I give myself a cookie! If it's not identical, then I spend time to answer the following questions:
- How is their solution different from mine
- Does each difference matter? If so, how/why?
- For each difference, why is their choice better than mine?
4. Now this is the important step - I then talk to the person. And instead of giving them an open-ended "why did you do solve this problem in this way", I describe to them what I would have done and ask them the same questions from the previous step. These are small, simple, efficient questions so you're not wasting the other persons time, but by confirming your own answers, you are reinforcing your ability to learn and are avoiding living in ignorance.
5. I observe the other persons reaction to this interaction. The vast majority of professionals I have interacted with have at the very least been willing to help me in this way because they understood that teaching a teammate is overall a net positive to the team. And it should increase their confidence in the quality of the work that I do on my own.
If the person refuses to make time to even answer simple specific questions or is actively hostile towards the very act of me asking these types of questions, I write them off as assholes and move onto someone else.
Now I really suspect that most of your team will not be assholes. But even if they are, assuming you're being compensated well enough to tolerate them, all you need is one non-asshole who is "better" than you to learn from and bam - you have a mentor.
If literally everyone is an asshole (per the definition earlier), then I look at how much I'm being compensated (cash, equity, status, pedigree) and will either get out or check out.
But the important first step is making an effort to become better, and using the other people you work with as resources. It's okay to do this stuff offline - if your team is having a high-level design session, don't open your fool mouth to ask "why don't we just write all this in a single function" and waste everyones time. But if that's really the best solution you could come up with, pull aside one of the other people and confess "I would have done this all as a single function - why is that wrong and why did you break things out in this way?"
A defining characteristics of rockstars is that they know what they know and they know what they don't know, and they are honest with others about the boundary. An idiot is not someone who says "I don't know how to X" - it's someone who says "I know how to X" but really doesn't.
Here is how I learn from people smarter or more experienced than me:
1. I look at a problem someone else is working on, and ask myself "how would I solve this?".
2. Then ask myself "why would I solve it the way that I did?". Is it because it's the only solution I could think of? Or is it because there were multiple approaches but the one I chose was best for reasons and assumptions X, Y, and Z. The important thing here is to be honest and rigorous about why I made the decisions I did - no settling for "just because"
3. Then I look at what the other person did. If it's identical to what I would have done, I give myself a cookie! If it's not identical, then I spend time to answer the following questions: - How is their solution different from mine - Does each difference matter? If so, how/why? - For each difference, why is their choice better than mine?
4. Now this is the important step - I then talk to the person. And instead of giving them an open-ended "why did you do solve this problem in this way", I describe to them what I would have done and ask them the same questions from the previous step. These are small, simple, efficient questions so you're not wasting the other persons time, but by confirming your own answers, you are reinforcing your ability to learn and are avoiding living in ignorance.
5. I observe the other persons reaction to this interaction. The vast majority of professionals I have interacted with have at the very least been willing to help me in this way because they understood that teaching a teammate is overall a net positive to the team. And it should increase their confidence in the quality of the work that I do on my own.
If the person refuses to make time to even answer simple specific questions or is actively hostile towards the very act of me asking these types of questions, I write them off as assholes and move onto someone else.
Now I really suspect that most of your team will not be assholes. But even if they are, assuming you're being compensated well enough to tolerate them, all you need is one non-asshole who is "better" than you to learn from and bam - you have a mentor.
If literally everyone is an asshole (per the definition earlier), then I look at how much I'm being compensated (cash, equity, status, pedigree) and will either get out or check out.
But the important first step is making an effort to become better, and using the other people you work with as resources. It's okay to do this stuff offline - if your team is having a high-level design session, don't open your fool mouth to ask "why don't we just write all this in a single function" and waste everyones time. But if that's really the best solution you could come up with, pull aside one of the other people and confess "I would have done this all as a single function - why is that wrong and why did you break things out in this way?"