2013年的时候我就注册了博客园,第一从业编程语言是C#。
那会儿还有点流量。张善友是微软C#的中国步道师,当他还在腾讯垂死挣扎的时候我还差点信了,最后还是直接转go语言了。
2015年那会儿经常在网上跟java boy(JB)们互喷,现在想想还有点搞笑。
2020年在科兴科学园的电梯见过他一面,我当面说了一句“C#现在不是不行了吗?”他非常尴尬,但由于我们在同一个下行的电梯,于是出于礼貌敷衍了我一下。
形式逻辑和定义
皮裤原理:在回答别人问题的时候。不一定要告诉他真实的答案。很多时候,告诉他一个符合他想象的答案,可能效果更好。因为不是每一个人,都有勇气去接受他不懂的东西,愿意去理解他未知的领域。对绝大多数人来说,更倾向用已有的想法,去解释看到的一切。
AOT 动态库(Ahead-of-Time Dynamic Library) 是 .NET 在 AOT 编译模式下生成的一类可被其它语言、引擎或平台调用的 原生动态链接库(如 .dll、.so、.dylib)。它让 C# 代码能够像 C/C++ 编译的库一样被引用,不需要 .NET 运行时参与执行。
背景
.NET(以下简称N)心里想:现在企业级应用.NET用的少,但起码.net的语法特性优美,IDE宇宙最强吧,啧啧.
JAVA(以下简称J)心里想:我大JAVA遍地开花,什么Android,kotlin,scale,总之就是一个字:叼.
撕逼大战

事情的发生是从落魄N想学安卓开始.他接触了一段时候后,吐槽Android studio开始的.大家知道这玩意很多坑的,随后N就随带的埋怨其老东家Google起来最后连java也一起喷了起来.为了公正我们把喷点罗列出来.
- 项目无故卡死
- 模拟器横竖屏bug
- 呆逼虚拟机简直逗比,性能杀手
- java不支持隐式变量声明
J: .net 都不知道是用来干嘛的。。 大型集群不行。。开发人员不多。。。 还要授权费。。
N: 存储方案也可以用MySQL啊 , 只是一些系统的集成方案都被java的占了
J: 因为当时.net还没开源啊 , 不可否认这就是开源的力量 , 最后还不是被逼到要开源
N心里想:尼玛这关开源什么关系.然后说:25台服务器撑起了stackoverflow.com,说集群不行是偏见吧. 应用的瓶颈不能怪语言,是人的技术问题.
J: 集群可以的话,京东就不会忍痛改为Java了
N:那是语言设计问题好吗? 关应用性能什么事?
J:那是语言设计的问题,不喜欢可以不用啊. 而且你说的语法糖Java8已经支持了 . scale 也是支持语法糖
N: 你确定java8有隐式变量类型推断?
J:我说的是语法糖,你知道什么是语法糖吗?
N: var就不叫语法糖吗
J: 喜欢这种编程方式的可以使用这种语言(kotlin),编译后一样是Java的字节码,各种新特性,这就是开源带来的好处,就算让.net抄,也可以带来压倒性的东西
N想:尼玛你自己打不过了竟然召唤你的基友,不同种语言好吗?我.NET还能编译成MSIL呢我是不是该把他给叫出来.MSbuild都开源了真他妈跨平台编译了我是不是也得把他召唤出来,但是出于逼格,N说: 说的好像java比.NET之前就有拉姆达表达式似得 .
J: 说的好像整个运行机制不像Java一样
路人甲及时补刀:你那么喜欢.net还学安卓干什么
N知道事态不对了,自己进了狼群了,赶紧身退: 好坏都是比较产生的,拿自己好处和对方短处比.没有可比性,反过来也是一样.不理智,只能说各有千秋.不让人有批评意见的社会是不会有进步空间的,好吗?你活在天朝不满意政府难道你就非得投河自尽吗,还不是得苟延残喘下去.散了吧,不合你们扯了
J看起来很不服气,继续鞭尸一把: 切,你在一个都是用Java的群数落Java,不打你打谁,语言无分好坏,但你在人家的地盘数落人家的吃饭工具,连做人的基本礼貌都不会,还要谈理智?重点是自己又不是很懂Java,还在自己说Java怎样,不懂Android的虚拟机,还在说Android的虚拟机??
没错,被鞭尸的人就是我.针对最后一句话,我想说,呆逼虚拟机低能,大家自己看新闻,很好的话Google后来搞ART干嘛?自己的东西不好就不让别人喷,这是思想狭隘的表现.我想说的是,.NET不好的地方多了去了,但我不会和你们说,但你们说中那就说中了憋,这是事实,我为什么有能力去反驳?哈哈.当然,最后这段话我只是在这里讲,因为我想起了皮裤原理.
这些人极度自负。
来自2025-11-27的思考
以上内容整理自2015-04-27 23:48在博客园发表的文章,从今天看来,博客园已经快倒闭了,而张善友先生创办了深圳友浩达,不变的是依旧当着微软MVP。从TIOBE 上看,C# 目前正在逐步蚕食 Java 的市场份额,而且现在 .net core 可以通过AOT 动态库编译成纯原生机器码,供以下语言使用:
- C/C++
- Go
- Rust
- Python(通过FFI)
- Unity Native Plugin
- iOS / Android Native
以C++来说,相当于我可以用 .NET core 写 C++代码,这属于是直接偷家了。微软不亏是编程语言界第一邪恶组织。
最近又有了新的命名空间,真是可喜可贺:
- IAsyncEnumerable 异步数据流处理
- System.Threading.Channels “借鉴”golang 的channel
- EFCore.BulkExtensions ORM 批量写入

参考链接
[1] 月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer https://www.cnblogs.com/zeusro/p/4461808.html
[2] 月薪集中8k-17k,跳槽率不足四成,Java稳居榜首… https://zhuanlan.zhihu.com/p/711520388
[3] Get up to speed with .NET: What new for .NET Conf 2022 https://developer.microsoft.com/en-us/reactor/events/17372/
Back then the platform still had some traffic. Zhang Shanyou was Microsoft’s C# evangelist in China. When he was still struggling at Tencent, I nearly believed him. In the end, I switched directly to the Go language.
In 2015, I often fought online with “java boy” (junky boy). Thinking back now, it’s a bit funny.
In 2020, I met him once in the elevator at Kexing Science Park. I said to him: “Isn’t C# not doing so well now?” He looked very embarrassed, but since we were in the same downward elevator, he responded politely.
Formal Logic and Definitions
*Leather Pants Principle **:
When answering someone’s question, you don’t always need to tell them the real answer. Very often, giving them an answer that *matches their imagination works better. Because not everyone has the courage to accept that they don’t understand something or is willing to explore an unknown field. Most people prefer to use their existing beliefs to explain everything they see.
AOT Dynamic Library (Ahead-of-Time Dynamic Library) is a type of native dynamic library (such as .dll, .so, .dylib) generated by .NET under AOT compilation mode. It allows C# code to be referenced like C/C++ libraries, without requiring the .NET runtime to execute.
Background
.NET (hereinafter referred to as N) thinks: enterprises may not use .NET much nowadays, but at least the syntax is elegant, and its IDE is the strongest in the universe.
JAVA (hereinafter referred to as J) thinks: Java is everywhere — Android, Kotlin, Scala — in short: awesome.
The Flame War

The story began when the declining N wanted to learn Android. After some experience, he started complaining about Android Studio. Everyone knows how buggy it can be. Naturally, N also blamed Google and eventually complained about Java as well. For fairness, here are the complaints:
- Projects freeze without reason
- Emulator rotation bugs
- Dalvik VM is ridiculous, a performance killer
- Java doesn’t support implicit variable declaration
J: “.NET is practically useless… can’t handle large clusters… few developers… needs licensing…”
N: “Storage solutions can use MySQL too. It’s just that many enterprise integrations were taken by Java.”
J: “Because .NET wasn’t open-source at that time. This is the power of open source. In the end .NET was forced to open source anyway.”
N thinks: “What does open-source have to do with this?”
Then says: “25 servers support stackoverflow.com. Saying .NET can’t scale is prejudice. Performance bottlenecks are about people, not languages.”
J: “If .NET scaled well, JD.com wouldn’t have painfully switched to Java.”
N: “That’s a language design issue! Not application performance!”
J: “If you don’t like the design, don’t use it. And the syntax sugar you mentioned already exists in Java 8. Scala also supports syntax sugar.”
N: “Are you sure Java 8 supports implicit type inference?”
J: “I said syntax sugar. Do you even know what that means?”
N: “Isn’t var syntax sugar?”
J: “If you like that style, you can use Kotlin. It compiles to Java bytecode with all the new features. This is the power of open source. Even if .NET copies, it still can’t compete.”
N thinks: “Damn, you can’t win so you summon your allied language? Different languages, okay? .NET can compile to MSIL too. Should I summon MSBuild next? MSBuild is open-source and cross-platform now. Should I bring that up?”
But to maintain some dignity, N says: “You make it sound like Java had lambda expressions earlier than .NET.”
J: “You make it sound like your runtime mechanism is not similar to Java’s.”
Bystander: “If you love .NET so much, why are you learning Android?”
N realizes the situation is bad — he walked into a den of Java fans. He quickly retreats:
“Good and bad are relative. Comparing your strengths with others’ weaknesses is meaningless. Each language has its merits. A society without criticism cannot progress. If you’re unhappy with the government, will you jump into a river? No — you still struggle on. Let’s stop here, this is pointless.”
J is not satisfied and strikes again:
“Cut it out. You insult Java in a Java group — who wouldn’t hit you? Languages have no inherent good or bad, but you insult people’s livelihood tools on their turf. That’s not basic manners. And you’re not even good at Java, yet you judge Java? You don’t understand Android’s VM yet you criticize it?”
Yes, the one being beaten was me. Regarding the last sentence: Dalvik VM really was awful. Just look at the news — why else did Google create ART later? If something is bad, others can point it out. Pretending criticism is forbidden is narrow-minded. .NET has many flaws too. I just didn’t mention them. But if someone points them out, that’s fair — it’s the truth. Why can’t I refute? Haha. Of course, I only say this here, because I remembered the Leather Pants Principle.
These people were extremely arrogant.
Thoughts from 2025-11-27
The above content is compiled from an article published on cnblogs on April 27, 2015 at 23:48. Judging from today’s situation, cnblogs is almost defunct, while Mr. Zhang Shanyou founded Shenzhen Youhaoda, and remains a Microsoft MVP. According to TIOBE, C# is gradually eroding Java’s market share, and now .NET Core can be compiled into pure native machine code via AOT dynamic libraries for use by the following languages:
1
2
3
4
5
6
• C/C++
• Go
• Rust
• Python (via FFI)
• Unity Native Plugin
• iOS / Android Native
For C++ developers, this means I can write C++-callable libraries using .NET Core — essentially infiltrating their home turf. Microsoft truly is the most “evil” organization in the programming language world.

References
[1] 月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer https://www.cnblogs.com/zeusro/p/4461808.html
[2] 月薪集中8k-17k,跳槽率不足四成,Java稳居榜首… https://zhuanlan.zhihu.com/p/711520388
[3] Get up to speed with .NET: What new for .NET Conf 2022 https://developer.microsoft.com/en-us/reactor/events/17372/ In 2013, I registered my Blog Garden (博客园) account. My first professional programming language was C#.
2013年的时候我就注册了博客园,第一从业编程语言是C#。
那会儿还有点流量。张善友是微软C#的中国步道师,当他还在腾讯垂死挣扎的时候我还差点信了,最后还是直接转go语言了。
2015年那会儿经常在网上跟java boy(JB)们互喷,现在想想还有点搞笑。
2020年在科兴科学园的电梯见过他一面,我当面说了一句“C#现在不是不行了吗?”他非常尴尬,但由于我们在同一个下行的电梯,于是出于礼貌敷衍了我一下。
形式逻辑和定义
皮裤原理:在回答别人问题的时候。不一定要告诉他真实的答案。很多时候,告诉他一个符合他想象的答案,可能效果更好。因为不是每一个人,都有勇气去接受他不懂的东西,愿意去理解他未知的领域。对绝大多数人来说,更倾向用已有的想法,去解释看到的一切。
AOT 动态库(Ahead-of-Time Dynamic Library) 是 .NET 在 AOT 编译模式下生成的一类可被其它语言、引擎或平台调用的 原生动态链接库(如 .dll、.so、.dylib)。它让 C# 代码能够像 C/C++ 编译的库一样被引用,不需要 .NET 运行时参与执行。
背景
.NET(以下简称N)心里想:现在企业级应用.NET用的少,但起码.net的语法特性优美,IDE宇宙最强吧,啧啧.
JAVA(以下简称J)心里想:我大JAVA遍地开花,什么Android,kotlin,scale,总之就是一个字:叼.
撕逼大战
事情的发生是从落魄N想学安卓开始.他接触了一段时候后,吐槽Android studio开始的.大家知道这玩意很多坑的,随后N就随带的埋怨其老东家Google起来最后连java也一起喷了起来.为了公正我们把喷点罗列出来.
- 项目无故卡死
- 模拟器横竖屏bug
- 呆逼虚拟机简直逗比,性能杀手
- java不支持隐式变量声明
J: .net 都不知道是用来干嘛的。。 大型集群不行。。开发人员不多。。。 还要授权费。。
N: 存储方案也可以用MySQL啊 , 只是一些系统的集成方案都被java的占了
J: 因为当时.net还没开源啊 , 不可否认这就是开源的力量 , 最后还不是被逼到要开源
N心里想:尼玛这关开源什么关系.然后说:25台服务器撑起了stackoverflow.com,说集群不行是偏见吧. 应用的瓶颈不能怪语言,是人的技术问题.
J: 集群可以的话,京东就不会忍痛改为Java了
N:那是语言设计问题好吗? 关应用性能什么事?
J:那是语言设计的问题,不喜欢可以不用啊. 而且你说的语法糖Java8已经支持了 . scale 也是支持语法糖
N: 你确定java8有隐式变量类型推断?
J:我说的是语法糖,你知道什么是语法糖吗?
N: var就不叫语法糖吗
J: 喜欢这种编程方式的可以使用这种语言(kotlin),编译后一样是Java的字节码,各种新特性,这就是开源带来的好处,就算让.net抄,也可以带来压倒性的东西
N想:尼玛你自己打不过了竟然召唤你的基友,不同种语言好吗?我.NET还能编译成MSIL呢我是不是该把他给叫出来.MSbuild都开源了真他妈跨平台编译了我是不是也得把他召唤出来,但是出于逼格,N说: 说的好像java比.NET之前就有拉姆达表达式似得 .
J: 说的好像整个运行机制不像Java一样
路人甲及时补刀:你那么喜欢.net还学安卓干什么
N知道事态不对了,自己进了狼群了,赶紧身退: 好坏都是比较产生的,拿自己好处和对方短处比.没有可比性,反过来也是一样.不理智,只能说各有千秋.不让人有批评意见的社会是不会有进步空间的,好吗?你活在天朝不满意政府难道你就非得投河自尽吗,还不是得苟延残喘下去.散了吧,不合你们扯了
J看起来很不服气,继续鞭尸一把: 切,你在一个都是用Java的群数落Java,不打你打谁,语言无分好坏,但你在人家的地盘数落人家的吃饭工具,连做人的基本礼貌都不会,还要谈理智?重点是自己又不是很懂Java,还在自己说Java怎样,不懂Android的虚拟机,还在说Android的虚拟机??
没错,被鞭尸的人就是我.针对最后一句话,我想说,呆逼虚拟机低能,大家自己看新闻,很好的话Google后来搞ART干嘛?自己的东西不好就不让别人喷,这是思想狭隘的表现.我想说的是,.NET不好的地方多了去了,但我不会和你们说,但你们说中那就说中了憋,这是事实,我为什么有能力去反驳?哈哈.当然,最后这段话我只是在这里讲,因为我想起了皮裤原理.
这些人极度自负。
来自2025-11-27的思考
以上内容整理自2015-04-27 23:48在博客园发表的文章,从今天看来,博客园已经快倒闭了,而张善友先生创办了深圳友浩达,不变的是依旧当着微软MVP。从TIOBE 上看,C# 目前正在逐步蚕食 Java 的市场份额,而且现在 .net core 可以通过AOT 动态库编译成纯原生机器码,供以下语言使用:
1
2
3
4
5
6
• C/C++
• Go
• Rust
• Python(通过FFI)
• Unity Native Plugin
• iOS / Android Native
以C++来说,相当于我可以用 .NET core 写 C++代码,这属于是直接偷家了。微软不亏是编程语言界第一邪恶组织。
参考链接
[1] 月经贴:当落魄的.NET基佬遇上不可一世的JAVA派 developer https://www.cnblogs.com/zeusro/p/4461808.html
[2] 月薪集中8k-17k,跳槽率不足四成,Java稳居榜首… https://zhuanlan.zhihu.com/p/711520388
[3] Get up to speed with .NET: What new for .NET Conf 2022 https://developer.microsoft.com/en-us/reactor/events/17372/