I'm having some trouble dealing with a talented, but difficult & overly-critical coworker, and could really use some advice.
I have worked with -- lets call him "John" -- for a little over a year on a very small engineering team. He joined the team about a half year prior to me.
John is one of the most intelligent engineers I have ever met, and has very strong technical skills, however socially he can be quite abrasive and blunt/rude -- not only to me, but to other employees as well. I know this is the case because I have witnessed it, and my manager has even discussed with me John's abrassiveness in the past, telling me that John is "working on it".
In contrast, I am not nearly as skillful or quick of an engineer as John, however (at the expense of tooting my own horn) feel I have great soft skills, and always try to create a supportive and positive environment for myself and my coworkers. I like being around people who are happy and supportive of one another while we make cool things.
One point of contention between us is that John comes from a very strong CS background, with a heavy understanding of algorithms and the complete stack. I'm on the opposite end, from a mostly-design background, and my undergrad, while programming-focused, was comparable to a 4 year web-dev bootcamp. More broad than deep. We're both working together on a handful of fairly complex web applications.
Most of John's abrasiveness comes in the form of bluntness, snide, or dismissiveness. because he understands a particular problem, whether that be algorithm or api or what-have-you, he acts like it should be easy/trivial for everyone. He is very critical during my code reviews, and while not pointing out stylistic differences (we have that covered with linter rules), he just nitpicks the crap out of my work. All the way down to the point on micro-optimizations of extreme edgecases that are just not relevant for the web app we are building.
Conversely, if I try to critique his code with the same granularity, he writes my comments off as "unnecessary", "pre-mature optiizations" or some other handy-wavy "I know more than you" type comment.
I've tried for a long time to not let this bother me, but it is. We recently hired a third engineer to our team (lets call him Mike), who is equally as sharp as John, but fortunately not as abrasive. But now I feel like the odd one out. The two are/were friends prior to Mike joining, and both are way more lenient on each others code reviews than on mine. Frankly I feel like im being picked on, these two guys are friends and are way harsher on my work than each others. They will contradict me in meetings with our manager/other departments, and make me look bad, but never do it to each other. They will implement features and practices without consulting me, that I don't understand as they are more hardcore about CS, and that makes me feel more confused with the product.
I know im a good engineer because all my performance reviews are glowing, but my coworkers are really turning this from something that excited me in the mornings into something I dread.
What can I do to restore some equality and balance to my team?