其实这篇文章应该还可以有个副标题—为什么选择Go语言。很多时候,我们在做一个需求的时候,很多编程语言都可以,但是为什么选择这个,而不是那个,甚至说为什么选择Go语言,而不是其他编程语言?今天我抛开特定业务只能选择某种特定的编程语言除外,对比下有多种语言选择的情况下,Go语言为什么具备更多的优势(不一定是TOP1),进而展开聊聊编程语言的用户体验。
首先,我们评判的标准是什么?我认为和编程语言本身无关,评判的标准应该是在能做这个业务的前提下,是否高效、少出问题、入门容易等等,其实一句话就可以总结,对于企业是否更省成本。在任何时候,成本都是发展的核心驱动力。
这也是我说的和语言无关的意思,就像汇编,它的能力更强,但是学习成本大,书写成本大,一个公司没法直接招个实习生就可以用汇编开发项目的,即使能,开发同样一个功能,汇编的开发效率也是低下。
这让我想起来编程语言界的鄙视链,写汇编的看不起写C/C++的,写C/C++的看不起写Java的,写系统底层的看不起上层业务开发的,写后端的看不起前端的。其实这是一种很奇怪的氛围,都是为了革命,只是分工不同,有些业务的确只能用这门语言更合适,比如Linux内核,现在也只能用C写,不能用Java,但是这并不意味着Java开发人员所创造的价值比C的少。
定义了前提就可以先聊聊编程语言中垃圾回收这个功能了。对于一些开发高手来说,会觉得垃圾回收这种东西有点鸡肋,因为不能像他自己用手动的内存管理更高效。其实这的确也是OK的,因为对于一些开发大牛来说,自己手动分配和释放内存,写出来的代码的确更高效。
但是有一个核心的前提,IT界有多少这样的大牛呢?能不能满足业界公司的需求?这样的大牛工资要求也高,公司能否承受的起这个成本?而且对于同样的业务,在不懂技术的CEO们眼里,技术就是个工具,实习生能做出来就可以,为什么要用一个会自己内存管理的大牛呢?
很现实的问题,公司要追求效益,效率,公司孜孜不倦的追求就是降低成本,提高收益,你看富士康这种生产苹果手机的高科技公司,它们也只需要高中毕业的流水线工人就可以了,为什么?因为成本,他们建立了成熟的流水线,把复杂的工艺分解,这样一个高中学历的工人就可以参与。
所以垃圾回收是一个伟大的创举,它让编程不再是专业人员的事情,降低了入门门槛,让更多的人可以参与到编程这个职业中来,从而大大降低了企业的用人成本,提高了社会的发展。不具备垃圾回收的语言不能称之为现代编程语言。
简洁,是Go语言的另一大优势。我们经常用编程语言,相对于不会编程的朋友来说,他们可能觉得你很厉害,很高深。但是如果我们跳出这个思维怪圈,会发现一门编程语言也是一个产品,甚至是一个APP,比如抖音,而编程语言「这款APP」面向的用户是开发人员,就像抖音面向的用户是社会大众一样。
那么这时候,用户体验这个词就可以用到编程语言上了,用户体验好的,不让用户思考的,上手简单的,就是更好的编程语言,而不是这个语言本身多NB(其实这也是鄙视链产生的原因)。
一个简洁的,高效的,不让开发人员思考太多的语言,才是一门好的编程语言,不然啥事都交给开发人员来做,那我还要你这个编程语言干啥,你这个编程语言不就是个传声筒吗?
所以Go语言简洁的优势,让你一天就可以入门学会,而不像C++为了做兼容,搞了那么多特性,花了80%的时间,只做了20%的有价值的工作,也就是说这些花80%成本搞出来的众多特性在现实开发中连20%都用不上。
这并不是说C++的这些小众特性没有价值,其实这就和做APP产品一样,有些APP的用户说我要这个,要那个,其实都是他自己特殊的需求而已,并不是大众的需求。如果你公司花时间做了这些需求,会发现其实在为极个别人服务而已,产出和收益完全不成正比,还把自己的产品带坑里了。
好用辅助功能。这些是什么的?就是Go语言里的自动格式化代码,自动检查没有使用到的变量,简短声明(类型推导),省略的分号等等。
这些是属于编程语言的辅助功能,虽然占比不大,但是其作用是非常大的,因为它可以让我们更专注于我们自己业务的开发,而不是花时间在这些琐事上。
就拿自动格式化代码来说,在团队协作中非常有效,大家写出来的代码格式都是一致的,可读性强,而且在git merge的时候也不会因为格式不一致导致那么多冲突。
还有就像没有用到的变量,省略的分号,这些编译器就可以检查的,有些语言偏偏没有,浪费内存和工作量。啥叫用户体验,Go语言这就叫用户体验。
注意,这里我用了一个关键词辅助,一定是辅助工具,不能反客为主。就像Java,现在Java开发还能算Java开发吗?叫Spring开发我觉得更恰当。你学了Java你发现你还是做不出来项目,因为你不会Spring全家桶,不会围绕Java的生态框架和平台工具,所以只学会Java没用。
其他GO语言很多的优点就不提了,比如简洁的协程,高效的并发等等。我们说社会进步了?怎样才算是进步了呢?其实就是成本降低了。一部社会的进步史,就是孜孜不倦追求成本降低的过程,比如实验室的技术走出来,可以被大众所用。
那么编程语言也一样,如果这门编程语言只有高学历、研究人员、专家学者才能用或者才能用的好,这是一种退步。
不考虑程序员用户体验的语言都是耍流氓,把能力都开放给程序员的语言都是不负责任的(比如内存管理)。
PS:不要抬杠特定领域的专用语言
本文为原创文章,转载注明出处。