exploreXin
2019-04-23 13:06:08 +08:00
当我们讨论编程语言优劣的时候,往往忽略一个很重要的问题:编程语言的本质,承载人类发出的控制信息,用于指挥计算机产生某种行为,从而满足人类的生产,生活等需求。如果不明确这一出发点,就不能深刻认识到我们将要讨论的问题。
从编程语言本质可以看出,编程语言的作用是承载信息用于控制计算机,那么所承载的信息是哪里来的?答案是人脑。我们几乎绝大部分工程师在参与软件开发的过程中都没有认识到一件事情,真正的终端是人脑,信息产生于人脑,网络连接的是人脑与人脑,人脑是信息产生处理的源头和终点。计算机只是量变了人脑之间的通信,至少在强人工智能实现以前,都不会质变这个过程。所以计算装置的总设计纲领产生于人脑,而软件也包括在内,编程语言就更加属于这个范畴。
现在再来看要不要学某门语言的问题,编程语言之间的最大区别其实是底层编译器的区别,编译器的区别在于编写编译器的开发人群之间的区别,所以最终产生区别的发源地是开发人员对于世界认知的不同,导致不同的编程映射方式,有的语言语句不用分号结尾,有的语言可以有分号,也可以没有分号,这些区别都不是浑然天成的,他们产生于软件作者的不同世界观,才产生了不同的语言差别。一个开发者如果融入符合自己世界观的开发者社区,将会如虎添翼,如果进入了与自己世界观不同的社区,将犹如进入地狱一样,极端的例子例如:Linus 极度讨厌 C++。
当然了,世界观也是一点一点养成的,早年的经历,工作当中接触的技术会影响我们的世界观,再加上自身性格与对世界的认知,最终形成我们对于编程语言的口味,使你在用某个语言时特别舒服,而某些语言让你生不如死,但是对于别人,也许这生不如死的语言正是他们的最爱,这也是编程语言战争的导火索,我们都倾向我们喜爱的语言,痛恨另自己难受的语言。所以产生语言战争的根本原因不是语言的优劣,而是我们人脑的偏见导致的。
有人说,我这么多年也没有过热爱什么语言,也没有痛恨过什么语言,这是为什么呢?这是因为,我国信息产业还处在初级阶段,国家层面上的研发还停留在应用开发的阶段,我们的底层研发人员凤毛麟角,这切断了我们产生自主软件世界观的源头,我们只是拿国外开发的系统,语言来用,融入别人的世界观,然后贡献自己的代码,而我们东方特有的世界观极少有机会能够产生自己的软件生态,知乎上无数人追问为什么国内没有产生伟大的编程语言,就是因为这些原因,想来甚是可惜。不过随着国家的不断发展,我相信总有一天国人能够拥有自己的软件生态,不再受制于人。
那么问题来了,到底要不要学 Go,不同的人答案不同,如果你的底层世界观和 Go 语言社区相一致,那么果断融入,也许将来能够赶上下一波潮流,以后升职加薪那是少不了的。如果自己所在领域,以前的语言与 Go 的哲学差异很大,那就要慎重一些,毕竟不同世界的事物想要融合,将需要巨大的时间去催化,而开发人员的时间又是及其宝贵的,所以建议慎重选择。如果单纯想提高哦收入,学一套自己所用语言的新的框架,时间利用率会高的多。
最后,如果你读了上面的文字,觉得像神仙打架,不知所云,那么说明你还停留在代码搬运的表层阶段,闲暇之余多读一些计算机科学方面的书籍,有助于改善这个问题,底层知识的力量就在于能够让你彻底认知一个问题,而不是流于表面,人云亦云,别人说的就一定对吗? No,要我自己审视推敲证明是对的,才能说是对的,否则我们就只能像个路由器一样,接收转发,没有一点自主权利。对于 Go 呢,我还是推荐了解一下 Go 语言的,国内不流行不说明就不优秀,看看 Go 语言创始人都有谁你就会知道,至少冲着大神们的招牌,应该错不了,具体怎么样,等细细研究过 Go 语言之后,相信定会受益匪浅。