I hope that this is the right place to ask this question. I've only used SO for programming questions so far.
Update: As per the feedback comment, to clarify, I am not asking a general "What should I do?" question. Given the situation outlined below, where I am explaining the difficulties I have with a coworker's anger management issues making my work unduly difficult, I would like to know whether these difficulties are so severe that I should leave and seek a new job, despite my reasons stated for wanting to stick around. So literally "Should I stay or should I go?" That is, are these difficulties insurmountable, or am I overreacting, meaning I should accept this as a challenge and just do my best despite the difficulties? I can not see any solution to the problems by my sticking around, other than simply doing my best. But maybe others will see a solution where I fail to.
I am a senior c# developer working in a very small company. (Only two developers.) I have been here about 9 months, while the other, whom I shall henceforth refer to as my colleague, has been here for about three years. He is my immediate and only senior (apart from the company director who isn't a developer) - every line of code I write is reviewed by him. He also reviews every decision I make, and he sits right next to me. Henceforth I'll also refer to the company director (and owner) as "the boss".
My colleague has OCD, is a workaholic, and tends to lose his temper every day. When others we have worked with externally don't meet his stringent and often unrealistic expectations, he takes it personally. He takes a slow response as a personal attack, even when it obviously isn't so. He sends totally unprofessional, angry and sarcastic emails, sometimes resorting to personal attacks on individuals while copying several others, and often alienates them, risking destroying the business relationship completely.
The latest angry mail nearly destroyed our relationship with the electronic banking head of a major bank in this country. To save the relationship, I have been tasked by our boss with handling all correspondence with them from now on. We (myself and the boss) also had a conference call regarding outstanding issues with that bank, which was difficult as I am not familiar with all the systems and services relevant to my colleague's questions (going back a year).
Earlier on today, I tried to approach my colleague after the call, to ask him some questions. He mumbled something unintelligible. I have a meeting at the bank in two days, to find the answers regarding issues we have with their account CDV algorithm. When I asked him about this a few minutes ago, his response was "Shhh". It's OK, I can read his code, but dealing with the man is becoming increasingly difficult, and I have to deal with him every day.
In addition to the extra responsibilities, I still have my development tasks and deadlines. My deadlines don't move.
It seems no use speaking to our boss, who is hardly ever here, and very close to my colleague. (They studied together and go back many years.) The bottom line is that he will lose money if my colleague messes up business relationships, so he's content to push the problems onto me. He tells me that I must see this as a challenge and step up.
However, I am becoming extremely uncomfortable working with these people. Today I dare not even ask him to review some code so that I can commit it to source control, for fear of a violent retaliation.
If I believed in karma, which I do not as an atheist and skeptic, I'd say I was getting my just deserts. For 7 years I was a methamphetamine addict. I burned a lot of bridges in my active addiction, and left too many jobs too soon. This means my resume looks bad - "job hopping" as they call it. I really need to stay in one job for a long time, but being in this position, caused by the instability and substantial anger management issues of my colleague, is making me so uncomfortable, it is effecting my sleep and my family life. I have enough problems to deal with in my personal life, and another one caused by a coworker is quite unnecessary.
I like my colleague as a person, and I can often see the source of his anger; but his responses to certain situations seem many times exaggerated. So I empathize with him, but that doesn't make his behaviour acceptable, especially when it affects everybody around him. Back in the day, I was considerably less aggressive and temperamental even when I was high on meth and awake for several consecutive days. For years I was always notoriously bad at communication so I find it extremely ironic that I have to communicate with 3rd parties rather than him.
What should I do? They pay me well but this isn't about money. Should I take my boss's advice and see this as a "challenge", or get the hell out of here? Another issue - since the company is so small (5 employees), I won't be able to seek alternate employment without being noticed. (I found out after I started that the boss has fired the last 3 developers before me.)