For as long as I've been in the industry, it's always been this way. You talk to a fellow programmer, and inevitably the conversation veers toward the same, perfunctory exchange:
"So...what are you using?"
...at which point you respond with the newest, flashiest piece from your current stack:
"Ohhh...it's just basic Java/Spring on the back-end, but on the UI it's Angular (!)"
The purpose of the exchange is of course not to objectively describe a set of technologies used to solve a problem. Instead, we highlight the "cool" language/tool/framework in order to reveal something about our ourselves, our identity. We're not just average programmers. We use Angular (or whatever). We're in the "in crowd". In a sense, the technologies we use are like the clothes we wear - they speak to who we are, what we stand for, our worth. It's technology as fashion.
Now of course the analogy is far from perfect, but consider some parallels from this description of the fashion cycle by sociologist Herbert Blumer:
The elite class seeks to set itself apart by observable marks or insignia, such as distinctive forms of dress. However, members of the immediately subjacent classes adopt these insignia as a means of satisfying their striving to identify with a superior status.
They, in turn, are copied by members of classes beneath them. In this way, the distinguishing insignia of the elite class filter down through the class pyramid. In this process, however, the elite class loses these marks of separate identity. It is led, accordingly, to devise new distinguishing insignia which, again, are copied by the classes below, thus repeating the cycle.
In a nutshell, fashion, whether in clothing, music, or programming, is about class differentiation. The elites innovate. The masses catch up so they can be associated with the elites. As soon as they do, however, the elites are no longer "elite", and so they must break away and innovate again. The masses eventually follow, and the cycle continues, ad inifinitum.
Obviously, there's more to it in the case programming - our choice in technologies can't be as whimsical as our choice in hair style. Our decisions must be grounded in a strong base of pragmatism - i.e. what we use should actually work. Still though, I think we understand that there's always been a degree of fashion in our industry. Whether it's Angular today, or GWT, Rails, or JSPs of yesteryear, there's always been that "next best thing" and we've always scrambled to keep up.
Now, sure, we often jump the bandwagon out of earnest hope that we've finally found the silver bullet, or some close approximation. I think just as often, however, we jump on the bandwagon so that we can sit alongside the "cool kids" and not be "left behind". Ok, we could have used a technology we know and are proficient with, but that technology is old and lame now. We use what's new. We're up on things. We're "current".
To be clear, it's not the innovation itself that is dangerous, but rather the vacuous emulation of it. When we use a tool, a framework, or a language only because it's new or "hot", we are taking on non-trivial amounts of risk to our projects and our clients. We make our systems less maintainable and unnecessarily complex. Even when the new technology is by all standards "better", we should be sure that it is better for our project and organization and solves the particular problems that we need to solve.
Unfortunately though, I feel like this empty, reckless adoption of new technologies is more prevalent than ever. For example, I hear this kind of exchange alarmingly often lately - a programmer unabashedly suggesting technologies to another without even understanding the context:
"You know, you really should have used MongoDB"
Really? We only had 1MB of data and the rest of the organization was using MySQL. More importantly, we finished the project in scope, on time, and on budget!
Again, I'm not at all bemoaning the process or cycle of innovation itself. Innovation is our business. We create. We make things better. This is great. I do think, however, that the ever increasing pace of innovation, on all fronts (e.g.NoSQL databases, Javascript frameworks, Mobile toolkits, etc.), is playing into our hard-wired psychlogical desire to "keep up", and to ill effect. I know myself that I'm often so overwhelmed by how much new "stuff" there is out there, and moreover by the paucity of free time I have to reasonably evaluate it, that I often catch myself reverting to fashion-based decisions. That guy at the conference told me that Go was the next big programming language - I better start using it!
So as I get off my soap box, let me make one last plea. If you're in the elite, keep the innovation coming (obviously). Those in the masses, however, let's not be afraid to let a bandwagon or two pass us by. Let's be judicious about adopting innovation. The right tool for the right problem. In other words, let's not be slaves to fashion.
As always, let me know what you think!