.Net 和 Node的优缺点?

我们公司使用.net做后端,又找不到什么人写,又费时间,但是死活不改技术站。
我们是项目外包公司,按说,要想要改个技术站分分钟就改了,没有任何历史包袱。
大神们,请问,这个.Net相对于node express有哪些优势呢?

阅读 3.4k
2 个回答

这个问题没有唯一确定的答案,关键还是在于选择。

这里有一个 Web 框架的性能排,2021 年的:Round 20 results - TechEmpower Framework Benchmarks。为了留痕我截了张图下来,有点长,放在最后。

从这个排行来看,ASP.Net Core 排名第 8,Node 排名 56。前者 6462 分超后者的 1654 分近 3 倍(比值接近 4:1)。今年的情况还不知道,前段时间好像看到一个新排行,但是没找到,也有可能就是 2021 年这个。.NET 和 Node 各有发展,但我相信差距仍然存在。

从实现语言上来说,.NET 主要使用 C#,Node 主要使用 JavaScript。前者是静态类型语言,后者是动态类型语言,现在两者基本上都是编译成中间代码执行(JS 是在 V8 中编译的,不是严格的编译类型语言)。虽然 JS 有 TypeScript 这类静态类型语言加持,但毕竟开发者能力不能也不能充分发挥其静态检查的作用。由于静态类型语言在编译期可以进行大量的潜在错误检查,所以我有理由相信 .NET 应用的健壮性比 Node 好。

从生态方面来说,.NET 相对于 Node 封闭。虽然微软已经在极力拥抱开源了,但是 .NET 仍然生存在一个相对封闭的技术栈中。NuGet 上有大量的第三方框架、库可选,但是除了少量被社区验证极其优秀的库之外,我相信大部分团队还是会使用 .NET 原生提供的框架和库,毕竟这个“爹”很强大,不管是从功能、发展、维护保障、性能……各个方面来都都存在明显的优势。npm 中也存在大量优秀的库,发展相对开放一些,而且也受到了多方面的关注和支持,不能说比 NuGet 差,但过于开放,选择太多,往往会让人无所适从。封闭和开放本身追求的并不是极致,而是一个相对平衡,所以这个问题上仁智各见。

再从人力资源上来分析。C# 和 JavaScript 虽然一个是编译语言一个是解释语言,但是毕竟同属一个语系,和 C/C++/Java 同属一脉。所以语言上差异不是特别大。但是 .NET 和 Node 并不只包含语法,还存在大量的类库和框架,这些东西差异就大了。因此并不是会 C# 或 JavaScript,就可以迅速转换到另一个技术栈上去,相关技术仍然需要积累。那么问题来了,多数搞 C# 的熟悉的是后端技术栈,而搞 Node 的人多数熟悉的是前端技术栈。后端技术栈接触的是数据库、数据结构/算法、工程化、业务逻辑分析、与其他技术栈的接口、服务器、性能、设计原则和方法、设计模式……;而前端技术栈触到的是UI、用户体验、可操作性、可视化、相对简单的数据结构和算法,灵活的数据转换……。这个列举并不全,一时也想不到太多,但可以明确的是,两类人的技术栈是不同的。我们可以认为 .NET 的 Web 架构和 Express 没有太大区别,但是在具体的实施,内部逻辑的理解和实现上,由于开发人员技术栈的区别,开发结果仍然会产生较大的异常。

目前看起来 .NET 的人不好招,其实 Node 的人也不好招 —— 因为人才市场上存在大量的初级人才,而多数企业需要的是中高级,中间起码存在 3 年的成长期差距(并不是说 3 年就一定达标,还是要看个人的意识和发展,有人写了 10 多年代码,也顶多算是个初级熟练工)。

最后回到问题上来,NET 相对于 NODE 有哪些优势……真的不好说,除了一开始提到的性能,其他各个方面都只能说差异,是适合与不适合的区别,没有太多优劣的比较。所以,如果确实找不到 .NET 的人,从前端工程师中去培养一些来使用 Node 做后端是一种解决办法,但人的精力有限,同时做前后端在前期一定会分散专注力,于个人发展不太好(泛而不精),于公司发展也不好(在 BUG 中沉浮)。这里只说前期,个人发展中后期往全栈发展可拓展学识和思维。

所以现在问题变成了:是招 .NET 后端呢,还是 Node 后端呢?

这个问题毫无意义啊……

你的核心诉求是“又找不到什么人写”,.NET 即便语言本身的优势再明显,也满足不了你的诉求啊……你能变出人来写么?

另外你题目里说的“死活不改”,我可以理解成这是个政治问题、而不是一个技术问题吧?你们的技术总监 / CTO 是啥态度?如果他都没意见为啥你要有意见呢?如果他有意见了又是什么阻碍了落地?后端主程是 CEO 的小舅子吗?

P.S.1 外包的甲方对技术栈没有要求么?

P.S.2 “改个技术栈分分钟就改了,没有任何历史包袱”?你们是没有任何内部的通用型框架或库是么?每次都是从零开始搭建项目?一点儿能复用的都没有?

P.S.3 别说彻底换语言了,就算同一门语言想升级一下版本或引入个什么新的特性(比如 JDK8 → JDK11 → JDK17、Python2 → Python3、.NET Framework → .NET Core、JavaScript → TypeScript,太多太多了),也从来不是一件简单的事情。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏