This is something I’ve been wondering about for a long time. Programming is an activity that makes you face your own fallibility all the time. You write some code, compile it or run it, and then 80% of the time, it doesn’t work exactly the way you imagined. There’s an error message, or it just behaves incorrectly. Then you need to iterate on it and fix the issues until you get the desired result, and even then it’s subtly wrong, and causes an outage at 3am on Sunday.
I thought this experience would teach programmers to be the humblest people in the world.
I can’t believe how wrong I was. Programmers can be the most arrogant dickheads you will ever meet. Why is that?
I actually welcome constructive criticism, and the brand of arrogance I’m so frustrated with is when people dismiss ideas or arguments without offering valid counterarguments. Or maybe when they take the worst possible interpretation of what someone says (see example above) and argue against that. Maybe my original post wasn’t clear enough.
While it’s true that separating emotions from the work itself and learning to accept justified criticism is important, even crucial, this fact doesn’t give free license to the people giving the criticism to be rude. Your comment seems to imply that what I perceive as arrogance is often justified when “senior devs” are defending their solutions based on their experience. But arrogance != conviction or confidence. Confidence paired with humility allows for open-mindedness, and creates a better environment for everyone involved. It encourages sharing and discussing ideas.
You also state that human emotions don’t belong in software development, then proceed to write a long rant that reeks of condescension, dismissiveness, annoyance, frustration and a feeling of superiority. Your comment is by no means neutral and analytical, it just displays emotions you feel are justified, while those felt by others are not. It’s hard not to conclude that you are exactly the type of person my original post is about.
Damn, I was wrong… ;)
I guess I should also clarify (if it wasn’t obvious), I am speaking about enterprise software development at large scale, and probably none of this properly applies to single OSS with 4 devs (or similar).
My intent was not “senior devs ok to be arrogant”, but more so give my understanding of why a lot of senior devs come off as arrogant (if code is dumb, it is okay to say it is dumb, and is not a personal attack).
Simply saying “this code is dumb” and walking away is arrogant – agreed.
Commenting in code review “this code is dumb” and nothing else is arrogant – agreed.
Saying “this code is dumb” and debating the concepts at play in code, is not arrogance, but is often perceived as ad hominem (“well [dev] invested tons of time and energy on writing that code you just called dumb and is offended” – why is [dev] working in a silo to the point that the code is trashed in code review on pull request?).
Correct, I was trying to give a why, directly from someone often perceived as an arrogant asshole senior dev.
Maybe it is better to say “feelings belong in process, not code”. I consider everything I discussed process. Code taking down prod at 3am is not, but more of an indicator of bad process (in whatever form).
This is interesting. My comment doesn’t reflect my actual feelings on this topic, but rather my current understanding of this phenomenon I (clearly) struggle with, based on my experience in industry.
My actual feelings align more with “I am blunt and don’t care about your feelings. This is a business not a personal project, get over it.” and acknowledge that is arrogant, shitty, and not helpful (probably the other fancy words you used too) but saves ME hours upon hours weekly, which I then get to work on my code/tickets during, which is what my job actually is, and is the ACTUAL metric by which success is tracked.
If you are looking for design review, ask an architect (not through PR to main, which most often indicates “ready”), that is their job, not developers. If you ask for my review I will give it, and that is the “to be nice part”. If I look and want to comment “this code is dumb – rant”, and I am the proper reviewer, I ask my manager to help me navigate the best way to express myself without coming off as an asshole.
I also acknowledge I do not write the checks, and have many times over written “dumb code” when that is what the business wants. Although I do make sure and be clear that it is dumb code (business people dgaf until the downtime happens tho).
I think what you are saying is technically correct, but it fails to acknowledge the importance of human emotions. Emotions are involved in everything humans do, and since software is written by humans for now, the act of developing software also involves emotions.
This does not mean that it should be a emotion-driven discipline or that emotional arguments should be weighted more than other kind of arguments. It just means that everyone will deal with human emotions while developing software, both their own and others’. We can of course manage our own emotions as we wish, but then the question is how do we act on regard of others’.
My main thought here is that disregarding how others feel about your actions rarely helps anyone. When collaborating with others, we usually aim for getting the most out of that collaboration. That is only achievable if the other person feels safe and welcome. Maybe writing some harsh comments in a code review is not the best way to do that.
Next thing that needs consideration is that we are all different, and what for one is a small gesture, for other might be offensive. You don’t know everyone else’s personal history, background or experiences, so you don’t know what can negatively affect them. This needs to be acknowledged, particularly when working in heterogeneous groups (ie, people from other cultures). You can ignore this fact, but it will negatively affect the collaboration.
As with everything else, people can become better at communication and collaborating with others, and still be able to defend your points without being aggresive.
Why don’t they, then? My first guess would be that this is seen as irrelevant. This is how I do things, how we do things in this industry, learn to deal with it. I don’t think that is a good approach. It does not harm your engineering skills nor the product of your work to be kind to others. On the opposite, it makes their lifes easier. I don’t see a reason why we shouldn’t strive to do that.