V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wdhwg001
V2EX  ›  程序员

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

  •  
  •   wdhwg001 · 2022-04-07 17:10:55 +08:00 · 9048 次点击
    这是一个创建于 972 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    83 条回复    2022-04-13 16:51:48 +08:00
    paccco
        1
    paccco  
       2022-04-07 17:58:58 +08:00   ❤️ 1
    你这限定这,限定哪的,不如直接把 Java 的优势全干掉,再把 C#包袱丢掉 只比较语法咯
    yazoox
        2
    yazoox  
       2022-04-07 18:05:37 +08:00
    c#在国内不行,国外使用还是挺多的吧。
    国内的互联网公司,基本都是 Java 那一套,然后,国内的其它公司,都学“大厂”。
    Chad0000
        3
    Chad0000  
       2022-04-07 18:08:49 +08:00
    不是很了解 Java 的生态。

    很幸运我一直在用 C#,工作和业余都在用。
    sorakylin
        4
    sorakylin  
       2022-04-07 18:09:14 +08:00   ❤️ 2
    Java 我感觉主要是有很多骚东西都有解决方案,太省事了……
    比如我之前找到了个开源的“滑动验证码”Java 库,五分钟就能配好一个滑动验证码生成 /校验接口、还带基本的轨迹分析。

    还有那种什么写完配置后一行代码实现登录功能(各种 Session 管理 /Cookie 管理 /前后端分离适配都是直接自带)的骚框架,顺便什么踢人下线、SSO 、鉴权、OAuth2 都给你打包了,用起来贼省心智负担……
    还有一引入然后设置个路径就能在应用中集成完整的附件处理基础设施(附件管理 /保存 /媒体压缩 /查看 /下载 /定位)的库,让你所有的文件 /图片上传都可以无脑几行代码写完,除了本地文件系统外顺带还对接了云服务……

    就是这种和你的业务贴的很近的库能翻出好多来, 写代码的时候基本还真就只剩增删改查了。
    中间件这块倒是大家伙用起来应该都差不多吧
    seakingii
        5
    seakingii  
       2022-04-07 18:12:52 +08:00
    生态的话,没有 JAVA 丰富,但该有的基本都有.
    nightwitch
        6
    nightwitch  
       2022-04-07 18:13:37 +08:00   ❤️ 3
    https://www.zhihu.com/question/494351204
    微软的迷之操作太多,开发者对狼来了的故事听太多了
    huang119412
        7
    huang119412  
       2022-04-07 18:14:35 +08:00
    你觉得好你就学就好了啊,语言之争有什么意义?不考虑历史? Java 诞生的时候也是非常优秀 ,C#只是模仿之流,如果语法糖多就能说明一个语言的好坏,你去学 scala 和 swift 啊。现在哪个语言不都是相互 copy 。谁和你说 C#性能比 Java 强,C#连 go 都比不上,https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf 。而且微软以前是什么德行,对开源的罪行可以说罄竹难书,只是中国人不记得历史喜欢舔而已,到现在很多开源社区也和微软划清界限。Java 的标准在 JCP 手里,运行了十几年,虽然不是最好,但是最不坏,记得不错的话 C#和 Go 都是某个公司的语言。
    jorneyr
        8
    jorneyr  
       2022-04-07 18:34:34 +08:00
    比较一下各种中间件有多少是 Java 开发的,有多少是 C# 开发的。
    zmal
        9
    zmal  
       2022-04-07 18:36:37 +08:00   ❤️ 4
    初学者总想证明自己现在掌握东西就是最好的,很正常。
    gam2046
        10
    gam2046  
       2022-04-07 18:44:42 +08:00
    后端差距就是 Spring 全家桶。
    nulIptr
        11
    nulIptr  
       2022-04-07 18:47:22 +08:00
    小兵不用考虑这个问题,团队用啥你用啥。
    leader 不光考虑这个问题,还要考虑能不能招到人。

    我司还一大票线上服务是 net core 2.1 的,招不到人导致新服务都用 py 写了
    MakHoCheung
        12
    MakHoCheung  
       2022-04-07 18:51:28 +08:00
    不熟悉 C#,但我猜想的话,C# 发展这么多年了,一些基本的库 Java 有 C# 应该也有(最低限度微软自己都会去开发),生态差距应该不大吧,猜的
    userforg2021
        13
    userforg2021  
       2022-04-07 18:54:47 +08:00
    差距么,差距是 C#是微软出的,对有的人来说就是原罪
    INCerry
        14
    INCerry  
       2022-04-07 20:21:39 +08:00   ❤️ 1
    INCerry
        15
    INCerry  
       2022-04-07 20:26:50 +08:00   ❤️ 1
    不熟悉和没用.NET 和 C#的人就不用强答了,会被大佬们笑话的
    arthur1024
        16
    arthur1024  
       2022-04-07 20:27:09 +08:00
    最近在找.net core 的工作,面了两家之前用.net 的公司,面试官都说现在.net 招人很难招,公司开始转向 java 了。。。。V 友们,求内推.net core 开发
    INCerry
        17
    INCerry  
       2022-04-07 20:32:25 +08:00
    @arthur1024 我司招人,公司是国内某领域 TOP3 ,邮箱:aW5jZXJyeUBmb3htYWlsLmNvbQ==
    Cbdy
        18
    Cbdy  
       2022-04-07 20:35:04 +08:00
    朋友公司用的.NET ,因为招不到人去年开始用 Java 重写了
    INCerry
        19
    INCerry  
       2022-04-07 20:38:59 +08:00
    @Cbdy 其实招不到人都是伪命题,薪资给的够,招人很快的。
    roundgis
        20
    roundgis  
       2022-04-07 20:44:22 +08:00 via Android   ❤️ 1
    現在很多都是一起用

    我司雖然用.net 該用 java 也會用


    招人難不難是老闆要考慮的事

    錢給夠自然會有人來
    INCerry
        21
    INCerry  
       2022-04-07 20:48:54 +08:00   ❤️ 1
    招人这个问题。举个例子,去年发生的,某个行业内做计算平台的在某新一线城市开研发中心,招.NET 中高级 30 来人,其它语言若干,给的薪资均高于本地平均 20%,一个多月就招满。我们组今年同事离职,空缺几个位置,薪资高于本地平均 15%,几个 offer 一天之内就发完了。
    ration
        22
    ration  
       2022-04-07 21:06:12 +08:00   ❤️ 1
    做过多年 C#,也做过半年 java,我说说自己的看法。
    1.通用的中间件基本的 java 有的,.c#都有,但是呢,比如你找找腾讯阿里这些大厂的中间件的示例和客户端封装,有些 C#是没有的,但是基本都有通用 api 接口,不过你还是得自己写或者从 java 翻译过来。
    2.大型应用方面,java 国内能找到很多框架,比如 spring 全家桶,spring cloud alibaba ,大厂都在用,因此坑多也能填平。而从 C#貌似只有微软提供的那个官方微服务示例,其他的在 github 上找到的就是各种小型的中间件了。
    3.大型中间件,C#能拿出来的很少,java 有 hadoop,elasticsearch,go 有 docker,kubernetes 。这些我认为也是生态,基于这些可以开发插件之类的,也提供了不少工作岗位。
    4.桌面 windows 应用开发的话,因为是微软的,C#比较有优势。
    arthur1024
        23
    arthur1024  
       2022-04-07 22:45:29 +08:00
    @INCerry 感谢提供机会啊,是成都的吗?
    wdhwg001
        24
    wdhwg001  
    OP
       2022-04-07 22:59:20 +08:00
    @paccco 人力资源生态不比较是因为没有意义,是个人都知道 Java 好找工作。

    其他的限制我觉得更接近扫盲而不是限制,毕竟一提到.net 脱口而出仅 win 的大有人在,我不希望这些过时的评价掺杂进来也是正常考虑吧。至于运行时的考虑,就像我们在这里讨论的 Java 当然不是 Dalvik 虚拟机一样,但这一点在 Java 语境下完全不需要提及。

    同时,你也可以从我没有限制 Java 版本和授权限制这一点理解到:我完全没有打算缩小有效讨论范围。
    whx
        25
    whx  
       2022-04-07 23:26:00 +08:00 via iPhone
    C#用来写了一些小工具,写起来确实比较舒服。语法方面对比 Java 简直是降维打击。
    .net 生态具体有多差不清楚,感觉有点混乱。
    光服务端开发就有两个不同的版本,之前是.net core ,现在是.net 6 。
    有些包支持了.net core ,但是没支持.net 6 ,还有些包是只支持.net framework 的。
    对比 Java 举一个例子,有个老古董包,08 年就没更新了。
    运行环境更新到 jdk17 ,依然跑的稳得一批。
    着实让人有点惊讶,之前还一直没留意。
    NoNewWorld
        26
    NoNewWorld  
       2022-04-07 23:28:28 +08:00
    其实现在更多去考虑 go 相关的了。。
    yazinnnn
        27
    yazinnnn  
       2022-04-07 23:43:40 +08:00
    感觉楼主好像懂得很多,而且在等自己想要的答案

    不过没多少人既是 java 专家又是.net 专家吧
    Osk
        28
    Osk  
       2022-04-08 00:06:50 +08:00   ❤️ 1
    c# 语言 /CLR 方面没问题, 甚至可以说总体感觉挺优秀的, 有问题的是微软...


    以前不跨平台, 想跨还得用第三方的 mono. 这是作死原因之一, 以前 c# 在 Windows 上有多方便, 在其它平台上就有多难.

    第二个个人很讨厌的地方就是以前不能打包时带上运行时, 不像 java 那样可以带上 jre 分发, 徒增麻烦.


    当然, 现在微软在努力改变以前的风格, 然而, 开发者都被微软坑怕了, 特别是这几年, 疯狂的搞新平台, 然后放弃. 再加上现在 pc 端不再辉煌, 显得 c# 快完了一样.

    顺便多嘴一句, uwp/uap 无人问津的原因有太多, 但不像后(win 7) 兼容是严重问题之一, 开发一个软件时, 考虑到当时 win 7 恐怖的市占率, 恐怕没有几个开发商会傻乎乎的只做 uwp/uap, 不然还要再做一个 win 32 版本, 既然都做 win 32 了, 谁愿意再做 uwp 呢, 虽然微软声称大量代码可以复用...
    总结就是: 微软有时总会搞一些骚操作, 总想教用户怎样做, 然而它不是 apple...


    不过很多客户端开发, 需要性能或者与硬件交互的(IoT, 工业软件)等还是大量用 c#/c++
    wdhwg001
        29
    wdhwg001  
    OP
       2022-04-08 02:11:05 +08:00
    @yazinnnn 并没有,只是微软其实花了大量精力和资金在各简中社区进行垃圾布道,以至于这种垃圾布道真的吸引了非常多的支持者。

    所以,更想听到更客观,更有深度的声音和评判。
    ragnaroks
        30
    ragnaroks  
       2022-04-08 08:41:07 +08:00
    语言和平台都没问题,确实是微软自己作死,而最近的就是 dotnet 6 模板的问题,即微软强推所谓 TopLevelStatements 和隐式命名空间
    mosfet
        31
    mosfet  
       2022-04-08 08:43:33 +08:00
    @Cbdy 因为同类岗位,c#给的钱比 java 少不少
    sjzjams
        32
    sjzjams  
       2022-04-08 08:44:36 +08:00
    Cbdy
        33
    Cbdy  
       2022-04-08 08:54:51 +08:00
    @mosfet 照理说这种小众技术应该给钱多才对,比如 Ruby 程序员一般薪资对比 Java 高
    hbing
        34
    hbing  
       2022-04-08 09:02:30 +08:00
    工作用了 C# N 年,很少接触其它语言, 最近刚好在学习 Spring boot, 学习新語言完全靠自己,安裝-配置-導包到
    hello World, 用了五六天才搞定。C#就简单多了,安装-新建项目-hello world (win10)。
    chengyiqun
        35
    chengyiqun  
       2022-04-08 09:12:26 +08:00
    @hbing 那能一样么,springboot 是一个全家桶框架的基础,C#是编程语言,你用一个框架和一个语言比,这有什么科比的。
    java 也能新建项目 main 方法 hello world 啊。
    banmuyutian
        36
    banmuyutian  
       2022-04-08 09:17:09 +08:00
    @hbing #34
    Spring boot 是框架,C#是编程语言,这咋比较
    janus77
        37
    janus77  
       2022-04-08 09:37:55 +08:00
    中间件、数据库这类?感觉这类东西可以多一些方案吧,而不用一个轮子一统天下。
    另外不知道 c#有没有比较多的商业 /收费框架(比如 sqlserver 这种),如果这样的话也是一个负担
    ivyliner
        38
    ivyliner  
       2022-04-08 09:39:10 +08:00
    不是后端开发回答一下.

    C# 或者 .NET 的生态的差距是 "作为一个非后端开发人员不知道在 macOS 上是否可以开发并运行 .NET, 但是我知道 Java 可以. "
    感觉这个在某些程度上可以反应出两个生态的差距.
    吐槽一下微软在各种命名上的糟糕品位, 特别让人容易搞混.
    BenX
        39
    BenX  
       2022-04-08 09:43:25 +08:00
    作为一个 C# 老屁股,并且多年不写 C# 的中年人。。。。。

    C# 问题主要在国内比较严重,受众公司少,要不就是非常传统行业还在用。暂时无解
    至于优势没啥好说的,说多了又要被扣帽子。
    BenX
        40
    BenX  
       2022-04-08 09:44:19 +08:00
    @ivyliner .NET core 或者现在叫 6.0 ,毫无问题啊。不知道为啥这样说
    INCerry
        41
    INCerry  
       2022-04-08 09:46:31 +08:00
    @Osk 嗯嗯 从现在来说你说到的跨平台运行 和 打包包括运行时功能都支持了
    MonoLogueChi
        42
    MonoLogueChi  
       2022-04-08 09:46:35 +08:00 via Android
    .net 6 ,生态不行,太新了,现在很多库都没跟上,不支持.net 6 。不说 .net 6 ,说整个语言的生态,也太难搞了,自己开发产品可以,但是需要用到第三方 sdk 的话,基本都要自己维护,举个简单的例子,我们公司一项服务用到了某云的产品,但是 sdk 只提供 .net core 2.1 的,更高版本的只能自己维护,而且某云风评还不太好,业务说改就改,自己维护这东西就是个炸弹,指不定啥时候就炸了。
    INCerry
        43
    INCerry  
       2022-04-08 09:52:22 +08:00
    @ivyliner
    我很多同事就是使用的 macOS 开发.NET 程序,之前还有使用 Ubuntu 的
    ccppgo
        44
    ccppgo  
       2022-04-08 09:53:28 +08:00
    @INCerry 你这句话反过来理解就是,java 薪资不用给够也能招人很快, 还给老板省成本了, 难怪都不用 c#
    sinnosong1
        45
    sinnosong1  
       2022-04-08 09:54:52 +08:00
    @ivyliner “作为一个非后端开发人员不知道在 macOS 上是否可以开发并运行 .NET, 但是我知道 Java 可以. ” 不知道该怎么吐槽了,vs for mac 都多久了。建议开滴滴,这行不适合你。
    zxxufo008
        46
    zxxufo008  
       2022-04-08 10:06:02 +08:00
    @hbing #33 hello world 一个有熟悉的开发语言的人能搞 5 、6 天,确定不是自己的问题?
    Narcissu5
        47
    Narcissu5  
       2022-04-08 10:17:33 +08:00   ❤️ 1
    CLR 及 C#确实很多特性不错,但这些不错很多是通过激烈的变革得来的。后果就是这么些年下来除了微软的一方库.net 几乎没有什么积累。Java 在引入特性上非常保守,结果就是很多十年前的代码还能跑。说实话在字节码虚拟机这个生态位上已经没有谁可以挑战 Java 了。.net 要想超车得有新东西,类似 Go 那样的
    fengjianxinghun
        48
    fengjianxinghun  
       2022-04-08 10:28:20 +08:00
    @sinnosong1 你自己了解过么? vs for mac 就是以前的 monodev 改了个名,和 win 上的 vs 完全是 2 个东西
    sinnosong1
        49
    sinnosong1  
       2022-04-08 10:32:55 +08:00   ❤️ 1
    @fengjianxinghun 你能不能注意下这个人说的是什么????????????????????????????????????????????????????????????????????????????????????????????
    他说:“不知道在 macOS 上是否可以开发并运行 .NET”
    “monodev 改了个名,和 win 上的 vs 完全是 2 个东西”跟“不知道在 macOS 上是否可以开发并运行 .NET”有关系么?
    sinnosong1
        50
    sinnosong1  
       2022-04-08 10:34:25 +08:00
    @fengjianxinghun 改名不改名有任何关系吗?这个人说的是不能开发并运行。请问不能开发并运行吗?
    vone
        51
    vone  
       2022-04-08 10:37:12 +08:00
    https://dotnet.microsoft.com/en-us/download/dotnet
    https://docs.microsoft.com/zh-cn/aspnet/core/migration/31-to-60?view=aspnetcore-6.0&tabs=visual-studio

    最大的问题在于.NET 已经再次出现了生态的割裂(.NET 2.1 、.NET 3.1 、.NET 5.0 、.NET 6.0 、.NET 7.0 ),即使是 LTS 版本也只支持 3 年。
    vone
        52
    vone  
       2022-04-08 10:40:34 +08:00   ❤️ 3
    Mithril
        53
    Mithril  
       2022-04-08 10:52:57 +08:00
    基本还是看你做什么项目。
    微服务框架和各种周边库不是很全,虽说你可以用 HTTP ,但用起来也不是很方便。
    一些稀奇古怪的库也很少,有可能有些用的人少的功能你就得自己做。特别是国内环境中你要对接第三方服务大概率是有 Java 的 SDK ,没有你也可以随便 Github 搜个个人作品,但 C#的就很少。

    具体会不会影响开发就看你自己情况了。我们对于引入第三方库非常严格,需要评价 license ,质量,可维护性,必要性等等一堆东西。基本上不会随随便便就抄段代码拉个库进来。所以缺少这些东西影响也不大。而且产品没有阿里腾讯那种用户规模,也用不着上全套微服务框架。所以写起来开心的 C#就很合适。

    总而言之技术选型还是要看公司具体情况,不是哪个公司都是大厂,适合他们的未必适合你。其它那些压根就没在项目里用过 C#的评论基本就不用看了。
    INCerry
        54
    INCerry  
       2022-04-08 11:35:27 +08:00
    @ccppgo 我说的薪资是对应语言薪资上浮,不是说整个整体,其实我不想说的那么具体,就是很多人还想用以前传统行业工资水平招 C# 开发,不愿意把工资涨上来对标到 Java ,再说 Java 资源占用大,C# 更能省服务器资源
    Mirage09
        55
    Mirage09  
       2022-04-08 11:38:21 +08:00 via iPhone
    为啥老有人说 c#在国内用的少,国外用的多…
    欧洲不知道,美国招 c#的要么微软,要么传统公司,能有多少岗位…
    INCerry
        56
    INCerry  
       2022-04-08 11:40:31 +08:00   ❤️ 3
    @vone .NET Core 以后生态没有发生割裂(.NET Fx -> .NET Core 发生了割裂),此外这些都是正常的版本升级,没有啥问题,固步自封不跟随时代改进那才是最大的问题。另外 LTS 版本业内基本都是 3 年支持,你不需要新的特性那就不需要升级,你看 Java8 早就停止支持了,还是有很多人用。
    另外.NET 从.NET Core 3.1 开始,中断性变更已经很少了,框架基本已经稳定,从.NET Core3.1 迁移到.NET6 基本只需要修改版本号。
    klo424
        57
    klo424  
       2022-04-08 13:59:32 +08:00   ❤️ 1
    @INCerry #56 对头,我也想说,被你抢先了。能说出生态割裂的观点,基本是没用过.NET CORE 的。
    thinkershare
        58
    thinkershare  
       2022-04-08 14:11:57 +08:00
    @INCerry 和一堆不用.NET 的解释, 完全是浪费时间! 我各个语言都用, 除了廉价的靠谱劳力没有 Java 多, 我没发现有啥缺点! 微软自己总是作死, 这点谁也没有办法. 如果要我说, 我觉得生态从.NET 1.0 到.NET Framework 4.8 再到现在.NET 7 就没有什么大的变化, 也不存在中断, 唯一问题是微软换了太多次 UI 库了(包含 Web 层面), 这个导致很多做 APP 开发的人跑掉了, 另外微软在 Mobile 上的败局导致了今天的局面, 和 Java 的竞争失败纯粹是微软自己的策略问题, 出来比 Java 晚, 开源太晚, 人家已经有现成的方案, 为什么要花费巨大的成本更换呢? 另外就是失去了话语权, 这点其实很致命, 是微软 90 年代自己结了太多怨了. 不过大部分人都是白嫖党, 在免费和没有更好的选择下, 你看还不是乖乖选择了 VSCode, TypeScript 这种微软出的东西.
    thinkershare
        59
    thinkershare  
       2022-04-08 14:13:01 +08:00
    @klo424 UI 库方面, 微软从 Windows 8 开始, 折腾的是比较离谱, 特别是 Windows Phone 的败局, 得罪了很多开发者.
    FrankHB
        60
    FrankHB  
       2022-04-08 14:57:58 +08:00
    大量廉价可替换的劳动力。

    技术理由不是没有,而是多到罄竹难书,但都算是细节,相比起来算是次要的。
    真要说就有一个有代表性的:因为 project leader 水平问题,经常半吊子,完全无法一步到位,发版就是打补丁还不是 Java 那种用户自下而上推的那种,搞得底层生态发展自上而下地得半死不活。
    比如 C# 2~4 ,先搞什么 anonymous method 再加 lambda 。你要是上道点,直接加 lambda 会死?特别是要知道历史上本来就先有的 lambda ,哪来你 method 什么事(当然严格来说你抄 Java 就注定是败笔了;类似的问题还有到处 method 不给 free function 再用 extension method 之类擦屁股等等,细想起来到处都是)。
    虽然多加一个特性表面上就是多给了个选择,但是这类玩意儿根本是自上而下牵一发而动全身的,只有从上游推广,(因为传统的静态语言的先天问题)用户自己除非有本事整个重新实现一遍(也就有本事整出半吊子,比如 Mono )都没法 derive (不像 JS 起码有自举的 Babel 这类; dynamic 这种补丁就算了),结果就是用户不得不被迫浪费精力了解这种半吊子设计,要么跳车要么就习惯基础技术时刻落伍。
    要命的是这种微创新累积问题不是一个两个,官方还成习惯了,丝毫就没表现出要怎么克服改进。
    而各种兼容性问题(像 @vone 提的)则是这种问题的一类表面上的体现。其实这种症状要只出现个例也还不是问题,但是多了工程上就很劝退了。

    你要是 Java ,这还真不是太大的问题——本来 Java 用户平均来讲就是工业界里最容易在这方面被糊弄的又有强大的钉子户传统,最不怕的就是语言层次上的一成不变,嫌没事干可以头铁手动日 CheckedException 或者人肉翻译 XML 到 stacktrace 玩儿然后强行算成 framework 类似物的 KPI ,大多数用户都会默默接受习以为常;但.NET 除了软粉以外很多也就是从被 Java 糊弄不爽的状况下叛逃过去的,用户基数一开始就是问题,还玩碎片化?(还有大明湖畔的.NET CF……)岂不是才离虎口又入狼窝?
    而且这么多年了微软阵营的开发者应该都知道上游对坚持技术方向的软弱性和自己选择跟微软走的沉没成本。看这堆特性刷版本号的敏捷套路玩多了,越来越多的 Java 开发者即便不满,也都不愿意上车了。
    要知道大多数开发者其实日常是摸不到 JVM/CLR 之类垃圾在哪的,所以深刻体会到 Java 的烂以后,这年头 Java 开发者流行跳其它 JVM 语言,转型失败风险小反复横跳难度低,哪像你.NET 看起来那么 49 年入国军的?

    别的用户转.NET 么,生态位问题,不会是主流路径。毕竟历史上你.NET 的中坚力量 C#造出来先天就是怼 Java 的(.NET 本质是召唤 COM 加成,只要接受微软全家桶能受得了 0x800 稀里哗啦的 HRESULT ,不用白不用),所以吃不死 Java 用户,也没什么盼头了。
    别的比如搞 C++的,因为嫌弃语言用起来麻烦跳 Rust 之类还算正常,但跳.NET 的理由基本只会是被迫写 UI 然后还只需要应付 Windows ,而不是说 C#之类真比 C++用起来舒服到哪去了(光一个 using 的缩进就够欠扁了)。
    Fule
        61
    Fule  
       2022-04-08 15:03:07 +08:00
    招.NET 初级人员确实困难,毕竟培训机构啥的全是 Java 。我招了一个学 Java 的,来了之后转 C#,很快他就再也不想用 Java 了。
    FrankHB
        62
    FrankHB  
       2022-04-08 15:25:53 +08:00   ❤️ 1
    @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
        63
    Chad0000  
       2022-04-08 15:28:18 +08:00 via iPhone
    @FrankHB 我也想回他的,想想还是 block 简单些
    yejinmo
        64
    yejinmo  
       2022-04-08 17:13:21 +08:00   ❤️ 1
    说生态割裂的 真的是从事 C# 开发的么?
    很多通过 Nuget 提供的包都是采用 .Net Standard 2.0 分发的 这之后的 .Net 都可以兼容啊

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

    "作为一个非后端开发人员不知道在 macOS 上是否可以开发并运行 .NET, 但是我知道 Java 可以. "
    ivyliner
        66
    ivyliner  
       2022-04-08 18:29:43 +08:00
    @INCerry 为什么我好像很少在 linux 和 macOS 上见到 C# 开发的程序呢? QT 到时见到不少, 或者可以介绍一下在 linux 和 macOS 上有什么比较有名的软件吗 ?
    如果我开发了一个 C# 的程序, 要在 linux 或者 mac 上跑起来的话, 需要额外安装 .NET Framework 之类的吗 ?
    还是直接打包一个 DMG 之类的程序, 直接可以跑起来 ?
    ivyliner
        67
    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
        68
    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
        69
    libook  
       2022-04-08 19:27:45 +08:00 via Android
    干活都能干,有轮子就用,没有轮子也都可以自己造,用哪个顺手就用哪个,我还用 JS 写后端呢,任凭很多人觉得各种不好,我基本都能达到我的预期目标。

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

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

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

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

    > 我只是分享一个身边的案例,还有个朋友在携程的,他们前几年用 Java 把整个公司所有的 .NET 系统全部重写了,现在微软的技术栈估计就剩下一些 MSSQL Server 了吧
    - 看招聘信息的话,携程貌似又把它捡起来了,之前还有猎头找我,说是机票新业务,具体情况也不太清楚,我的亲身经历的话,钱给够啥都好说。
    dufu
        75
    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
        76
    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
        77
    ychost  
       2022-04-08 22:36:51 +08:00
    讲真的 C# 写起来比 Java 愉快很多,Linq 和 EF 简直是大杀器,还有 delegate/Task 等等都十分的友好,虽然看上去也是语法糖,但是爽啊,java 最起码的注解都只能注入常量,光这一点就限制了好多的黑科技想法,哎,每次都只能像 lombok 一样去拦截编译期,恶心死了
    wdhwg001
        78
    wdhwg001  
    OP
       2022-04-09 00:42:19 +08:00
    @zxCoder 实际上就是在问各种常用库到底有多不够用,还有到底有多不好用。
    zxCoder
        79
    zxCoder  
       2022-04-09 08:35:28 +08:00
    @wdhwg001 用的人少肯定相对不够成熟
    actorzjp
        80
    actorzjp  
       2022-04-09 13:20:07 +08:00
    没有杀手级应用
    MasterMonkey
        81
    MasterMonkey  
       2022-04-10 11:10:30 +08:00 via iPhone
    微软鸡娃太多技术了,生态不行。
    aguesuka
        82
    aguesuka  
       2022-04-12 15:54:50 +08:00
    .NET 6 和 .NET 7 相比绝对后者语法更香, 性能更好, 那你为什么不用 .NET7
    wdhwg001
        83
    wdhwg001  
    OP
       2022-04-13 16:51:48 +08:00
    @aguesuka C++23 也挺香的,为啥不用 C++23 呢,C#从来都不是一个 modern Java ,你大概是想找 Kotlin 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.