why are programmers arrogant? perception or warranted?

Running a company of 30+ employees with account executives, designers, sales people, support, operations, programmers, execs, etc, it is very apparent that every role is different. Even if the same person moves from one role to another, their attitude quickly can be morphed by their new role.

Every group has it’s stereotypical achilles heal, but today I’d like to talk about the perception of the “arrogant programmer.” To wit; how about a readme file that starts:

  • edit your bash file to alias /your/project/file/path to the download
  • add the package to your path.

Baroo? Bash file? Path? Which friggin’ path? I’ll get back to that. (But don’t worry, the answer is definitely “no” that doesn’t make sense to an experienced programmer either, except at a high level. More on that at the end.)

Given I started the company as a programmer who learned to sell, as opposed to a salesman who learned to code or a designer who learned to code, I suspect I have a few swords to fall on myself in the process. Yet first let us consider what others say about the perception of programmers being arrogant, earned or unearned, as a whole.

One poster on Yahoo Answers asks

Why are so many programmers arrogant?

I seriously don’t get it. I am a programmer myself, but whenever I’m having an issue with my code and need help and enter an IRC help channel, everyone is so rude and just acts like if I don’t know the answer to my question already, I’m stupid… the people are always so mean and aren’t there to help but rather to show off their alleged knowledge.

And a few excerpts from the answers:

It seems that many programmers have a hard time with interpersonal skills… Because their lives lack a significant amount of human social interaction [something that makes our lives pleasurable], they derive their pleasure by feeling superior over others

And…

There is a certain elitism amongst programmers, it’s probably knowing that they understand something a lot of other people don’t.

OK, Yahoo answers isn’t a great source for anything. So let’s consider this more reasoned post by Jay Fields:

At SpeakerConf 2009, one of the speaker’s wives asked me: Why is it that most speakers are confident, and some are simply arrogant. The question was also in the context of “software is nerdy, how can you speakers be so cocky”. I pondered for a minute and replied: When no one knows what’s “correct”, people with confidence generally win the discussion….

As I’ve said before, we’re still figuring this stuff out. I constantly try to improve my processes for delivering software. I share those processes via speaking and blogging. However, I’m definitely aware that I could be doing it entirely wrong.

Emphasis added. And to take it a step further, consider the three modes a programmer goes through by John Byrd.

All programmers of any competence go through three modes of professional development: an Arrogant mode, a Sponge mode, and a Mentor mode.

All good game programmers are born into Arrogant mode. An Arrogant programmer believes that he is personally capable of writing the smallest, the fastest, the “best” code possible, and that other programmers don’t have the depth of understanding that an Arrogant programmer does. This extreme self-confidence is the fundamental motivator for the Arrogant programmer to produce high-quality results.

Arrogant programmers maintain and defend control over all aspects of their code.

…..

Given enough time and experience, an Arrogant mode programmer will grow out of this phase of professional development and turn into a Sponge programmer.

Sponge programmers believe that other programmers exist who have a deeper understanding of the code than they do, and Sponge programmers are committed to learning from these more experienced programmers.

Wow, that’s depressing. So any good programmer has to start out being arrogant before they can approach self actualization and… oh, I don’t know…. humility? Major bummer.

And I am *sure* that I was that arrogant programmer. I can think back on specific interchanges and realize that “yup, you were an ass that day lording your almighty knowledge over everyone to win the argument.” And how many UI suggestions did I miss? How many actual client requests that might have made the company many more millions were not mentioned because of the perception of arrogance? I don’t and will not ever know my losses from arrogance. Hindsight is so 20/20. And humility is so profitable.

Back to our not-so-victimless-crime-of-arrogance.  The readme file that starts:

  • edit your bash file to alias /your/project/file/path to the download
  • add the package to your path.

Why are those two lines useless? Because they do not compile. They completely lacks exactness. They waste time. It is pseudo code at best and assumes you have time to waste that the writer does not to give you the details. They want you to fail or prove yourself like it’s Lord of the Flies or something.

Any programmer will tell you we are too lazy to remember the syntax to do those edits. I know I am. They say Einstein didn’t know the value of pi because he had it written down and could look it up. As programmers look stuff up when faced with poor documentation. Logic is what programming is about. Languages and operating systems, on the other hand, are about syntax. Humans add value with higher level logic that machines are incapable of.

Thus glazing over the details of syntax, taking time away from someone else’s higher level thinking, is motivated, in my opinion primarily (thankfully) by laziness. Not arrogance. The truth is we can’t remember the syntax to edit your bash file and don’t want to document the variables so we glaze over it. We skip over it bluffing, pretending “you should know” when in fact we aren’t linking it because we can’t remember ourselves!

That my friends, if it is intended as arrogant or not, clearly comes across as arrogant. No two ways about it.

But to suggest that a real programmer has the method of doing so memorized would suggest that only a stupid programmer would create a short-cut in their bash file called “editbash” that opens the file in their editor of choice. My point? A real programmer doesn’t memorize that crap. Therefore, if we don’t have it memorized, the documentation isn’t really anything more than a fishing assignment that wastes someone’s time unnecessarily. #lame

Oblique assumed knowledge to have someone “prove themselves” is nothing more than a hurdle. A mental “pay your dues or you can’t use my code” type of statement. Or possibly just lazy documentation – which when I see it internally is my hope. Arrogant people are terrible security risks because they are so easy to manipulate. Thus I prefer to think of it as lazy as opposed to defensive when I observe it within my team. Yet the external perception, regardless of motive, is still unfortunate. Working on that.

The bottom line is arrogance, be it real or perceived, sucks. If you really want people to use your code, then you don’t let your documentation’s excuse for brevity hide behind arrogance or laziness.