Why is C#/.NET less popular in China than abroad?

Why is C#/.NET less popular in China than abroad?

Just for fun

Last updated 3/26/2022 9:23 AM
Python咖啡
8 min read
Category
.NET
Tags
.NET C#

This topic is a bit self-deprecating. I’ve been working with .NET since version 1.1, and it’s been 11 years now. I’ve watched .NET grow and expand in China, and in recent years I’ve witnessed it being looked down upon in various ways. Ultimately, I think the problem is that there are too few architects in China—I mean truly knowledgeable architects. A seasoned architect wouldn’t directly attack a programming language or dismiss it outright; instead, they would analyze performance, implementation costs, and potential pitfalls from the perspective of the operating system, server application containers, and so on.

I’ve actually talked with many clients, IT managers, senior software engineers, and architects, so I have some understanding of the facts. First of all, the tech community in China has a very restless and impetuous atmosphere. To what extent? It’s the same old Chinese habit—following trends, jumping on the bandwagon. If others use Node.js, we use Node.js; if others use Docker, we use Docker; if others use CloudFoundry, we use CloudFoundry. In short, whatever others have is more advanced than ours, so we have to keep up. Take Docker, for example: many traditional enterprises don’t even use it; it’s only a few big internet companies that are really fond of it. I admit Node.js performs well, but it’s essentially a weakly typed language, and the code maintenance cost isn’t low. Plus, you need to hire very experienced JavaScript developers, and their salaries naturally rise. In reality, many so-called architects and IT managers aren’t thinking about migration costs or operational costs—they’re just looking for something to do to show their value. I sum it up in four Chinese characters: “无中生有” (creating something out of nothing).

C# in .NET (my favorite) has evolved from version 1.0 to 6.0, and it’s already very mature. Especially with asynchronous programming support at the language level, it has partially surpassed Java. So why do companies still hesitate to choose it? From my perspective, there are several reasons.

First, Microsoft’s IDE is far too easy to use. So easy that even a fresh graduate who doesn’t know programming can write a simple console application within 1-2 days. But if it were Eclipse, just setting up the environment would take a while. And do you know what that means? It’s about the barrier to entry—the barrier for people! The easier a tool is to use, the lower the average skill level of its users. I’m not saying that .NET developers are all bad, but on average, there are fewer truly skilled .NET developers compared to Java developers, because the Java IDE is less comfortable to use, and people often resort to Notepad++ and the Java.exe compiler. This forces Java engineers to understand not just the “what” but also the “why”—otherwise, they can’t get their work done, for example, with JAR packaging. But many .NET programmers probably don’t even know how to compile a program using the command line. That’s the problem.

Second, some architects who claim to know .NET think it’s too simple, so they are unwilling to offer high salaries to .NET developers. This indirectly pushes many .NET developers to switch to other languages. It’s a vicious cycle. In the end, a large number of potentially excellent developers abandon .NET. After all, we live in an era where money matters. From my perspective, .NET is very suitable for backend development. Years of technical accumulation have earned it widespread recognition in the community. In fact, abroad, being skilled in .NET is quite valuable, and you don’t have to worry about finding a job. So the logic of some domestic companies strikes me as very strange, even astonishing. They simply refuse to hire .NET engineers—they think their company is too high-end, and only high-end languages like Java or Node.js can match their status. I can only say: no risk, no reward, but they’re asking for trouble.

Third, there aren’t many ready-made architectures you can copy in .NET, and truly experienced .NET architects are a rare species in China. The so-called architects in these companies have limited skills, and they can’t produce good architectural code in .NET themselves (I often call them “integrators”—people who either can’t write code or can’t write good code). In the end, they choose Java, because Java has a huge number of architectures to copy, many of which are open source. Even if they don’t fully understand it, they can at least copy 40-50%. Of course, from a project risk control perspective, that’s acceptable. But a truly senior architect can solve these problems. Abroad, many architecture experts write their own frameworks. That’s why excellent and popular frameworks are mostly written by foreigners—like Java’s Struts, Spring Framework, .NET’s Orchard, DNN, http://ASP.NET Boilerplate, etc.

Finally, Microsoft, as .NET’s “father,” certainly can’t escape responsibility. Ever since Nadella took over, the company has been pushing an open-source policy, embracing many non-.NET languages. Even though they launched the cross-platform .NET Core, their market strategy and promotion of .NET haven’t changed much from the past. In other words, they show an indifferent attitude toward .NET’s market share. Microsoft has always been a somewhat arrogant company in the industry—it believes that whatever it wants to push will surely succeed. So it never seems to care much about market share, thinking it will eventually own it all. But that didn’t work. The failure of Microsoft’s phones made the company realize its limitations. Recently, they seem to be adjusting their strategy. In retrospect, the cost has been very high—just the Nokia acquisition alone cost $8.5 billion. I can only marvel: Microsoft is really wealthy and can throw money around, haha.

I have to admit that in the last two years, .NET’s market share in China has been declining. To a large extent, this is related to .NET’s marketing strategy, which gives the industry the false impression that it’s a low-to-mid-level programming language. At the beginning of a language’s promotion, such a strategy is fine—it makes it easier for users to get started and accept it. But after ten years, it’s very necessary to re-establish .NET’s image as a high-end, powerful technology.

Some might say I’m just bragging about my own goods. Let me give you some real-world .NET examples, and you’ll understand. The backend of Shanghai’s license plate bidding system is written in .NET, handling at least several thousand concurrent requests per second. Everyone knows that. The core of Stackoverflow is written in .NET, handling 3,000 concurrent requests per second on the website and 8,000 database concurrent queries per second. Morgan Stanley’s trading client and protocols are written in .NET. NASDAQ’s trading system is written in .NET, with SQL Server running in the background. Tencent has a large number of backend systems written in .NET, and they’ve even been using cross-platform .NET (Mono) for many years, deployed on their TLinux system clusters. Ctrip has many systems written in .NET, with a daily dynamic page view of 30 million.

Facts speak louder than words. I won’t say more. You know what I mean.

Keep Exploring

Related Reading

More Articles