At the extremely basic level, there are basically two good qualities that each programmer should strive for: programming skill and employee skill.
Programming skill is basically the ability to write good, solid, performant, maintainable, and all-the-other-desireable-code-adjectives code. This is what coders tend to spend their time harping on and debating about and reading about.
Employee skill is the ability to be a good employee and coworker. This means being responsive, being able to communicate well, hitting deadlines, being open to feedback, being able to explain complex things clearly, stuff like that.
An extreme example
Picture two people:
Rodrigo is an MIT graduate who writes compilers in his spare time. He is a core contributor to Haskell and wrote a few very well known Python packages. He can generally write very solid code that’s readable and handles edge cases beautifully. However, he takes days to answer emails, he rarely picks up his phone, he doesn’t seem to have much of an understanding of the importance of deadlines, he does things his own way, and you can’t get a clear thought out of him without rambling incoherence surrounding it.
Gabriella isn’t a very good coder. Her code is obviously written by an amateur. She takes 30 lines to write what should be written in 15 or 20, she introduces bugs that QA has to spend their time on, and she doesn’t really grasp the concept of writing code that performs well–“if it works, it works!”. However, she’s incredibly responsive–she answers emails within minutes and never misses a call, she is a great communicator and is able to explain complex technical issues quite clearly to clients, she has never missed a deadline, she is constantly looking for feedback to improve her work, and she’s an easy person to talk to.
So really think about it. Which would you really rather work with on a day to day basis?
What really matters?
In my experience, a programmer would rather work with Rodrigo, and a manager would rather work with Gabriella.
This makes some sense–after all, programmers are the ones who would have to deal with crappy code, and managers are the ones who would have to deal with missed deadlines and crappy team communication, so we all want the person who causes us the least amount of pain.
However, the point is that managers are the people you need to impress to get jobs and promotions and raises and pats on the back, so in this scenario, Gabriella comes out way ahead. And I’ve seen it happen many times–programmers who are great employees but not great coders move to the top while the great coders but poor communicators stay on the bottom.
Despite what we as programmers like to think, coding skill is not what really matters if you want to find success in a job, or at least in many jobs. Being a good employee is at least as important, sometimes more.