2022 年最适合写业务代码的编程语言是哪个?

2022-01-24 00:01:44 +08:00
 aljun

2022 年,各个语言已经有了长足的发展,但其实业界更多的需求还是写业务。

这里写业务主要考虑的是解决问题的敏捷性与后期的可维护性扩展性,在性能层面要求不会特别的高,考虑的不只是语言本身的特性,还包括语言本身的生态。当然也需要考虑招人或者新人上手成本。其中业务泛指非计算要求极高的场景

其中我觉得作为候选的为:

当然也不限上述语言,C++Rust就算了吧,用那个写业务首先在敏捷性就不太好

因为限定为 2022 年,考虑的范畴都为该语言最新版本,且没有历史包袱

提名请给出具体的理由

25979 次点击
所在节点    程序员
233 条回复
dany813
2022-01-24 22:34:21 +08:00
nestjs 一把梭
AnonymousM
2022-01-24 22:49:16 +08:00
kotlin 后端的前景有老哥了解吗,可以分析下吗。单写业务的话也是 spring 那一套还是有更灵活的解决方案?
ByteCat
2022-01-24 22:49:34 +08:00
Kotlin 一把梭,无论是 Web ( Spring Boot )还是 App ( Android )都很方便
Leviathann
2022-01-24 22:53:38 +08:00
@BeautifulSoap 没学过 go 我也想知道 go 标准库是什么概念
和 kotlin 的拓展集合库比呢..
Hanggi
2022-01-24 22:59:29 +08:00
@BeautifulSoap
你提出了你的抱怨,我给你解惑。

你说说你要的功能是啥?不就是 Array 提供一个 filter 功能吗?这功能这么基础为啥 Go 语言没有,你能解释一下吗?

而且你要的这功能基础到涉及不到标准库好吗?这是语言本身层面的功能,你老说标准库不全,你用的第三方软件哪个不是基于标准库和谷歌的扩展库开发的?你开发的时候遇到标准库功能不足,需要从底层扩展标准库才能实现吗?显然不是,你只是需要一个 filter ,所以不要再说标准库什么的,跟他没关系。

说 Go 语言标准库健全是基于 Go 语言的发展年限、其他语言对比、目前所取得的成绩所提出的。Go 语言已经足以构建当代云原生服务的方方面面。你在这儿跟我说 Go 语言数组没有 filter 所以标准库不健全,恐怕不太合适吧?

所以原因就是出在你不明白,明明你用的其他语言都有数组的 find ,forEach ,filter 等方便的扩展方法,为什么 Go 语言这么新、这么火、这么多大厂在后面背书结果连一个数组的 filter 都没有。你是不是应该去自己去搜一搜?而不是跟我赌气?我以前也很困惑为啥都 2020+年了,还有这种奇葩语言?查一查,翻一番,知道原因就不会抱怨了,因为没有一种语言是完美的。
Leviathann
2022-01-24 23:16:40 +08:00
@AnonymousM
目前我们用的 spring 除了 orm 层 jpa 就是为了 java 的各种 null 和非 final 变量定制导致 kotlin 用起来有些别扭
其他都没什么问题

但前景也说不上,抱着 java 嗯卷的人太多了,而且普遍对语言没什么品味,碰到稍微精炼一点的语法就大呼不好维护不好合作 blabla
BeautifulSoap
2022-01-24 23:31:50 +08:00
@Hanggi 所以呢,你在这说了半天,可依旧没有正面回答我的质问——你对“健全”这个词的定义到底是什么?

你说了半天“基于 Go 语言发展”,“基于对比”什么的,可这些都不是对“健全”这个词的定义。讨论话题最怕的就是对某些概念的定义模糊而导致对话一直在做无用功。现代汉语词典对健全的定义是“①强健而没有缺陷。 ②(事物)完善,没有欠缺”,那你对健全的定义是什么?
sagaxu
2022-01-24 23:39:58 +08:00
@Hanggi 为什么 Go 语言这么新、这么火、这么多大厂在后面背书结果连一个泛型都搞到 2021 年尾才出来,还是个不支持泛型方法的泛型,比类型擦除的伪泛型更狠。

同样是很火的新语言,rust 除了编译速度,各方面都比 go 强太多了。
Hanggi
2022-01-25 00:06:47 +08:00
@BeautifulSoap
我不是已经说了吗? Go 语言已经可以构筑当代云原生的从底层到应用的方方面面,且大部分都是纯 Go 语言写的。
这就已经说明其标准库(包括谷歌扩展库)已经很健全了,可以应付各种情况,这不是健全那是什么?
主流语言有几个能做到且做好?

我说的健全指的是:Robust 。这个词翻译过来就是健壮、健全、强壮的意思,所以我的表达也没有问题。

所以不要跑题,Go 语言在语言层面上有很多基础功能不完善,你可以认为这事缺陷,但是究其原因是 Go 语言的本身设计导致的,推荐你去了解下。(与标准库无关,Go 语言标准库与其他语言标准库相比,已经算是比较健全的,事无绝对嘛)
Hanggi
2022-01-25 00:09:40 +08:00
@sagaxu Rust 与 Go 不是相同定位语言,Rust 更偏向于底层,Go 语言应用层级会更高一些。

我就跟你说一件真实发生的事情,Linkerd 知道吗?其最初版本是 rust 写的,后来因社区支持有限发展受阻改成 Go 语言。
当然这可能是个例,仅供参考。
MintZX
2022-01-25 00:28:31 +08:00
Go 吧,虽然我不会 go ,但是前两天公司里还在讨论要不要把当前的 python 换成 go 。各种 banchmark 好了太多
magiclz233
2022-01-25 03:22:33 +08:00
java 吧 业务的话 首先要使用的人多 另外开源库众多,java 生态很成熟了 而且在设计的时候考虑好扩容,后续也好操作,当然 java 也有缺点就是繁琐,不过如果业务代码多了项目大了其他的更乱
binux
2022-01-25 03:52:10 +08:00
写业务为什么还要有 asyncio ?
业务里面还要直接操作 IO 的吗?难道不是上面包装好一层 API ,下面包装好一层 framework ,业务只管调用然后 return 就行了吗?
bthulu
2022-01-25 09:03:22 +08:00
@kran java 不行, 调 dll 太麻烦了, 很多硬件设备也没有 java 原生驱动
sty
2022-01-25 09:08:44 +08:00
@AnonymousM spring 那套,100%与 Java 正常交互
bthulu
2022-01-25 09:10:20 +08:00
@wdhwg001 请教个问题, C#的 controller, 默认是 scope 的, 后面的服务类, 你们用的也是 scope 吗?
如果用的是 scope, 那么需要在多个请求间共享数据怎么办, 写在静态字段里? 如果需要在这个类创建后执行一次操作, 且仅执行一次, 怎么办, 难道写个静态字段标记是否执行过, 然后每次在构造函数里去判断一下?
如果用的是 singleton, 那么数据库怎么访问? DbContext 是 scope 的, 是没法注入到 singleton 的. 难道是在所有需要数据访问的方法里都加一个 DbContext 的入参, 由 controller 统一传递过来吗? 这样写是不是太恶心了, 某个方法如果自己本身不需要访问数据库, 但是他调的某个方法需要访问数据库, 那这个时候也不得不把 DbContext 作为入参传递. 或者是入参里没有 DbContext, 需要的时候通过工厂方法直接创建一个? 那这样的话, 跨方法事务又该怎么处理?
用了一段时间的.net, 总感觉各种恶心不好用, 貌似什么功能都有, 但什么功能都做的让人恶心不好用
lybcyd
2022-01-25 09:10:56 +08:00
@Hanggi 杠一下,robust 根据韦氏词典定义
1: strong and healthy
2: strongly formed or built
3: successful or impressive and not likely to fail or weaken
仅仅有健壮的含义,没有健全的含义。现代汉语的健全不仅仅包含健壮的含义,还包含完善完全的含义。

Go 的选择和现状有它自己的理由和设计理念,这个大家都明白,但是非要说它标准库很健全就有点强行挽尊了。
bthulu
2022-01-25 09:18:40 +08:00
@popil1987 typescript 有个很严重的问题, node_modules 文件数量多的吓人, 动辄几十万个文件, 复制删除 install 慢到令人发指. 如果一整年就开发一个项目, 那 install 一次就好了, 问题不大. 但像我这边这样, 针对工厂开发的, 每个厂都有其独特的生产情况, 只能公用部分代码, 不得已只能按工厂建分支. 那你今天可能在搞 A 厂, 突然之前的 D 厂说有沙问题, 要处理一下, 又切回 D 厂, 那依赖也不完全一致, Install 一下几分钟就过去了. 改完测测发布到 D 厂, 又切回 A 厂, 继续 Install. 过了个吧小时, E 厂又反馈哪里不好用要改改, 又切又 install, 完蛋了啊.
dragonsunmoon
2022-01-25 09:20:37 +08:00
@Hanggi BeautifulSoap 的 "第一个赞" 是我给的, 因为他的观点我认同.
go 语言有他的设计哲学和思想, 可是未必是所有人都认同和接受的.

编程语言只是一个工具而已. 现实生活工作里, 很多人, 因为公司, 项目是使用 go 语言, 而不得不使用. 因此在论坛里发表一下对 go 语言的吐槽和抱怨, 很正常, 无可厚非.

编程语言, 程序员用来工作谋生的工具而已, 你觉得好用, 你继续喜欢. 我觉得不好用, 我就吐个槽, 报个怨呗. 没有必要, 非要争一个对与错, 强迫其他人都的认同.
fanxasy
2022-01-25 09:32:36 +08:00
候选列出了 Elixir 却没有 C# 怪怪的

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

https://www.v2ex.com/t/830159

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

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

© 2021 V2EX