Home >
Are Coders Nice?
A few months ago, the team my husband works on was hiring a new developer, and I overheard my husband talking to a friend he was considering recommending for the position. I surprised myself by my gut reaction which was, "I don't care how good Steve thinks this guy's resume is, he's way too nice to be any good as a coder." Now, part of that reaction was probably the fact that I was working in a shop where nice people don't usually make it past the two-week trial period, but there's a part of me that can't quite get past my feeling that people who are too nice don't make good coders.
So let's turn to dictionary.com and look at their definition for nice. For simplicity, we'll go with the first one, "pleasing; agreeable; delightful." And here's where I think the crux of the issue is. It's not that coders can't be pleasing people, and I know loads who are delightful. Most of the coders I know have an amazing sense of humor and are very willing to help others. The problem is in the agreeable part. I don't think it's possible to be a good coder if you're excessively agreeable, and here's why:
Software Documentation Errors
If you're the type of person who reads software documentation as if it were divinely inspired or scientific fact (depending on your philosophical bent), then chances are that you are going to be stymied when you come across misleading or erroneous documentation for the language you are coding in. Software documentation is often written on software that's still in Beta, by people who have not used it that long (because it's new). It is, by necessity, their best understanding of the subject on the day. This means that, as developers, we need to be prepared to take documentation with a grain of salt, dive into the source code, and try things.
However, we also need to be prepared to have a healthy doubt as to our own conclusions as our understanding evolves. If you've never erroneously dubbed something a bug in a public forum, you haven't lived.
Lively Debate
I am a firm believer that talking about your understanding of key concepts helps clarify that understanding. Receiving feedback on your comments helps ensure that your understanding is correct. So, for me, part of being disagreeable is expecting people to disagree back, and being willing to either defend my position or accept that I was wrong. Obviously, there's a lot that we can learn as coders without ever discussing it with anyone, but I think as soon as you aspire to be better than average, you need to be prepared to discuss what you've learned with others of the level you aspire to be and let them expose your ignorance or genius. Venkatesh Rao calls the effect of getting better by pitting yourself against others of a similar level the Crucible Effect.
The Software itself
Each programming language/environment has certain things it does more easily and certain things that are hard. We don't usually have the option of switching languages just because a specific task is difficult in the language in front of us. Good coders will find a way to do the things that a language makes difficult. Really good coders will find ways to do things in a language that popular wisdom tell us are impossible. And to do this, you need to be able to tell the program "you will do this" when it disagrees and when everyone tells you there's no way to accomplish it.
The Fix
What all of these add up to is that we who aspire to be good coders often develop a scrappy, contentious attitude (you only have to look at the comments on previous entries on this Blog to see that). But I think that attitude stems from the innate perfectionism that a person needs to be a good coder, and I think that this perfectionism can be channeled to also allow us to improve our own characters. In the same way that we build example files to teach ourselves and others, we can practice striving to see the best in what others are saying, even as they disagree with us. I struggle with this myself, but as with coding techniques, I work every day to try to get better at it.




Facebook Application Development
As you say, coders should be pretty blunt, and they've gotta be prepared to take what they dish... both qualities that don't really work with the definition of "nice". I would say I'm pretty sensitive to others' feelings but I turn that off when I go to work so stuff can get done, and I think the world would be much more productive if others (non-coders) were expected to do that too...
You can still be internally condescending or a prick and be nice with others. Being nice with others also gets you more tips on how to improve your code.
This article erroneously assumes that developers must interact with other humans in the same way that they interact with their code. However, when was the last time a developer (with the exception of a hilarious "sudo make me a sandwhich" xkcd comic) order you to do something with an invocation of "sudo"? When was the last time that a developer communicated his/her schedule to you in the form of a "crontab" entry? I think we can differentiate between a monitor and a person, thank you very much.
I, for one, hope to work in an environment where the developers are both nice and incredibly competent. Not only are these not mutually exclusive, but I believe that a hostile or unfriendly workplace is harmful to productivity and that nice developers are more likely to be productive, to collaborate, and to solve the problems at hand more effectively. I hope to never end up at your workplace, where this is clearly not understood.
Michael, if this is how you apprach people in your own workplace, I suspect it's not as idyllic for those you work with as it is for you :). Possibly you may benefit from a more careful rereading.
Barbara Ehrenreich makes similar arguments in her book Bright-sided.
Can you please use "programmer" next time instead of "Coder"
i guess i'm lucky to work in an environment where the programmers are very smart, high achievers, and quite nice. in my experience niceness builds camaraderie and loyalty. but being agreeable is a different skill than coding, to be sure. it requires both motivation to treat others with respect, and the ability to filter your automatic responses to difficult situations into more socially appropriate ones.
although we're all very bright, i don't think i'm perfect and don't expect my colleagues to be either. i would much rather collaborate than compete, though i can also tenaciously wrangle a problem into a solution on my own too. sure, i could handle a condescending patch review, but why should that be the norm?
being nice is not orthogonal to being a good programmer. but the extent to which a company values niceness undoubtedly affects the extent to which developers work toward being nice. certainly, my company's culture which engenders respectful interactions does not have a negative impact on the caliber of talent that we attract.
Sarcastic and narcissistic is the way to go.
I think this very RIA blog referenced a Netflix case study:
http://tinyurl.com/y95ablj
A few entries ago. In this case study, Netflix refers to these "good coders" as the "brilliant jerk" syndrome (slide 34).
As the papers reads:
- "Some companies tolerated them"
- "For us, the cost to teamwork is too high".
I have worked in environments where there are very smart competent nice programmers, and environments with "brilliant jerks" (coders).
I think the problem goes deeper than attributing lack of social aptitudes to the fact that writing software is complicated and challenging.
I believe that the software industry has created a safe haven for individuals with social handicaps such as mild levels of autism and asperger syndrome.
what a lot of malarkey
When it comes to coding, a good developer *must* be a 24/7 ruthless mercenary and tireless warrior ready to take on anything, anytime.
Still, that doesn't mean you can't be nice in real life.
What I expect from another human being regardless of what exactly they do, is that he/she is as nice as it gets when it comes to interpersonal relationships and as ruthless bastard as it gets whent it comes to getting things done.
Part of me disagrees with you about this. I've started to learn a little bit of Java, and as I search for questions to my answers in the Java programmers forums I've come across a heck of a lot of negativity and rudeness. For me this is a bad thing. Berating people for posting questions, or berating the other posters, is not a way to help people. Frankly it has turned me off of Java. I know that it isn't fair to single out that particular language/community. I think that being nice when interacting with your fellow humans shouldn't be a disadvantage.
The other part of me recognizes that the qualities you describe are helpful in coding as Wired recently pointed out: http://www.wired.com/techbiz/people/magazine/17-10/ff_smartlist_sonne. However, unless you are diagnosed with asperger syndrome, I don't think that should prohibit you from having good social interaction skills. Articles like this just create an excuse for rude behavior.
My god this is an inane article. Take this as a slice of good advice... Just because an idea pops into your head doesn't mean it's a worthy message to share.
Hi, Nicholas;
Have you responded to the Question of the Week about what topics you would like to see?
Thanks;
Amy
You can be nice and diplomatically convey opinions and constructive criticism. Too agreeable can be a problem. To nice... never.
Great article. There is a time and place for being "nice", and at other times it is more effective to bring forth a different persona.
Mike