Just so people understand where this post/poll originated... at the closing panel for DotNetNuke Connections in Las Vegas, a conference attendee asked the rather "loaded" question of whether we would ever consider changing the primary development language for the core framework from VB to C#.
I answered the question by first explaining the background for the C# source code package which we posted earlier this year ( ie. the fact it was created by a volunteer community member from China; that it had been posted on Codeplex initially as a C# fork - which we had to shut down due to trademark issues; that we had been working with the community member to post a new version to coincide with each new core release since; and that the C# version has not been part of our standard QA process to date ).
I went on to say that changing the primary development language for the core framework had come up a number of times in the past, but we would never make such a decision unless there was significant evidence that there were obvious business benefits to be obtained ( after nearly 20 years in software engineering I have learned it is NEVER a good idea to change technology unless there is a compelling business case to do so - a business case which is good not only for one stakeholder but for the vast majority ).
The .NET language debate has raged on for nearly a decade now - the problem with these discussions is that they tend to get very subjective and emotional and usually miss the entire point of why one would consider using one language versus another. In the panel I tried to outline a few objective reasons of why the C# question is even relavent at all for us, but unfortunately I think some of my points were taken out of context. So it is probably a good idea to document some of the more important items to consider...
First Class Citizen
The most fundamental argument in the language debate centers around citizenship. When .NET was launched way back in 2000 there was a lot of hype around the fact that it was "language agnostic". Since .NET is based on MSIL from a run-time perspective, the premise was that programming language was essentially irrelavant. In these early stages it really felt like C# and VB were first class citizens in the .NET world. However, in the years since it has become very apparent that there is much more to consider than just the run-time perspective. The fact that Microsoft itself develops the majority of its products in C# results in a far greater emphasis on the C# language in terms of innovation, tooling, examples, etc... So although Microsoft tries hard to provide decent support for VB, it generally feels like an afterthought - almost as if it is a required burden which they are forced to accept because of the size of the VB community. As a result, whether it is accurate or not, the general perception is that C# is a first class citizen and VB is a second class citizen - and this citizenship dilemma manifests itself in a variety of ways.
Availability of Source Code Examples
In the early stages of .NET, there was a commitment by Microsoft as well as other media organizations to always provide source code examples in both C# and VB. This emphasized the first class citizenship of both languages and provided incredible value to developers, regardless of their language preference. However, there is no doubt there was significant time, effort, and cost associated to this practice so it is not surprising in recent years that the commitment has changed. In fact, I was recently on a conference call with a leading .NET publication and they said that they made a decision to only provide code listings in C# over a year ago. A quick search on Amazon reveals 1028 books on "C# NET" whereas only 744 books exist for "VB NET". Less code samples in VB means less useful education and reference for VB developers which reduces the effectiveness of utilizing the VB langage.
Availability of Developers
After nearly a decade the number of developers using C# is far greater than those using VB. A quick search on a popular job site shows 858 job opportunities for "C# NET" in the past 7 days as opposed to only 371 job opportunities for "VB NET". If we want the size of the DotNetNuke ecosystem to grow dramatically in the coming years, it means that we will need to recruit new developer talent. And I am not just talking about DNN Corp; every systems integrator, module developer, etc... will need to recruit software developers and the availability of C# developers is much higher than VB.
Developer Attitude
This item is somewhat subjective, but it generally feels like C# developers are less flexible and more opinionated when it comes to evaluating solutions ( as compared to their VB contemporaries ). There may be a variety of reasons for this attitude but at the end of the day if C# developers have a poor first reaction to the fact the core is written in VB, it limits the growth potential of the project and ecosystem. This is a very difficult item to measure, as you typically never get the opportunity to hear the reasons why someone does NOT choose a particular technology - they have already moved on to an alternative. Whether we can measure the first impression that the VB core has on C# developers or not, we already know that there are certain members of the .NET community which will never choose DotNetNuke, regardless of core language. The so called "cool kids" are wary of any solution which they do not write themselves from scratch; and really represent the exact opposite of the type of developer which we want to serve. DotNetNuke is a productivity framework and is best utilized in environments where time and cost are critical factors for success.
Perceived Performance Benefit
I have yet to see any performance metrics which validate that C# runs faster than VB ( and I would have a hard time even understanding in theory how this is possible because both languages produce comparable MSIL ). But regardless, there is a perception in the .NET world that C# runs faster than VB and the popular saying is that "after a while, perception is reality".
Enterprise Acceptance
In the enterprise world there are really only two technology platforms which are widely accepted as "enterprise capable". There are J2EE and .NET. And when it comes to .NET, C# is the dominant language by far. This may actually be related to the fact that C# closely resembles Java and there has been some migration of enterprise developers from one platform to the other over the past 10 years. Most enterprise organizations are savvy enough to understand that a VB core framework is not a platform weakness from a technical perspective, but when they evaluate it from a business perspective and look at the availability of source code from a risk mitigation or escrow scenario, they would much prefer if it was written in the language which their developers prefer.
Competitive Landscape
When we evaluate the other .NET CMS systems available - open source or proprietary - we notice that ALL of them are developed in C#. Since CMS systems generally require some level of development to customize them to the needs of a business, it makes the technology platform more important than it is with most applications. So in the cases where a user considers switching from a competing .NET CMS to DotNetNuke, one of the items they need to consider is how to migrate their custom developed assets. If a user makes an invalid assumption that they can only use VB in DotNetNuke, it could be a factor in them ruling us out because the effort to convert their C# code is too high. In addition, because DotNetNuke is written in VB, there may also be incorrect assumptions that integrating DotNetNuke with other .NET C# solutions will be difficult ( which we all know is not the case ).
Language Leadership
Anyone who has been in the .NET world for any length of time should be familiar with Anders Hejlsberg. Hejlsberg is a Technical Fellow at Microsoft responsible for advancing the capabilities of the C# language. There is no contemporary to Anders in the VB world which again emphasizes the fact that VB is essentially a "little brother" to C#.
Strategic Direction
Currently Microsoft is interested in improving the engagement with the "breadth" or "productivity" developer community. Part of the strategy involves the new WebMatrix IDE and Razor scripting syntax. Interestingly, in a recent issue of Code Magazine, a community member raised the question as to why C# is the default language in these new tools as opposed to VB ( which has always been perceived as a better "beginner" language ). Well, the answer from Microsoft was that they purposely wanted to reduce the choices which a beginner needs to make and therefore needed to give one language more weight than another. They said beginners often have experience with "C-like" languages like JavaScript so they chose C#. In addition, if a beginner learns C#, they can more easily graduate to more sophisticated development models. This is yet another indicator that Microsoft is trying to influence developers to choose C# over VB.
Language Conversion
Because the C# language is based on ECMA Standard 334, it is much easier to convert code from C# to VB than vice versa. In fact, the automated code conversion tools have much higher levels of accuracy for C# to VB than VB to C#. In addition, since Mono is developed based on the ECMA standard and its C# compiler is far more advanced than the VB compiler, it offers other opportunities.
Compatibility
Because both C# and VB share common characteristics, they are highly compatible with one another. This means that if the core framework was converted from VB to C#, the DotNetNuke API should be able to preserve compatibility - which is obviously a highly important benefit in terms of serving the needs of our ecosystem.
Regardless of the reasons outlined above, I think it is important to note that our public stance has always been "it should not matter what language the core is written in... as extensions can be written in whatever language you prefer". Some people perceived this statement to be directed only at third party developers and essentially mean "don't be ignorant and discard DotNetNuke just because the core is written in VB". However, this statement was not only directed at third party developers - it was aimed at ourselves as well. If we are truly objective and want to choose the optimal technology for the product and ecosystem then we can not be ignorant either - we need to set aside personal preferences and make the best overall choices for the longevity of the project. And like all technology choices, it must be an exercise in compromise because there are always trade-offs to consider.
With all that being said, let me be crystal clear by saying that our primary development language for the core framewok is currently VB.NET. No decision has been made to switch to C# at this juncture. However, we are looking for objective feedback from the community and ecosystem to help us determine whether or not we are adequately serving its needs by continuing on our current path. Will Strohl's TwtPoll ( http://twtpoll.com/eui8j1 ) is good way to gauge initial reaction to this issue but please understand that we can not make decisions based on polls alone, as polls fail to recognize many of the more complex contraints and considerations and they only reflect the opinions of those individuals who participate in the poll - which generally does not include all relevant stakeholders.
My comments are my own and are offered WITHOUT PREJUDICE
Shaun Walker
http://www.siliqon.com
|