この話題はちょっと自虐的だね。私は.NET 1.1から始めて、もう11年になる。.NETが成長し、中国で発展していくのを見てきたし、ここ数年で.NETがいろいろと嫌われるのも見てきた。結局のところ、中国にはアーキテクトが少なすぎるんだ。本当に理解しているアーキテクトがね。ベテランのアーキテクトは、言語を直接攻撃したり嫌ったりはしない。むしろ、オペレーティングシステムやサーバーアプリケーションコンテナのレベルから、パフォーマンス、実装コスト、そしてどれだけの落とし穴があるかを分析するものだ。
実は多くの顧客、ITマネージャー、シニアソフトウェアエンジニア、アーキテクトと話してきたので、事実についてはある程度理解している。まず、中国の技術界の雰囲気は非常に浮ついている。どれくらい浮ついているかというと、中国の古い癖で、流行に乗りたがり、群れたがる。向こうがNode.jsを使えば、我々もNode.jsを使う。向こうがDockerを使えば、我々もDockerを使う。向こうがCloud Foundryを使えば、我々もCloud Foundryを使う。とにかく、向こうのものは我々より進んでいるから、追いつかないといけないと思っている。Dockerを例にとると、実際には多くの伝統的な企業は使っていない。一部の大手インターネット企業が特に好んでいるだけだ。Node.jsはパフォーマンスが良いことは認めるが、やはり弱い型付けの言語であり、コードのメンテナンスコストは決して低くない。それに、非常に熟練したJavaScript開発者を雇う必要があり、給料は当然上がる。多くのいわゆるアーキテクトやITマネージャーが考えているのは、移行コストや運用コストではなく、どうやって仕事を作り出すか、それによって自分の価値を示すかだ。私はこれを「無中生有(ないところから有を生み出す)」とまとめている。
.NETのC#言語(私の一番好きな言語)は、1.0から6.0に進化し、現在は非常に成熟している。特に言語レベルでの非同期プログラミングのサポートは、すでに部分的にJavaを超えている。それでもなぜ企業がこれを選ばないのか?私の見解では、いくつかの理由がある。
まず、MicrosoftのIDEはあまりにも使いやすく、新卒者でも、プログラミングがわからなくても1~2日でコンソールプログラム(もちろん簡単なもの)を書けるほどだ。一方、Eclipseでは環境設定にかなり時間がかかる。しかし、これが何を意味するかわかるか?参入障壁だ!人の質の障壁だ!使いやすいツールほど、集まる人のレベルは相対的に低くなる。もちろん、.NETを使う人がすべてダメだと言っているわけではない。平均的に言って、本当に.NETを理解している開発者は、Javaを理解している開発者より少ない。なぜなら、JavaのIDEは使いにくく、むしろNotepad++とjava.exeでコンパイルしたほうがましだからだ。その結果、Javaエンジニアは多くの場合、Why(なぜそうなるのか)を理解しなければ仕事ができない。例えばjarのパッケージングなど。しかし、多くの.NETプログラマーは、コマンドラインでプログラムをコンパイルする方法すら知らないかもしれない。これが問題だ。
次に、.NETを理解していると自称するアーキテクトたちは、.NETは簡単だと考え、.NET開発者に高い給料を払いたがらない。これが間接的に、多くの.NET開発者が他の言語に転向する原因となっている。これは悪循環だ。最終的には、潜在的に優秀な開発者の多くが.NETを捨てることになる。何せ、今はお金重視の時代だから。私の見解では、.NETはバックエンドに非常に適している。長年の技術の蓄積により、.NETはコミュニティで広く認められている。実際、海外では.NETを理解していることは非常に有利で、仕事に困ることはない。だから、中国の一部の企業の論理は非常に奇妙だと思う。時には不思議にさえ思う。とにかく.NETエンジニアは採用しない、我が社はハイソサエティだから、ハイソサエティなJavaやNode.jsだけが我が社にふさわしい。ただ言いたい、「やらなければ死なない(自業自得)」と。
さらに、.NETにはコピーできる既存のアーキテクチャが多くない。そして、本当に.NETを理解しているベテランアーキテクトは中国ではほぼ希少種だ。なぜなら、これらの企業のいわゆるアーキテクトの能力は限られており、自分たちで.NETを使って良いアーキテクチャのコードを書けないからだ(私は彼らを「インテグレーター」と呼ぶのが好きだ。つまり、コードを書けない、あるいはうまく書けないアーキテクトのことだ)。結局、Javaを選ぶ。なぜならJavaにはコピーできるアーキテクチャが大量にあり、多くはオープンソースで、たとえ理解できなくても4~5割はコピーできるからだ。もちろん、プロジェクトのリスクコントロールという観点からは許容できる。しかし、実際にはベテランアーキテクトはこれらの問題を解決できる。海外では多くのアーキテクトの達人が自分でフレームワークを書いている。これが、優秀で人気のあるフレームワークのほとんどが西洋人によって書かれている理由を説明している。例えばJavaのStruts、Spring Framework、.NETのOrchard、DNN、ASP.NET Boilerplateなどだ。
最後に、Microsoftは.NETの実の親として責めを免れない。ナデラCEOが就任して以来、オープンソース政策を積極的に推進し、多くの非.NET系言語を受け入れてきた。クロスプラットフォームの.NET Coreをリリースしたが、.NET市場の展開とプロモーションに関しては過去と特に変わらない。つまり、.NETのシェアに対して無頓着な態度を示している。ただし、Microsoftは業界内でかなり傲慢な会社であり、自分が推したいものは必ず成功すると考えている。そのため、市場シェアをあまり重視していないように見える。気にする必要はない、いずれはMicrosoftのものになる、と思っている。しかし、それは無駄だった。Microsoftの携帯電話の失敗により、自分たちの能力の限界を痛感したようだ。最近は戦略を調整しているようだが、振り返ってみると代償は非常に高かった。ノキアの買収だけでも85億ドルかかった。私はただ「Microsoftは本当に太っ腹で、金に任せて好き放題している」と感嘆するしかない。笑。
この2年で、.NETの中国市場シェアは確実に低下している。これは主に.NETのマーケティング戦略に関係しており、業界内で中低級プログラミング言語という誤ったイメージを与えている。言語導入の初期にはこの戦略は間違っていなかった。ユーザーが習得しやすく受け入れやすいからだ。しかし、今や10年が経過した。.NETのハイレベルな技術イメージを再構築する必要がある。
「自分の物を売り込んでいる」と言う人もいるかもしれない。いくつかの実際の.NET事例を挙げればわかるだろう。上海のナンバープレートオークションシステムのバックエンドは.NETで書かれており、少なくとも毎秒数千の同時アクセスがある。これは皆さんご存知の通りだ。Stackoverflowの中核は.NETで書かれており、毎秒3000の同時アクセス、データベースは毎秒8000の同時アクセスを処理している。モルガン・スタンレーの取引クライアントとプロトコルは.NETで書かれている。NASDAQの取引システムは.NETで書かれており、バックエンドはSQL Serverだ。Tencentは多数のバックエンドシステムを.NETで書いており、Tencentはすでにクロスプラットフォーム.NET(Mono)を長年使用し、自社のTLinuxシステムクラスターにデプロイしている。Ctrip(携程)は多数のシステムを.NETで書いており、日次動的PVは3000万だ。
事実は雄弁に勝る。これ以上は言うまい。皆さんおわかりだろう。