I have a hypothesis, but it's VERY silly. Programming, like many tasks created in the 20th century, is not nearly as physically demanding as traditional jobs. People who work behind a desk 24/7 feel emasculated and try to compensate by showing off their expertise through aggression. It's a game of dominance and frustration. Of course, this is totally unproven.
Programming expertise is very fragile. A variety of changes in your environment, such as different coding standards, dependencies, programming languages, etc, will cause a severe impact to your performance. The result is a strong negative reaction to things that should be objectively neutral.
That is, a change in your environment can make you feel incompetent, and it is easier to get angry at the change in the environment than it is to be honest with yourself about what is happening.
I forget which book I ran across this theory in, but it explains a variety of conflicts that repeatedly come up about formatting, libraries, programming languages, operating systems, and so on. Furthermore it is easy to experience the feeling yourself when you go from an environment where you're competent to a new one. (At the moment I'm going through this having to learn Eclipse and Java, after many years of being primarily a Perl dev.)
It's fragile, it's highly specialized, and it's overwhelmingly human-constructed. The fiddly bits have very little wedding in anything else, not even human-constructed hardware. If you're fussing in bits which don't impose their own forms of inertia, e.g., CLI tools whose arguments are exposed to shell scripts and hence, if changed tend to break a great many things which is Generally Not Recommended, then you can find that years or decades of expertise can be wiped out in a very brief time.
Unlearning is generally as hard as or harder than learning.
And there's a strong tendency to view the first system you learned as "the proper way" to do things. Sometimes it is, sometimes it isn't.
The transition you're going through in Perl => Java is a pretty good example. You happened into a skillset early in your career which was highly capable and offered ample opportunities, but its flower has faded. That's something that the kids today who're building up competency in various currently-popular toolsets might do well to consider. They're starting to see hints of that as tools such as RoR are fading. What happens when we, say, bin the entire present set of Web dev, will be interesting.
And it's happened to whole industries before. Sucked to graduate in nuclear engineering in 1979, or petroleum engineering in 1990.
I don't agree that programming expertise is fragile. There is a kernel of knowledge that transcends language and syntax, and that is by far the bigger part of "programming knowledge", much more important than knowing specific syntax and how to use certain tools. For more, see [1].
This doesn't mean you aren't correct. People may still be reacting negatively to change, because it does require work to learn new libraries, frameworks and languages. But that is not the same as saying that programming expertise is fragile.
I'm going to have to disagree with you, especially in relation to large frameworks.
I spend a lot of time working with medium to large ruby on rails applications. I know them very well and I am pretty good at doing things quickly and correctly. If I have to work on a php, python, or javascript project, it takes me one or two orders of magnitude longer to get things done than it would in a rails application.
The ability to start working with a new language after reading a blog is useful but it doesn't mean you'll be effective and useful in that language in a week.
A person with the ability to program, probably will have that raw ability in various languages. There is a knowledge core that is very transferable. An experienced programmer can come up to speed very quickly as concepts get mapped into things they already know. A polyglot will have been through this several times, and won't be afraid of the process.
But there is a great deal of knowledge that we use every day that is environment dependent. A programmer with 20 years of experience in various languages will not be noticeably better by day 5 in a new language than someone who has been programming for 2 months only, but in that language. A simple change can leave a programmer feeling incompetent.
Programmers who respond to this badly are not going to handle such transitions well. Furthermore if they get stuck in defensive behavior, then the initial discomfort will turn into permanent failure.
I never bothered memorizing stuff which is "fragile", e.g. browser quirks. Luckily, there's no shortage of programming knowledge that is the very opposite of fragile. Under a few common assumptions, sorting can't be done faster than O(n log n). All NFAs can be converted to DFAs. 2-SAT is polynomial but 3-SAT is NP-complete. And so on.
People who disdain math as "brain teasers" are deprived of the rush of knowing that some piece of your knowledge will stay true forever.
You can't get useful work done on real problems without learning a lot of that "fragile" stuff. How are things scheduled on your OS? Where do you find your logs? How do you run unit tests? What are your local coding standards? What is the library call for doing X? How do you find your documentation? What was that section of code you found foo in the other day?
All of this stuff is fragile. None of it is going to last. But it is context for your current life, and you're going to be more productive if you learn it. And when this stuff changes on you, you're going to feel the productivity drop. But there is no sense in hamstringing yourself so that you won't feel so bad later. You learn it now, and you learn the replacement later.
Back in the 1800s there was a belief that you could only learn so much, so you had to keep your brain clear for the important stuff. (Go read Sherlock Holmes for an example of this prejudice.) But these days we know better. People can practice learning. And those who do, constantly are learning. About everything. Including trivia. And it pays off. It really, really does.
If you go farther back, you'll find more negative opinions of Java like the one at http://www.perlmonks.org/?node_id=41244 that I stated 15 years ago. I believe that the substance of my complaints were true then. They are true of some organizations today. But they are not true of all of Java, hence my willingness to use Java today.
Eh, simple tribalism seems like a simpler answer to me. It's the reason Navy folks talk smack about Marines, Target shoppers look down on Walmart, Yankees fans bash the Red Sox, etc. — I don't see why it can't explain a React fan hating on Ember or whatever.
I think this is the right answer, it's pretty high level, and maybe more nuanced than "it's my tribe" because there's always infighting amongst the tribe, but it cuts to the chase, this whole attitude is endimic to the human condition.
Sometimes maturity cuts through it, but IME, sometimes it takes maturity and intelligence (though not a huge amount of it), and on the rare cases, there's something more, like a primal competitive nature.
I have an alternative, and potentially equally silly, hypothesis.
Many programmers are young and have just enough money, time, and knowledge to get into trouble.
This is compounded by the growth rate of the programming field. New, young, programmers jump into the industry every year. So, a young programmer can potentially encounter entire teams of equally young programmers, creating a school like atmosphere of aggression and dominance. (Which is sometimes taken advantage of by employers.)
As silly as your theory is, I have anecdotal support for it based on some of the places I worked at. The younger the crowd, the stronger the "new, assert technology X" superiority vibe is.
Where I work now, no one cares and I get questioned on using something that is less than 3 years old. xD
> The younger the crowd, the stronger the "new, assert technology X" superiority vibe is.
This could also be due to simple inexperience. The first time you come across something that seems amazing, it's easy to make the leap from "amazing" to "perfect" and become a zealot about it.
Then you live with the amazing thing for a while and discover that it actually has flaws that weren't obvious at first glance. Then you go through this cycle a few times and realize that everything has flaws, and that the art is learning how to identify the things whose flaws impact what you want to do the least, rather than being able to find the One Perfect Thing that solves every problem cleanly. And you come to value the tools that tell you their flaws and limitations up front over those that try to hide them behind blustery assertions of perfection.
But by the time you realize all that stuff, you're not young anymore :-D
My silly theory is that this is economically driven- why compete with senior devs in technology x, when you can choose new tech Y and be just as senior as everyone else to managers and recruiters?
I don't think it's related to the physical nature of it. I think it's just that it's a field that is infinitely faceted (so room for different perspectives and opinions) and one which many of us have a serious personal interest in. I.e., it's not JUST a job for many of us. I am one of those kids who has been a 'power' user since middle school. Now I'm a programmer. If I didn't do it for a living, I'd still do it.
So what that boils down to is I have opinions that are semi-personal. A lumber-jack or a secretary probably has much less personal investment in their field. Personal interests yield opinions, and where there are opinions there are people who are aggressive about them, whether it be music, religion, sports, cars, or technology.
This in one of my "i believe it, but can't prove it" ideas about the negativity in programming: Programmers tend to be very insecure about their intelligence. I think it has to do with how (at least in the us) skills in STEM fields aren't valued too highly until you get into college and beyond. If the damage is done early then it can be hard to back it out later in life, so a lot of programmers carry around some residual scars.
This isn't really true as far as I am aware. If you are getting this from the Robber's Cave Experiment(HPMOR), it was misrepresented there. They were only hostile after it was induced and they went back to being nice in the last stage too.
Everyone likes to feel special/superior. There are many ways to do this. Easy ways are money and power. If you are smart, you can win arguments.
If you aren't any of these things, you can be superior in other ways. You can feel morally superior to those 'millionaires and billionaires'. You can save the planet or the animals, which those others for all their money/power/specialness don't care as much about (or so you tell yourself).
You can become a shameless hedonist. Those corporate fuddy duddies would love this lifestyle, you see, but they are cowards even though they are rich, right?
In every case it's about being unique or on top of those things or making a mark that will last. Special. Valuable.
When we program it's from our heads. If anyone questions why we do something, it's as though they are questioning our intelligence, so the natural (for some people) reaction is to be defensive.
To elaborate with an example: when you pick a programming language or framework you presumably have other options which you don't take for whatever reason. The reasons for picking something over others don't need to be strong: its what I use at work, its what a friend uses are probably a lot more common than 'this programming paradigm is better'.
When someone else comes along and says you made the wrong choice, or even if they stop at just championing their own, different choice and therefore 'implying' you are wrong, its easy for individuals who might not have their self-awareness guards up to respond as if they were being personally attacked. Even if your original choice isn't something you, all being equal, don't really care that much about.
Here is my theory, which could serve as an addendum to yours: people who spend a lot of time interacting with machines, instead of people, tend to have an under-developed sense of empathy and similar social skills. Often times they don't realize or put a high value on how their negativity will affect those whose work they criticize. So you end up with a ton of hostility in the industry, not just towards new products and ideas but also between established "tribes."
At some point you got to wonder whether the practice of programming itself can make people unhappy. Maybe it's just not natural to put your mind into that straightjacket of formal thinking for 8+ hours a day.
I think Internet comments encourage this behavior but it has always existed and isn't unique to programmers. Just today I read a long reddit thread with military people arguing about aircraft.