It has been a while since I put fingers to keyboard to write an article but it has also been a period of time where I have been able to observe from afar the ongoing developments in my profession from which I retired from in 2014 after 43 years as a professional developer and software engineer. And seeing the increasing complaints by developers and engineers who are still having to deal with an industry that appears to have become increasingly directionless, I thought it may be a good idea to write down what I have observed; specifically with what is happening with the Microsoft Corporation as it relates to its Development Community of which I am still a rather active member in terms of development endeavors.
I have been working with the Microsoft products and development environments since 1991 when Visual Basic 1.0 was first introduced and moved on to the .NET development arena 10 years later in 2001. And while I certainly kept abreast of information regarding competing environments and even worked in several such as the Borland Turbo Pascal product line, the Microsoft products eventually came to dominate the development profession and I was quite happy to specialize in them. All of them, despite their issues, were primarily consistent in their interactions with each other while providing relatively easy learning curves to become proficient with them.
With each new product introduction, the same marketing tropes were provided such as the ability to build newer and more exciting applications. I never quite understood such generalizations since most of us in the profession and especially in the corporate technical environments never saw what a new and exciting application actually looked like. To us, creating well running applications was basically a continuum no matter what new tool-set or software we were provided.
Admittedly, the introduction of .NET was an enormous leap in development ease and product support across both the desktop and emerging web application genres. And we were all quite happy to move away from the desktop DLL Hell that Visual Basic (now known as Classic) provided us with.
One has to wonder though why Microsoft could never come up with a modification that would reduce or eliminate the constant conflicts with DLLs?
But it seems to me that at the very least such a conflict could have been reduced by simply making such application extensions “private” to any application considering that so many of these developments were either single-user desktop applications or client-server ones. But Microsoft chose to ignore this possibility and instead introduced .NET.
The .NET Frameworks and the new Visual Studio environments offered a much more cohesive experience so we all moved on leaving the original Visual Basic versions behind along with their many DLL conflicts.
I would say that up to around 2010 Microsoft, under CEO Bill Gates, did a rather good job of maintaining the experience of consistency with its development product introductions. True, by 2010 a large body of issues and complaints had arisen in numerous technical areas of the .NET environments but for the most part, as professionals we enjoyed a rather stable development experience. But then Bill Gates stepped down to dabble in areas he had no real experience or business being in with his wife.
Nonetheless, by 2010 it appeared that a bad moon was rising. By then Bill Gates was already gone and Windows 8.0 was another 2 years away from making Windows 7 an all-time user and developer favorite.
In 2010, the first rumblings of a major development in the .NET web development area were making themselves known with the introduction of ASP.NET MVC, a completely different development paradigm from the popular ASP.NET WebForms model.
Why did Microsoft decide on this new web development genre?
What we do know is that the initial developer reaction to this new web paradigm was, “What is this crap? A new form of Active Server Pages (ASP)?”.
Needless to say, the new MVC was derided as a throwback to 1990s style web development of Classic ASP. Besides, the Castle Project’s freely available MonoRails, a complete ASP.NET MVC third-party tool had been available for some time by that point with little interest that I was aware of. And ASP.NET WebForms was a powerful platform that could support a wide variety of web development applications.
It was after the second version of ASP.NET MVC was released that a change in our community came about and developers and engineers started to approach this newer version of the software with a more positive perspective.
What I do know is that this new development paradigm was far more complex and detail oriented than that of ASP.NET WebForms and in the end would only accomplish what we were already doing with WebForms.
Having an opportunity to work on a major ASP.NET MVC project, probably one of the largest in the US at the time, as one of three engineers developing it, I came out of the experience with the same trepidation I went in with; why would anyone want to use such an inefficient technique for developing web applications? Considering that the project was on a very tight deadline, the use of this technology was clearly a bad choice but the senior engineer insisted that as a technology it was far superior to ASP.NET WebForms. So what!?!? I thought the idea was to get a project completed in a minimum amount of time. But the senior engineer insisted only to eventually come to realize that maybe using such an untested technology was not the wisest choice.
In any event, Microsoft kept pushing out newer ASP.NET MVC versions and between the younger professionals entering the field and a lot of genuine stupidity from both the vendor and the community, ASP.NET MVC came to supersede WebForms as the preferred web development paradigm.
Today, a lot of professionals are making the same complaints about the current ASP.NET MVC development environments that I saw back in its earlier days but it appears to be too late for any sudden changes to occur. Too many people have invested in this nonsense so I decided that the better part of valor was to avoid doing web development ever again. Being retired in 2014 after 43 years in the profession, this was not a difficult choice to make.
Windows 8 came along and upturned the Microsoft development community even further since it appeared that this version of Windows made less sense than the introduction of ASP.NET MVC. Windows 7 was a great operating system, so why mess with success?
Couldn’t Microsoft have refined Windows 7 without upending the Windows world so drastically?
Well, for anyone who has followed the history of how Microsoft has come to release products after the end of Bill Gates leadership (which had its own issues), it appears that the company has been in a downward spiral when it comes to its own development community, which for years was relied upon to guide such product developments. No more apparently…
Next to go would be the excellent embedded version of SQL Server known as SQL Server CE (CE for Compact Edition). Here was probably the best embedded database in the industry for desktop applications that required localized database storage. It had a small footprint and supported all of the necessary SQL statements to make developing such applications a very straight forward experience. This software could have used some enhancements as for the allowance of standardized SQL objects such as store procedures, views and the like but not doing so was no reason not to use this excellent, small database engine.
After version 4.0 was released, Microsoft said goodbye to this product to the rather noticeable frustration and disappointment from the many developers who had come to rely on this product’s efficacy.
Why did Microsoft do this?
What we do know is that Microsoft replaced SQL Server CE with a new incarnation of SQL Server called LocalDB.
Whoever came up with this stupid construct should have been fired for trying to design new software while dropping acid.
I considered using LocalDB for a project I had been working on a few years ago and so I proceeded to understand how to go about implementing it as a localized database engine. I did all the necessary research and tinkering with this software that one would do when considering a new tool while figuring that is what “Local” in the name was supposed to provide. Needless to say, LocalDB was nothing more than some hack implementation with I imagine the idea that if one wanted to upgrade their desktop application to a multi-user version, moving the SQL data and its objects to a more robust SQL Server platform would be far easier than if relying on SQL Server CE.
Whatever the idea behind this cockamamie idea at Microsoft, it had nothing to do with developer productivity. And to be honest, having done quite a bit of reading on this database engine, I had no idea who would actually use it considering its awkward implementation as an application-centric database.
I have to imagine that Microsoft’s thinking was, “it will be fine…”. Developers, if need be, could easily make use of the popular SQLite database engine. And many most likely did as a result. Nonetheless, the dropping of SQL Server CE was like a slap in the face given that the product was popular and highly useful for its purposes.
And now we come to the Big One! Silverlight…
Silverlight was a sophisticated and innovative way to bring rich-client interfaces to the web. If anyone has not seen an enterprise application developed with it, than you could be forgiven for not understanding exactly what the hype was all about with this software development tool.
Silverlight was a design that probably could have superseded anything that is currently available now for web development had Microsoft continued to refine this software. With all the attempts to bring such interfaces to the web, nothing worked to the degree that Silverlight succeeded at. I am not saying that there weren’t issues with this platform (a major issue was that it was a browser-plugin tool) since I never worked with this tool. But I have seen what it can do and what I saw was quite impressive. Microsoft nonetheless, decided that its time had come and announced that it would no longer support this incredible software.
What we do know is at the very least, Silverlight probably did not fit into Microsoft’s long term plans (whatever that means) for involving the basis of all such development products, the .NET Framework.
What we also now know is that Silverlight has enough community support to be ressurected in a new open source project called OpenSilver (see… https://www.opensilver.net/)
We also know that with the 2014 introduction of Satya Nadella as Microsoft’s new CEO, Microsoft’s product depredations will most likley continue as the development of Microsoft’s .NET Core Framework(s) continue(s) apace.
One really has to wonder what goes on in the minds of these senior executives who apparently can drop and replace products at the euphemistic drop of a hat without much consideration for the businesses, users, and development communities who invest in, use and support the very products that Microsoft produces and sells.
Satya Nadella follows this trend quite closely with his continued emphasis on the Cloud and its many support products.
I always thought Steve Balmer was a buffoon but Satya Nadella to me is insidious. To me he represents everything that is wrong with American business these days, especially his rank stupidity. He is betting a lot on the development of the Cloud infrastructure while security analysts are continuing to report its inherent dangers to data integrity and news reporting has been increasingly demonstrating its vulnerabilities to such services being breached.
Aside from the fact that all Cloud services are centralizing repositories for multiple companies’ data, making them all juicy targets, one has to also understand that the larger the target the greater the risk to its being attacked. And given that the Internet still relies on 1970s technologies that had no inherent security built into them, there is no way that any such construct as the Cloud will ever provide rock-solid security even if researchers do manage to come up with quantum-based security algorithms. All the attackers will do is simply change tactics by using quantum computers to refine their techniques. They aren’t going to stop but instead just become more sophisticated, which many already are.
Anything can be breached in such a public domain construct. So the sensible thing to do is diversify the attack space by removing applications from the Internet and returning them to more secure forms of data-transfer such a standardized, client-server paradigms on closed networks while at the same time returning to more organizational based data centers. By producing more and smaller targets for attack, companies reduce their odds of being singled out for attack. As companies do this they can also implement more unique defenses instead of the cookie-cutter defenses that hosting services provide (a recent report has demonstrated that approximately 87% of business IT organizations do not even refine their Cloud Services security).
Does this mean that companies will no longer be attacked? No. But it does mean that the lessor known companies will probably have a lower profile instead of being raised to the same profile as that which a hosting service provides. However, I doubt Satya Nadella understands this and is simply seeing the dollar signs that may come with providing his own company’s Cloud service infrastructure following in Amazon’s footsteps.
People believe that such executives are inherently intelligent. They aren’t…
A somewhat final blow came to the .NET ecosystem with the announcement that the Windows Communication Foundation or WCF will no longer be supported in the continued move to the .NET Core Frameworks.
Why did Microsoft do this?
Windows Communication Foundation(WCF) has been, since its introduction, one of the foundational blocks in the creation of large .NET-centric enterprise networks requiring sophisticated communications between components that do not necessarily have any need to be within the Internet backbone of an application.
Software like WCF is required for such developments for those organizations that do not simply want to rely on the TCP-IP protocols and prefer an older but more mature Remoting-like infastructure.
Again, there have been complaints about this software (And what software tool does not have complaints about it?) but for Windows organizations, WCF has often been the go to choice for such endeavors. And despite the technical issues, setting up a basic, stand-alone service with remote clients is not all that difficult making its implementation, though requiring a learning curve, a somewhat straight forward experience.
But now its gone as well.
In its place, Microsoft has somewhat flippantly suggested that .NET developers consider using Google’s gRPC product, a basic remote-procedure call tool.
Google is not well known for its excellence in its product development and often drops such products or declines to polish them into well designed efforts with quality documentation, the latter which WCF certainly has in comparison.
One reason for killing off the WCF product line may be the fact that many organizations, given the severity and increase in data breaches in the past few years, may be in fact taking a cue from military science by retreating from such intense Internet-based development and instead reworking applications to be internal client-server endeavors that would be better protected from the deprivations from Internet hackers while also not requiring the outsourcing of data and infrastructure to Cloud services.
If this is in fact the case, Microsoft executives may have been thinking that the development community should be cut off at the pass by eliminating the very software that would allow for such an adjustment.
Trust me. These guys really do think this way…
Hopefully, the development group that is working on CoreWCF willbe able to succeed at creating this Open Sourec replacement… https://github.com/CoreWCF/CoreWCF
If we review what the .NET Core Frameworks are in fact supporting, in reality it isn’t much considering how much has been lost over the years. Thus, right now we have ASP.NET MVC with its new Blazor infrastructure for coding both client and server-side Internet components, the latter a seemingly reincarnation of WebForms to a degree, Windows Forms so that the game development community can be easily maintained, Universal Windows Platform(UWP) for multi-platform development, and surprisingly, Windows Presentation Foundation(WPF), which, if I remember correctly, initially wasn’t expected to make it into the .NET Core upgrades.
The resultant, final package then appears to center around Internet development with ASP.NET MVC, Blazor, REST APIs and their corresponding web services, and a smattering of other capabilities to keep the developer community from fleeing altogether.
Here is a 2016 statement from Microsoft’s own website summarizing the reasoning for the development of the .NET Core Framework…
.NET Core is a set of runtime, library and compiler components which can be used in various configurations for device and cloud workloads. Cross-platform and open source, .NET Core provides a light weight development model and the flexibility to work a variety of development tools OS platforms. .NET Core is available on GitHub under the MIT license. .NET Core refers to several technologies including .NET Core, ASP.NET Core and Entity Framework Core.
To flesh this summary out a little, here is a link to the core product support for .NET Core, which outlines basically what I have already described… https://docs.microsoft.com/en-us/dotnet/core/introduction
One gets the feeling that if one reads between the lines, there could be a hint that Microsoft may be getting ready to jettison the entire set of .NET software tools to the Open Source Community. This has already been suggested in the past and given the limited number of development areas .NET Core will support, doing so will not only allow Microsoft to eliminate a low-profit center since .NET with both its framework and development tools really do not provide all that much to Microsoft considering that its flagship Visual Studio offers more than enough to developers in its Community Edition form, while also providing the Open Source Community a generic product aimed at forcing a focus on Cloud Services, the area that Satya Nadella has already stated that this will be his focus for the company.
If my hypothesis is correct here, it’s basis is an irrational one since past software development road-maps were designed to keep businesses, users, and developers in the Microsoft orbit. But now it appears that Microsoft may want to distance itself from such communities while at the same time forcing them into a situation where they must use the Microsoft Cloud services. In a sense, it appears that Microsoft wants to emulate the Amazon business model.
More recent developments tend to support my theory; the announced dropping of continued development of the VB.NET language being one. Once touted as the language of Microsoft, BASIC has been kicked out of the Microsoft ecosystem moving C# to the front of the line, with F# a distant second.
Considering that VB.NET compiles to the same frameworks that C# does negating any real differences between the two languages in terms of performance and capabilities, one has to wonder why the dropping of VB.NET support in the first place. True, C# is the more dominant language but the VB.NET community is still a viable group of developers and engineers. And given the commonality found in all of the .NET languages, it is doubtful that substantial resources go into developing the VB.NET language.
However, other vendors are not only entering this language vacuum with their own products but are actually offering full blown .NET development IDEs, which in fact are also intended to support the VB.NET language.
In the first case, we have the recently announced RemObjects Software VB Mercury compiler that provides a complete development platform for VB.NET enthusiasts who want to continue developing in this language but want to move away from Visual Studio and the concerns that Microsoft is generating in this developer community. See… https://www.remobjects.com/
The Mercury Development Environment provides for the entire suite of original .NET Framework development endeavors, including that of ASP.NET WebForms and Silverlight… See… https://blogs.remobjects.com/2021/05/07/mercury/
Mercury is also completely cross platform as it can be used under Windows, Mac, and Linux. And Mercury can compile with the original .NET Frameworks as well as the new .NET Core frameworks.
Given the sophistication of the current state of Visual Studio, why couldn’t Microsoft simply have provided similar capabilities in their own software without futzing around with Visual Studio Mac and Visual Studio Code (for all platforms)?
Microsoft is a far larger organization with significant resources and yet it took a third party vendor to not only rescue the VB.NET Community but offer it what Microsoft has seemed unable or reticent to do.
Another entry into this arena is JetBrains with its Rider IDE (see… https://www.jetbrains.com/rider/), which allows for the complete development of all Visual Studio projects. Rider is also completely cross-platform.
However, unlike Visual Studio Community Edition, neither of them are free but neither is as expensive as the Professional Edition of Visual Studio either.
Finally we come to one of Microsoft’s flagship products, SQL Server. Here again, the development community is still dealing with the older model of SQL Server distribution, which is quite pricey for many companies. And yet in 2021, companies now have many choices as it regards highly capable database engines.
From the completely free and highly powerful PostgreSQL Database, which is now even providing the foundation for a major Oracle competitor with the EDB PostgreSQL Engine, PostgreSQL is a highly sophisticated and powerful database engine that can rival any commercially based engine, considering that it is based on the original commercial Ingress engine. And as mentioned, it is completely free with only its support options being paid for.
MySQL, the darling of Internet database development, has become a standard in the Open Source Community and is still offered freely in its Community Edition, while its powerful sibling MariaDB has formulated a similar business model.
And while not as popular in the States, the Firebird Database Engine has made its mark in Europe as a powerful Open Source database alternative. Unlike its competitors, Firebird is the only database engine to offer an embedded version that is completely compatible with its server-side big brother.
Originally based upon the 1990s sophisticated SQL Interbase Engine, Firebird has been extensively refined to become its own brand of database with its own loyal community.
The result is that there are now only 3 commercially available, major database engines for organizations; SQL Server, Oracle, and IBM’s DB2, the latter having become rather irrelevant in the bigger scheme of things despite its excellence.
Given that SQL Server competes directly with both PostgreSQL and MySQL, one may come to wonder how long Microsoft will hold onto this database engine in its distributed form. If the Microsoft Cloud Service can produce much more profit that would also make up for SQL Server’s loss in its distributed form we could expect to see this database engine jettisoned as well.
Before Satya Nadella became the CEO of Microsoft, the company was heavily focused on the Developer Community in terms of its support engine. Even with all the stupidity of Steve Ballmer, he still focused on professional developers to a great extent.
Nonetheless, with Nadella, Microsoft appears to have taken a turn towards a singularly focused future on Cloud Services and its necessary support products. We rarely hear of the enterprise from Microsoft any more. However, before Nadella the word, enterprise, was used extensively in Microsoft promotions.
Nonetheless, in terms of the Developer Community and what it used to represent to the company, there are definitive indications that Microsoft is looking in different directions altogether.
Many developers may disagree with such a position but given the direction of .NET Core’s developments there is really little other explanation that can be applied.
Many may say that Microsoft is merely streamlining its development tools. However, in reality what tools are actually being offered (other than the newer specialty tools such as machine learning) that provide for the development of applications that could not have been be done with earlier product technologies? Linux development? Microsoft could have easily created a Visual Studio version for Linux as it had done for the Mac.
And finally, there is very little reason to jump on the current .NET Core band-wagon given the fickle nature in which Microsoft has treated many of its technologies. The original .NET Framework technologies still work fine, offer more than this newer framework version and have larger in-depth knowledge bases to go with them. .NET Core may appear to be the shiny, new technology on the block but the possible reality may be is that it may lure businesses into directions they may not want to go…