截至 .NET 6, C# 在后端开发领域的生态与 Java 还有哪些差距?

2022-04-07 17:10:55 +08:00
 wdhwg001

如题,这里的“生态差距”不包括岗位、薪酬、求职与招工难度等人力资源生态问题。

就我个人感觉来说,C# 在语法上确实要香的多,性能更好,而且 VM 也远不需要 Java 的那些黑魔法。

但是,总有人说 C# 的生态很不好,想知道到底二者之间有哪些差距?有哪些库或中间件是 Java 特供而 C# 没有或发展极不完善的呢?对于实际的后端开发会有多少影响?

以及,也常听说全球范围内的 C# 生态好一些,那么如果忽视掉这些 Java 非全球范围的大厂自研开源和中文社区特供的部分的话,C# 和 Java 在后端领域的差距又有多少呢?

( PS:这里讨论的 C# 特指 .NET 6, 不讨论 Mono 、.NET Framework 以及各 AOT ,也不讨论 IIS 及早已不存在了的 Windows/Linux 平台问题。)

9225 次点击
所在节点    程序员
83 条回复
Fule
2022-04-08 15:03:07 +08:00
招.NET 初级人员确实困难,毕竟培训机构啥的全是 Java 。我招了一个学 Java 的,来了之后转 C#,很快他就再也不想用 Java 了。
FrankHB
2022-04-08 15:25:53 +08:00
@huang119412 你有动机和稀泥我可以理解,但居然还好意思说历史?能别在自己一窍不通的领域里那么颠倒黑白不。

Java 诞生的时候优秀在哪?一个面向嵌入式设备的原型从来就没真正成功过( JavaME ?算了 8 ),转“企业级”应用开始也没多成功( EJB 之类的黑历史),反而在 Web 服务器失之东隅收之桑榆,这算历史的玩笑就罢了,什么时候算是 Java 光荣了?
“优秀”的语言有脸在 20 世纪 90 年代设计出尽是一等(first-class)残废拼凑的特性,然后隔了几十年才被迫加入超过半个世纪前就成熟了的 lambda ( untyped 的都快一个世纪了)?

还语法糖多,你真懂什么叫语法(syntax)嘛?

要黑 C#也黑点子上,起码黑点 semantics 上比如 async/await 这种弱鸡抽象不堪大用,连 Web 前端都知道( e.g. blog.logrocket.com/async-await-is-the-wrong-abstraction ),结果还 dssq 甚至污染到 C 艹了。
你上道点整个 one-shot continuation 会死?
哦,你 Go 的 goroutine 更加弱鸡,Java 根本就没有……散了散了。

真要我暴论钦点,好意思在语言里直接提供什么 method 这种缺乏 formal significance 的破烂抽象,要么是 DSL ,就是垃圾。(我是不嫌地图炮不够大的。)
Chad0000
2022-04-08 15:28:18 +08:00
@FrankHB 我也想回他的,想想还是 block 简单些
yejinmo
2022-04-08 17:13:21 +08:00
说生态割裂的 真的是从事 C# 开发的么?
很多通过 Nuget 提供的包都是采用 .Net Standard 2.0 分发的 这之后的 .Net 都可以兼容啊

ivyliner
2022-04-08 18:25:24 +08:00
@sinnosong1 " 建议开滴滴,这行不适合你。 " 没想到你的戾气这么重, 既然你喷我, 我也反击一下吧.
"这个人说的是不能开发并运行" 注意我并没说不能开发并运行, 麻烦重新阅读下面的句子, 如果理解不了, 建议重新读小学, 这行也不适合你.

"作为一个非后端开发人员不知道在 macOS 上是否可以开发并运行 .NET, 但是我知道 Java 可以. "
ivyliner
2022-04-08 18:29:43 +08:00
@INCerry 为什么我好像很少在 linux 和 macOS 上见到 C# 开发的程序呢? QT 到时见到不少, 或者可以介绍一下在 linux 和 macOS 上有什么比较有名的软件吗 ?
如果我开发了一个 C# 的程序, 要在 linux 或者 mac 上跑起来的话, 需要额外安装 .NET Framework 之类的吗 ?
还是直接打包一个 DMG 之类的程序, 直接可以跑起来 ?
ivyliner
2022-04-08 18:44:36 +08:00
@BenX 我吐槽微软命名不好的原因是比如你看看#64 的图, 在名字命名上感觉特别容易让人弄混.
.Net , .Net Core, .Net Standard, .Net Framework 有什么区别 ?
MonoMac 和 Xamarin.Mac 什么关系 ?
Visual Studio 和 Visual Studio Code 有什么关系 ? 直觉上 VS Code 应该是 VS 的一个附属或者子集的产品吧.
INCerry
2022-04-08 19:09:07 +08:00
@ivyliner
> 为什么我好像很少在 linux 和 macOS 上见到 C# 开发的程序呢?
- 可能这些桌面占有率太低了,C#桌面主要在 Windows

> QT 到时见到不少, 或者可以介绍一下在 linux 和 macOS 上有什么比较有名的软件吗 ?
- 这是问 C#开发工具吗?有 VS for Mac (只有 Mac 可用)、Rider 、VS Code

> 如果我开发了一个 C# 的程序, 要在 linux 或者 mac 上跑起来的话, 需要额外安装 .NET Framework 之类的吗 ?
- 有几种方案,第一就是安装.NET Core Runtime 。第二可以在发布程序的时候选择自带运行时。第三可以 AOT 编译成目标平台的二进制文件。除了第一种需要安装依赖以外,其它都能直接跑起来

附上.NET 新手资料:
https://dotnet.microsoft.com/zh-cn/
https://dotnet.microsoft.com/zh-cn/languages/csharp
https://dotnet.microsoft.com/zh-cn/learn
https://dotnet.microsoft.com/zh-cn/platform/why-choose-dotnet
https://dotnet.microsoft.com/zh-cn/apps/xamarin
libook
2022-04-08 19:27:45 +08:00
干活都能干,有轮子就用,没有轮子也都可以自己造,用哪个顺手就用哪个,我还用 JS 写后端呢,任凭很多人觉得各种不好,我基本都能达到我的预期目标。

对于个人来说,我可能更多考虑好不好找工作,这个不同行业不同地区的情况差别可能很大,可以参照一下当地的招聘平台的情况再做结论。

另外任何项目发展到一定规模,统一技术栈的成本可能就越高,比如涉及到大数据部分了你 C#用得再溜,可能用 Java 成本会更低。再如涉及到游戏领域,你 Java 再怎么牛,可能还是避免不了用 C#。
那么最终的结论就是,我全都要。
Rwing
2022-04-08 20:01:48 +08:00
@vone 您这个有点无脑黑了,很多语言包括但不限于 go nodejs php 等等的 lts 都是 3 年或者更少。
你说的这些 breaking change 普通开发者根本感觉不到。再说哪个语言的大版本没有 breaking change 的……
zxCoder
2022-04-08 20:13:38 +08:00
都给你排除完了。。。

c#主要就一个问题,写 c#的老古板(非贬义)程序员比较多,java 是前几年培训班火热带来了一大批年轻人

像我大学,java 教的是 springboot ,ssm 那套,学好点出去混口饭吃没问题吧。c#教的是拖控件的那一套。。。(当然你可以说这是幸存者偏差。。。)
zxCoder
2022-04-08 20:16:10 +08:00
感觉跑题了。仔细看了主题,按你说的,那没区别,都排除了人,哪还有生态问题,库的 star 数很少这算不算生态问题?
Cbdy
2022-04-08 20:33:34 +08:00
@INCerry 我只是分享一个身边的案例,还有个朋友在携程的,他们前几年用 Java 把整个公司所有的 .NET 系统全部重写了,现在微软的技术栈估计就剩下一些 MSSQL Server 了吧
INCerry
2022-04-08 20:41:38 +08:00
@Cbdy
> 照理说这种小众技术应该给钱多才对,比如 Ruby 程序员一般薪资对比 Java 高
- 其实 C# 不是小众技术,看招聘岗位数量它仅次于 Java ,在互联网公司比较少

> 我只是分享一个身边的案例,还有个朋友在携程的,他们前几年用 Java 把整个公司所有的 .NET 系统全部重写了,现在微软的技术栈估计就剩下一些 MSSQL Server 了吧
- 看招聘信息的话,携程貌似又把它捡起来了,之前还有猎头找我,说是机票新业务,具体情况也不太清楚,我的亲身经历的话,钱给够啥都好说。
dufu
2022-04-08 21:08:05 +08:00
1. c# 与 Java 真正的生态差距是码农的数量,Java 码农的数量 > C# (远远大于)
2. 不考虑做产品,对于接项目的公司来说,一个新项目,如果客户没有要求,那么大部分会用 Java 实现,因为 Java 的人好找,c#的人走了之后,再找比较难,即使花更多的钱,也未必能找到一样好的。
3. 对于老项目的( web )升级改造,即便是 C#的,如果客户没有要求,基本也和 2 一样

4. 语法糖,语言特性方面,个人感觉 C#要比 java 好一点
5. 其他中间件等使用上面,基本都支持 c#和 Java
h82258652
2022-04-08 22:10:05 +08:00
人少且普遍质量不高。培训班前几年不开.net 了,加上入门比 java 简单导致这一点。
生态嘛,轮子那肯定是比 java 少。这里说几个我之前碰到的。
图形验证码,这里跳过谷歌的 recaptcha ,因为国内环境嘛,你懂的。nuget 搜了下,下载量较大的基本没有,后来干脆自己用 skiasharp 撸一个算了。
CRC16 ,别问为什么用过时算法,以前待的公司项目重构。本来打算换现成库提升效率的,结果 nuget 一搜也是没有能用的,最后还是用了重构前的代码。
其它例如 ES 在.net 下也没有替代品,那还是要装 JDK 。当然用 docker 这没啥的,这里仅说手动部署的情况。
Web 框架方面,没有像 Spring 那样的全家桶,abp (这里当然是指 vnext )虽然看上去很强大很美好,但是大版本 break change 还是不少,至少我 4.4 升 5.0 碰到了。

不过写 C#比 java 爽太多是事实,类型推断、LINQ (进一步导致 EF 的出现)、异步( java 要不用 callback 要不 RxJava ,不过我也很久没写 java 就是了),论快速把一个项目弄完上线的,基本没几个比 C#快了。
ychost
2022-04-08 22:36:51 +08:00
讲真的 C# 写起来比 Java 愉快很多,Linq 和 EF 简直是大杀器,还有 delegate/Task 等等都十分的友好,虽然看上去也是语法糖,但是爽啊,java 最起码的注解都只能注入常量,光这一点就限制了好多的黑科技想法,哎,每次都只能像 lombok 一样去拦截编译期,恶心死了
wdhwg001
2022-04-09 00:42:19 +08:00
@zxCoder 实际上就是在问各种常用库到底有多不够用,还有到底有多不好用。
zxCoder
2022-04-09 08:35:28 +08:00
@wdhwg001 用的人少肯定相对不够成熟
actorzjp
2022-04-09 13:20:07 +08:00
没有杀手级应用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/845526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX