|If you have ever had a discussion with a software developer regarding an issue relating to technology, then you'll no doubt have experienced how fervently some can hold onto their opinions regarding their favourite tools and / or technologies. This is especially true when it comes to their programming language of choice. I have lost count of the number of times I have been dragged into a flame war over some programming language, methodology or some other technological aspect of the software development life-cycle.
- C# vs Java
- PHP vs ASP.NET
- C# vs VB.NET
- SQL Server vs Oracle
- Apple vs Microsoft
- iOS vs Android
The list goes on.
Software developers expend a great deal of time and effort learning a particular technology, and have an emotional attachment to it because of this. For most software developers, myself included, developing software is more than just a job. It's a passion, a vocation. We live and breathe what we do. We spend time outside of our day jobs reading around and learning new tools and technologies, contributing to open source projects, writing about technology (as I'm doing here), answering technical questions on forums, all in our spare time.
There is a wide gulf between familiarity with a technology and mastering it. We tend to choose and favour tools and technologies that align with our deep seated, deeply entrenched views and philosophies on the nature of software development. Software development is an extension of ourselves. It is this emotional response that makes us less than objective sometimes when discussing technology. It is hard to be completely subjective about something for which we have spent a large amount of our lives learning and mastering.
If you develop software using a particular language, and spend time with that same community on online forums and the like, then it's no wonder that when faced with a particular problem, you always see the solution as being to use your language of choice. You have software tunnel vision. When you are hammer, all you see are nails. This behavioural pattern helps reinforce our technological decisions and seals our beliefs even further.
Software developers naturally want to protect their investment in their chosen technologies. They want to ensure that their investment in time and energy rewards them well into the future, so that they don't become expendable. Software developers will defend their technological decisions, even sometimes when clearly making a poor argument such as when the technology is poorly aligned with the problem space.
I certainly can't see flame wars ending any time soon, so maybe it's time to don the kevlar suit and try not to get burnt.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare