I understand that humanity is tribal. As a consequence of natural survival and evolution, people had to develop an us versus them mentality to stay alive and thrive in hostile natural environments. What I do not understand is why many people can or do not want to move beyond this.
I love open source – I love the fact that anyone can contribute to existing technology that drives the internet in ways big and small, important and ‘trivial’ (I use scare quotes as those tasks considered trivial by many people are not actually so – case in point, testing, test cases, and documentation. I salute any person that has the chutzpah to jump into one of these projects and impose order in these areas). I love the meritocracy that this creates. These projects are some of the only places in the world where people can improve themselves and start making contributions at a senior level through nothing more than what they know and can do. Of course, there are politics in any organization but these open source communities are far more open than others.
What these communities have that is damaging in many ways, however, is a horrible ‘us versus them’ mentality. Specifically, most open source communities hate (and I use that word deliberately) Microsoft and completely discount both any contributions both Microsoft and people who use Microsoft products can do. This in turn causes those affected people (Microsoft and people using Microsoft technologies) to completely discount the open source communities and the software in general. This is a problem.
It is a given that Microsoft has not made things better by its actions in the past – it has spread FUD (fear, uncertainty, and doubt) much in the same way that tobacco companies used to about the results of health research. Microsoft has also funded multiple groups and studies ‘showing’ that Windows and Microsoft-based development environments are more cost effective than open source. Most of these studies have been shown to be either insufficient, misleading, or downright false; however, none of this has anything to do with the quality of the Microsoft products or the people that use them. Both sides of this debate are equally guilty of misleading remarks, straw-man statements, and cherry-picked discussions. None of this helps advance the software landscape one iota.
Personal disclaimer – I have mainly used Java, Visual Basic, and C for my professional programming. I have also spent a fair amount of time using Ruby, Perl, C++, Asp.NET and other minor languages. I have worked with the Sun/Oracle, LAMP, and Microsoft technology stacks. With that disclaimer out of the way and with the statement that I like and subscribe to many open source projects, I do not care about your favorite language.
I do not care if you can get Perl to stand up and dance, COBOL to act like an object-oriented language, or C# to run on Linux; I care what you do with these languages. There are some languages that are more suited for certain development domains – for example, using Perl on a severe resource constrained microcode project would not be suggested, not would using C for a high-availability, high-change web development project. You could use them in such ways but the problems that you would incur – for yourself or the person following you that has to work with the code – might make the cost of the project more than the value.
For most people (startups and such), you will be dealing with web development languages and technology stacks. Within that description, it does not matter what language you choose from a strict technology perspective – you can do the same things in each language. For anyone that disagrees, please show me examples – yes, I am aware that you can use highly contrived versions to show a particular language’s weak point. Show me that contrived example in production in the most modern version with actual modern libraries and I may believe you; however, almost all of the time, this is another example of FUD – a contrived, ridiculous example that does not have any utility in the real world.
I do not care how your language performs on toy problems; I care how it works in the real world. The real world, unfortunately, contains people – people that may or may not have the skills necessary to implement your solution. One of the reasons for making technology decisions is the availability of people to implement this technology based on in-house, contract, or off-shore development – choosing a ‘cooler’ language that only has 1% of the experienced people of other languages means that you will be paying a lot more for people who are a lot less experienced.
There is little to no difference between an application written in C#, Java, Ruby, or even Perl once it hits the users browser but there may be a large difference in the effort required to create and maintain it. Again, technology is only one of the inputs to this effort – people and infrastructure are also very important to this equation and, all other things being equal, may be more important than actual language used.
I realize that this post may offend some people and that is too bad – these people will never be that useful to the whole software world. Technology and languages are merely tools. There are tools that are better at doing certain activities than others and occasionally tools that should not be used for certain activities; however, for the most part, all languages are hammers and we are being asked to construct wooden frames for a building. Unless there are severe sizes constraints or no large people available to do the work, most hammers will do the job; parts of it will be easier using one tool over another but no tool works better in all situations.
Choose a good hammer, yes, but do not think that the wrong hammer will not let build the building. The hammer is irrelevant – the finished building is all that matters. Once the building is done, the type of hammer used is not going to matter at all. Choose the hammer that best suits you and do not envy the hammers used on the other building site.
Image courtesy of Danny Ayer / flickr.com