近在看GO语言,反思C、JAVA等语言

2020-07-09 00:00:00 语言 架构 程序员 公司 生态环境

近在看GO语言。

熟悉我的人都知道,我曾经讥讽某言论“一个合格的程序员要会四门语言”,是的,严重讥讽----------------我会的语言数量尾数都比这个多。以2017年12月份年度编程语言排行榜为例:前十名会九种,前二十名会十三种,前五十名会十六种......

所以我想我还是有那么一点点的自信敢对比不同语言的。


C语言是上古洪荒初期的产物,其预处理、汇编、编译、链接的四步骤是每一名C程序员都需要懂的,国内很多教材从helloworld起步,而把C语言和汇编原理拆成了两本书,导致很多人根本不会C语言,他们只能从if else等表象中看到:这么写,就会这么运行,而深处的原理却少有追究。再深处一点,深入的项目经验,深入的语法实现、编译语法树的经验。少有人能精通且称神。并且曾有人问Dennis Ritchie(C语言作者之一):一个程序员从新手成长为精通C语言的开发者,并能写出不凡的代码,据您的经验需要多长时间?丹尼斯答道:我不知道,因为我不需要学C语言。---------------真正的大神,一门语言会像呼吸、吃饭一样自然,是烙在基因里的一种本能。

C语言历史太久了,我们的真实世界其实是由C语言构成的,一切的一切追根溯源,几乎都会追到C语言上面。


JAVA已有19年历史了,当时是为了解决“一次编译、到处运行”这个梦想而创建的,后来机缘巧合,乘着互联网的东风,企业应用的南风、安卓的西风、大数据的北风,各种风刮起来,终使得JAVA扶摇直上。JAVA的重大特性其实是这么几点:企业应用、移动应用、严格规范、学习成本低、生态环境全、细节可定制化。

企业应用:所以有大公司为此掏钱

移动应用:所以有消费公司、个人开发者、消费者为此掏钱

严格规范:所以生产环境几乎不会出问题

学习成本低:规范严格统一、代码标准明确,学习成本低、交接成本低、反编译成本低。针对单个个人而言确实高,但是针对于全人类而言,没有不统一时的差异对接,没有不明确标准时的痛苦,没有交接时的学习曲线,总成本是极低极低的,比其他语言下降了不是一个等级,而是整整一个位面

生态环境全:论生态环境全,没有能超过JAVA的,支持几十种以上的操作系统,底层还支持N多种扩展语言,开发IDE有多种ECLIPSE,IDEA,NETBEAN,JBUILDER,JCREATOR......运行环境有多种:HotSpot,OPENJDK,JROCKET......性能检测工具有多种JCONSOLE,Jstat,JVisualvm,jprofile......框架有很多种:Spring,mybatis,hibernate,rocketmq,jedis,netty,mina......辅助工具有很多种:jad,maven,ant,jrebel..........生态环境之全,少有可匹敌者

细节可定制化:在一些细节层面,JAVA是可定制化的,如果性能不足,可以JNI换C语言,如果线程数量不足,可以换线程池或者定制化线程池,如果GC算法消耗过大,可以换GC算法,如果内存空间不足,可以调整内存分配算法........成千上万的细节总有一款适合你


再说GO语言,严格的说,我的GO语言生涯刚刚满一天零一个小时---昨天上午10点开始看的,而现在刚刚11点。参照很多大神的评价:

王垠---GO语言很蹩脚

XXX---GO语言是未来的语言

XXX---知乎将会把技术栈迁移到GO上

XXX---B站将会把技术栈迁移到GO上

XXX---X牛现在已经是完全由GO构建的了

........................

先摆出事实:

1、GO语言从性能上秒杀JAVA。运算性能是JAVA的1.5倍左右,运行空间是JAVA的几十分之一,启动时间是JAVA的几十分之一,并发量是JAVA的上千倍

2、GO语言从性能上不如C语言,但是语法上比C要更加“现代化”一些。C语言是纯过程性语言,申请内存,分配内存都需要手工处理,而GO语言支持简单的自动化GC。

3、GO语言生态环境尚不完善,无力与JAVA这一成熟体系竞争

4、GO语言从语法上不如JAVA严格,在企业应用层面会遇到较大的弱势

5、GO语言无力限制进程对CPU、内存的无止尽索取,依赖于docker或者其他虚拟化技术解决资源限制问题

6、GO语言是自举的语言,发展潜力巨大,但是依赖于大公司投入,仅GOOGLE一家可能不够


因此,我大胆做出判断:GO是一门夹缝型的语言,可以在C和JAVA都做的不好的场合下做到较大的发展。例如:

1、原公司架构为PHP等架构,需要升级,而公司无力立刻招揽足够的JAVA等语言技术人员,既有IT架构人员又不能立刻开除,这种情况下,可以采用GO语言“先顶个五年”。

2、原公司架构为C语言等架构,因扩展业务至其他未知领域,C语言开发过于精细,而Python等又过于粗糙,且既有IT架构人员不能立刻开除换一批,这种情况下,可以采用GO语言“先用着”

3、原公司因为业务扩展,服务器内存不足但是CPU充足,原业务为JAVA也不复杂,在此情况下,适宜用GO语言对业务进行重构

4、原公司业务一无所有,而资金有限,GO语言程序员便宜,可以迅速招揽,并且公司自己用就行,不对外商业化,此情况下,适宜建立GO语言的技术体系。


而如果是:公司资源充足,技术体系为JAVA体系,业务目标极其底层只能用C,等情况,不建议使用GO语言。


---------------------------------------------------

PS:我知道广大程序员都是赌徒,赌Go语言趁着Google的东风将来一统世界,那么批的Go程序员就是开国功臣,再不济,拿Go语言也挣了不少钱了。这是人类天性humannature,无可厚非。

但是既然是赌徒,就要又赌输的觉悟:如果Google倒闭,如果资金投入没有那么大,如果Go语言未能兴起乃至占领15%以上的市场,你的人生就呵呵了。


至少今年我不看好Go,如“H5的时代就要来临了"这个口号从09年喊到现在,至今未完全实现。而即使真的来了,学会Go,或者学会H5,或者任何一门语言、框架,对程序员来说,仅仅是两三个星期的事情,费不了多大功夫

相关文章