有挺多人问过我对 Google 的 Go 语言的看法,我一直都没有直接回答。其实很早以前看过一下 Go 的介绍,当时我就觉得是一些门外汉设计的蹩脚玩具。(对,Rob Pike 确实是个门外汉。)那语法设计得就像是故意想要显得跟其它语言(C,Java)不同,却把它们已有的很多语法上的优点都丢掉了。当时我就觉得,Google 设计这语言貌似并不是想把它投入实用,而只不过是想显示给世人:“看,Google 也会设计程序语言了。”
对 Go 持赞同态度的人,一般都没见识过真正好的语言,所以我就懒得跟人说它的糟糕之处了,免得有理也讲不清。就算要批评也应该批评像 C++,Common Lisp 和 Haskell 这样真正有点东西的语言。Go 语言连边都没擦到,所以不值得费口舌。这就像数学界的专家经常收到一些“民间数学家”的哥德巴赫猜想证明。他们根本看都不看,因为他们知道这些人连最基本的原理都没搞清楚。
对语言的品味很像对音乐的品味。如果你每天都听真正好的音乐,你不需要真的理解它们,过一段时间你就会觉得大部分的“流行音乐”都味同嚼蜡,或者不堪入耳。当有人问你“这音乐哪里不好了?”你却没法说出它哪里不好,你只知道它跟好的音乐很不一样。你也不想去追究它具体哪里不好,因为你不会再去仔细听它们,你的心里只看见美好的东西。世界上有太多糟糕的设计,对待它们的最好办法叫做“忽略”。程序语言也是差不多的,当你用一个设计良好的语言一段时间之后,你就会发现某些其它语言的蹩脚之处。然而没用过真正好的语言的人,永远都不会理解你在说什么。你也懒得管他们是否同意你的说法,就像你懒得跟那些“追星族”的高中生说话一样。
可是现在我发现貌似有稍微点评一下 Go 语言的必要了,因为 Google 似乎总是仗着自己的名气,鼓吹它的一些不堪入目的语言设计,并试图让它们“流行”。特别是这个 Go 语言,居然起了一个如此没有想象力的名字,简直就是在舔 Google 的屁股。如果是产品也许还无所谓,Gmail 的界面经常会设计一些愚蠢的“改进”,我都忍了。可是语言这个东西不一样。如果你对设计差的语言不批评,这个世界的程序员的品味就会降低。到时候一些仗恃自己会某某“最新语言”的人就会耀武扬威,甚至骑到你头上。我觉得 Google 和某些其它“互联网公司”,为了显示自己的“实力”,正在让本来就混乱的计算机行业变得更加混乱。
所以今天我就给 Go 语言一个合理的评价吧:
Go 语言里面有很多新的和好的东西。可惜新的东西都不是好的,好的东西都不是新的。
如果你想知道一些细节,可以看看我的思维导图关于 Go 语言的部分,不过我不想再为这个语言,以及其它一些不着边际的东西多费口舌了。