Thoughts on the future of C#, VB.net, and VBA
I wrote this after reading the .NET strategy and Peter Bright’s analysis on Ars Technica. Although I still write code in C# occasionally, I’m a program manager at work, and these opinions do not represent those of my employer.
I remember that when I started my internship 12 years ago, one of the first projects was to create a project tracking system using VB.NET.
However, the team also had some legacy applications on Excel that were of course, on VBA, and I needed to fix bugs as well. At that time I thought, “Why would Microsoft be so annoying as to create two languages that were so similar but different and entirely incompatible!” At that time, VBA dev really got away with declare Dim as Variant type… coming from the strongly-typed world I had no idea why VBA would allow such monstrosity and but not in VB.NET! Of course, we thought that VB.NET was at least syntactically a better language than VBA (it is object-oriented!), and thought that one day all of the VBA programs in Excel workbooks would be auto converted to VB.NET running .NET core underneath.
This never happened. VB.NET lived on. Eventually when I started working on VSTS office add-in,one of the “hairiest” problem was to make sure that the Add-in code didn’t interfere with the VBA code that the user wrote. That was a nightmare. Still VBA lived on. It is weird that the add-in code was written in C# and not in VBA. I doubt anyone at MS at that time used VB.net for really anything other than the VB.net team. Unfortunately, it was also where the efforts were invested. VBA as a language didn’t have update and was as hard to use and debug as ever, despite the fact that it was still popular.
Fast-forward almost 10 years later. I’ve not encountered anyone still using VBA at any form. I guess if the team include “small basic” into the VB family then perhaps there is some traction in education, but the language is basically incompatible with any tooling for education and certainly not in any major cirrculum. And, to be fair, learning VB.net is just bad for mind, and you will incur more bad programming habits out of it. Investing in it is… allow me to put it strongly… waste of human intellect.
Why is VBA so hard to kill? I think that innately has to do with human’s attitude toward learning — we aren’t likely to learn something unless our lives depend on it! For thousand of business professional, knowing VBA = security of their jobs and there is an incentive to keep it and not replace it with anything else (or they would be out of jobs). And unlike consumer software, enterprise software takes years to be updated and №1 priority it that all the files/data needs to be backward-compatible! That ensures that VBA will stick around until, either 1. the generation of VBA users fades out from the industry, and 2. enterprise aren’t using Office software to manage their work. (2) is not good for Microsoft.
C# — there has been WAYS too many features since C# 5. Really, async is like the last thing that was actually useful. All the new stuff are just add-on but actually adds burdens to the developers because some newbies would use this C# 7 stuff and no one would have any ideas what this is about in the CR. Churns in C# should stop at one point.
VB.net — really, if you can make UWP/Xamarin games in VB.net and there is really no point for anyone to learn VB.net. Dev wants to learn the language that is as applicable in many (popular) platform as possible. pure .NET isn’t popular out of the server world, and VB isn’t available on UWP or Xamarin. Why keep investing any energy on this at all!
VBA — it is actually the area with biggest threat and opportunity. I see a trend that as we are moving everything to the cloud, JS is slowly displacing all other languages as the defacto languages for web-based plugin. That’s all goodness except that it basically puts all these business professional at a level playing field with any new hired. 20+ years of expertise will be displaced by this cloud migration. But that’s bad news for Microsoft too since the enterprise rethinks their investments on the non-pro business software development, Microsoft is at level playing field with other competitors.
The right move, I think is to enable VBA in sharepoint and cloud-based office suite. Anyone can upload their existing workbooks to the sharepoint and Excel Online will be able to handle the VBA stored in the workbook, and allow the user to edit it and recompile it. I know that VBA is out-of-fashion in the cloud work, but technical challenge aside, many will helped by this. And it will ensure Microsoft’s grip on office software for years to come.
Note. these thoughts are solely mine and not related to my employer, nor do I have any proprietary information about the development of these languages. I’m now a PM and really out of the dev world for a long time:)