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?
TL;DR; Human emotions don't belong in software development. Code doesn't care about your feelings so neither do senior devs. If you want someone to listen about your feelings, talk to your manager, not other devs while proposing a solution based on feelings. If you can't handle critical criticism of your code/designs/etc, you simply don't belong. If you are pumping shit out that takes down prod at 3am on Sunday, it is exactly that... shit.
It's a problem if you're a junior dev. Junior dev acting like they know everything straight out of college will often just get ignored and pushed sideways in the company (rather than promoting upward).
Junior devs should be properly mentored by a senior dev. Junior devs should never be placed in a position where their code could "cause an outage at 3am on Sunday". If that happens from a junior devs code, that is mentor's fault all the way.
Intermediate devs have more leeway since they have seen some shit and often decide and design based on real industry experience rather than a couple of college courses. However, intermediate devs are often deeply passionate about their projects, especially when they are doing something like "designing specifically so we won't have downtime at 3am on Sunday again because that sucked".
Most humans have an extreme difficult time separating emotion and logic. When intermediate dev above "knows this is right", and passionately debates the topic to no end, even when there is an obvious flaw in the logic, they are often debating based on their feelings and not based on matters of fact. This is a problem, and will come off as arrogance, but most likely is not actual arrogance and they are just caught up in their feelings about how hard they worked on the code/solution and they "feel" (not know) that the solution is correct/best/etc. This is easier than saying "damn, I'm wrong" for most people.
Senior+ devs often have seen shit across multiple softwares and companies allowing for more generic context surrounding issues. Senior+ devs also often depend on who they are conversing with, and often change tact to the situation. Ignore junior devs unless it's their actual job (mentorship). Be a contrarian to intermediate devs, to ensure they are doing real due diligence with their solutions. Heavily debate senior+ devs, as this is often where emergent architecture and design comes from, and all parties come out more knowledgeable. Caveat being: debates must be about the data and facts, with no ad hominem.
There is a major difference in the following statements:
The former has nothing to do with you, even if you wrote the code. The code would still be dumb if someone else, even me, wrote it. Too many people take criticism of code as personal attacks -- human emotions do not belong in software development, facts and logic do.
save