主页 > imtoken官方 > 现在是 2022 年,还在为编程语言争论不休?

现在是 2022 年,还在为编程语言争论不休?

imtoken官方 2023-03-02 05:16:25

某女:你可以让这个论坛里的每个人都吵架,今晚我和你一起去。

一位软件工程师:PHP 是最好的语言!

某论坛真炸了,各种争吵……

某女:我已经为你服务了,走吧,你可以为所欲为。

一位软件工程师:不是今天,我必须让他们相信 PHP 一定是最好的语言......

——段落来自网络

虽然是玩笑,但我也想通了,这篇文章的打开率和阅读量为什么这么高。

文章大篇幅讲Java和Go语言,编程语言之争一直是程序员的话题。

但这不是我的本意,编程语言只是一个背景,选择一门语言有各种原因,现实已经如此,所以如何在 Go 和 Java 之间架起一座桥梁是重点。

不过这个我已经说了,我可以多说一点。我是数学系毕业的,所以在大学里没学多少编程语言。毕业的时候选择了一个很容易上手的语言,就是上一段中的PHP。

后来环境全是Java,所以我也切换到Java。一开始是用Java写业务,后来做了中间件。后来,我换了工作到现在的公司,也写了 Go。

如果非要评价Java和Go,我觉得Java的生态很完整,有几乎所有互联网公司都需要的解决方案,引用一篇文章的话

我认为将 Java 用于架构应该是常识。

让我解释一下:首先,你可以为小项目使用任何语言,无论你喜欢什么。

但是,真正的企业级架构是不同的,不仅仅是RESTful API或者RPC,还有各种配套设施和控制系统。

例如:应用网关、服务发现、配置中心、健康检查、服务监控、服务治理(熔断、限流、幂等、重试、隔离、事务补偿)、跟踪监控、SOA/ESB、CQRS、EDA……

在非 Java 技术栈系统中很难看到这些东西的全貌。Java强大的生态环境让你可以专注于更高层次的架构和业务。

另外,不要以为你RPC几个服务,加一个缓存,加一个队列,就可以说是架构,只是系统集成。

虽然这句话有点绝对,围棋生态正在奋力追赶,但就目前的情况来看,确实如此。

我还参加了各种技术小组的水肺潜水。曾经看到一个群讨论Java的Spring框架。写围棋的同学说:

Spring 不是 web 框架吗?

我觉得他对Java的了解太少了,而且Spring确实不是一个Web框架,但我忍住了,没有反驳。

Go也有它的强项,比如协程调度模型,比如启动速度、内存占用等等。

不要小看协程(虽然Java即将有协程,但离我们还是有点远),背后是思维的转变。例如,Go 提倡不通过共享内存进行通信,而是通过通信进行通信。共享内存,在Java中,基本上都是通过共享内存进行通信的比特币是用什么语言开发的,这就导致了多线程访问共享内存必须加锁的问题。

但在 Go 中,建议通过渠道进行通信。你可能会说Java中也有BlockQueue。这是不一样的。BlockQueue 通信本质上是锁定共享内容,但在 Go 的协程调度模型下,通道可能是无锁的。

记得刚开始工作的时候,我还在写PHP的时候遇到了一位前辈,他建议我尝试改用Java。我当时说过,语言只是一种工具。

现在我认为这句话是错误的。语言不仅仅是一种工具,它还凝聚了一些编程思想,比如PHP的进程模型、Java的线程模型、Go的协程模型。在这些模型下,你能做的可能会有所不同。

比如我在学习 Go 的 Benchmark 的时候,感觉 Java 的 Benchmark 比 Go 的实现要严谨很多,不愧是工业级语言。

另一个例子是 Go 的协程调度。IO密集模式下,调度效率比Java好很多。

再比如,在协程调度模型的支持下比特币是用什么语言开发的,Go 的对象池性能优于 Java,通道效率高于 Java 的 BlockQueue。

总之,我们尽可能多地去理解其他语言,比较它们的异同,或许能给你接下来的技术选择一些启发。

这也是我第一次写出如此主观的文章。求个赞+看,以后多废话。