伴随着年底.NET社区活动,近日跟几位微软MVP大佬聊天请益,收获颇丰。程序员都有个话题避不开,就是各编程语言的优劣,大佬们的见识既有意思也有深度,这里为大家整理一下,其中Java、Golang和.NET是讨论焦点。
Java危机四伏25岁的Java当下还占据着“天下第一”的宝座,但是其统治地位并非坚不可摧,反倒可以说是危机四伏,当下云原生的时代,Java体系的许多前提假设都受到了挑战:
1Java根基“一次编写,到处运行”(WriteOnce,RunAnywhere)在当下已毫无优势,“一次构建,到处运行”(BuildOnce,RunAnywhere)的容器才是互联网需要的,程序+运行环境一起打包才是最流行的程序分发方式;
2单个微服务不再需要面对几十/几百G的内存管理,有了高可用集群也不要求单服务7x24小时运行,Java优势无从发挥,微服务对编程语言的异构兼容,更是降低其他语言使用成本;
3容器亲和性的要求,譬如镜像体积、内存消耗、启动速度,以及达到最高性能的时间等,都是Java的弱项!再小的Java程序也要带着完整的虚拟机和标准类库,再小Java的程序都会有固定的基础内存开销和固定的启动时间(Java虚拟机的执行机制)。
Golang光芒四射Golang(简称Go)近些年大火特火,Docker和K8S都是基于Go开发,国外如Google、AWS、Cloudflare、CoreOS等,国内如阿里、七牛等都已经开始大规模使用Go开发其云计算相关产品。Go的优劣大概如下:
1简单、小巧、易学,是学习Go语言最大的优势,然而无处不在的重复代码让人受伤(没有泛型、各种非空判断、各种异常处理代码),复制粘贴才是Go开发的常规套路;
2基于goroutine协程搭建的并行编程优势明显,当下docker、k8s等云原生底层核心架构都是Go开发的,有着诸多巨头支持的Go可以预见在底层设施会有更大的发挥空间,但应用层开发上,Go还缺乏说服力产品,相关积累也不够,目前还是Java为王,.NET、PHP、Python、NodeJS等更主流一些。
.NET浴火重生.NET在互联网方向上已经连续下行多年,直至.NETCore之后方才重新崭露头角,前不久发布了.NET5之后,吸引了众多互联网巨头的