ESAP达摩院 思想有多远,我们就能走多远

大道至简的哲学


简单就是美

村长没有口头禅,如果有,那就是这句了。

  • 软件系统的设计能遵循这点就是守住了根基,否则系统越大溃败也越快。

  • 虽然村长不是计算机专业出身,但作为业余爱好之一,编程经验也超过了17年。

最早是初中接触DOS,WIN98,自学了VF,C++; 后来大学接触winXP/2000,专业课学习C语言,图书馆借书自学了VB; 工作以后又自学了C#,php,javascript,go等;

  • 整个计算机世界都是C语言在支撑,从Unix,linux到windows,系统内核无一不是由C构建。

  • 作为内核级语言,C语言已经足够优秀,但C只被少数人掌握和使用,远远不能满足应用级软件的开发需求。

  • 由此导致了C++/JAVA等语言的诞生,这些类C语言对C进行了大幅的扩展,加入许多黑科技,日积月累形成了人为技术壁垒,深入学习曲线变得陡峭。

  • 无意于评价语言的好坏,只是学到go时才让村长真正静下心来思考一些设计哲学的问题。

  • 相比于C#/C++/java那些冗长的OO链,以及各种多余抽象概念和复杂设计模式,go就像一股清流,回归到C语言的本源哲学。

  • 有人说google是重度代码洁癖患者,的确,要支持世界那么多应用,google的20亿行代码放在哪儿都是令人生畏的。

  • 同样的,网络传输中哪怕只能节省一个字符,对全世界而已也是节省了巨额流量,google主导的go处处充满了这种洁癖。

大道至简

go的简洁正是大道至简的哲学实践:

  • 仅有25个关键字,这是最最常见的简洁评价。

  • 没有泛型,这点跟C类似,然而经常被OO玩家吐槽。

  • 没有分号,越来越多的语言开始这么干了,此处节省1字符。

  • 没有括号,if,for,switch等条件没有括号,此处节省2字符。

  • 没有break,switch自带了,节省5字符。

  • 没有while,只有for,可以,这里节省了2个字符。

  • 没有Public,Private,只有大小写,嗯,节省得任性。

  • 没有class,跟C语言一样,只有struct,其实class也就是在struct上扩展了成员函数,go就是这么干的,no class!

  • 没有构造函数,使用make关键字处理内置类型,例如slice,map。

  • 没有继承,使用interface,回忆一下google的20亿行代码交流,你确定要写继承声明?实际上这就像现实交流中没人会说我祖上是谁,而是说这个工作我会,这就是接口的哲学。

简约而不简单

go的设计哲学虽然简洁,但功能方面确一点也不含糊:

  • 动静结合,语法动态,静态编译。

  • 原生的UTF-8支持,你可以适当使用中文编码。

  • 多值返回,妈妈再也不需要组arr再返回了。

  • 跨平台,这比C/C++要强太多。

  • 有GC,1.8的GC已经降到1ms了,很多游戏服务器已经起飞。

  • 并发性能,goroutine和channel不但简单易用,还能充分发挥多核硬件优势,Let’s go go go~

  • 部署简单,自带runtime,没有任何外部依赖。

  • 强大的网络库和工具,构建网络服务能力非常惊艳。

  • 自带单元测试和性能测试,跑Benchmark会上瘾啊。

  • 最重要的一点,简单易学,任何语言转过来都是几天的事儿,业余时间都能撸出大项目。

小结

2016年已成为历史,然而村长在这年收获了很多也成长了很多,最近在重构一年前的wechat模块时,从go的官方库中获得了许多灵感,也新增了许多姿势。重构工作已接近尾声,接下来就是ESAP项目快速迭代,发力的时间到啦!


上一篇 ES圈子杂谈