有些人提到我,就会提到我最早在 Google 做的那个 Python 类型推导引擎,叫PySonar。有些人因此莫名的崇拜,有些人因此莫名的嗤之以鼻,只有少数人能准确的理解 PySonar 的价值和意义。所以现在经过多年的经历之后,我想来回顾和总结一下 PySonar 的价值和它对我的意义。
许多人不理解的一个问题是,PySonar 在我心目中的地位。有些人以为我为这东西引以为豪,所以如果他们想贬低我,就会在 PySonar 身上找茬,以为否定了我“毕生的唯一大作”,就能否认我的个人价值。
然而事实却是,我完全不认为 PySonar 是我留下来的最重要的作品。我有技术和价值比 Pysonar 高很多的代码,只不过网络上的人没有发现,或者没法看到。通过自己的独立思考,设计出 PySonar 这样的类型推导引擎,让我自己学到了一些很重要的思维方法。然而 PySonar 这个产品本身,对于我的价值却是非常有限的。
首先,PySonar 针对的是一个设计并不那么好的语言——Python。给 Python 做工具并不是我自愿的选择,而是在 Google 的工作环境下,我能作出的相对而言最好的选择。我的另一个选择是 C++,然而我显然更不喜欢 C++。最后我在两个麻烦的语言里面,选择了相对好一点的,这就是为什么有了 PySonar 而不是 C++Sonar :P
虽然很多非计算机科学人士(比如做数学统计,机器学习,机器人技术的人员)喜欢用 Python,然而在 CS 专家看来,Python 制造了许多根本没必要存在的问题。Python 提倡过度的所谓“动态性”和“灵活性”,给类型检查的实现带来了空前的难题,可以说是没法解决的难题。
试图解决这样的难题,可以锻炼一个人的头脑,然而它却不能产生实际的价值。类型安全对于语言是很重要的需求,Python 不能提供类型安全,所以不能用于构建对可靠性有所要求的软件。类型错误很不容易发现,发现了还很难追踪和 debug。软件可能运行几个月没问题,然后忽然因为一个类型错误被触发而当掉。
在这种意义上,Pysonar 作为一个产品,在我心目中的地位是很低的。我完全可以自己设计一个语言,没有 Python 的这些问题,却一样的好用。就算是 Java 这样的语言,它的类型系统实现起来也比 PySonar 容易很多。
很多人觉得给 Java 做个类型检查太容易,显示不出水平,所以很在乎给 Python 做的这种工具,然而我并不以盲目的解决困难的问题而自豪。相反,我认为聪明的避过难题,或者从根源上消灭问题,让它变得根本无需解决,才是最高等的智慧。
PySonar 这个产品在我心目中的地位很低,这就是为什么我没有想过要商业化它。然而这并不等于它是一文不值的,实际上 PySonar 对于很多人还是有重要作用的。包括 Google,Sourcegraph,还有其他几个制造代码管理工具的公司,都在从 PySonar 的代码获得价值。
很显然,Google 的许多 Python 程序员,都在直接或者间接地获得 PySonar 的帮助。PySonar 是 Google 内部一个叫做 Grok 的服务的一个关键部分,它每天都会生成对 Google 内部所有 Python 代码的语义索引。Grok 又间接地向 Google 内部的其它服务提供索引数据,比如 Google 程序员常用的一个工具“CodeSearch”,里面的 Python 代码上面的各种跳转链接和信息,都是 PySonar 提供的。
Google 使用的是第一版的 PySonar。由于它的一些局限性,后来 Google 又成立了一个新的小组,试图使用 Prolog 语言写一个更好的工具来代替它。经过两年多的努力,那个工具仍然没有上线。从他们的做法(比如使用 Prolog)看来,这个项目成功的几率几乎为零,因为他们其实是在重复我之前犯过的错误。在 Sourcegraph 的时候,我完成了 PySonar 的第二版,叫 PySonar2 。PySonar2 采用的新设计,使得 Google 这个内部团队几乎永远无法超越,除非他们采用一模一样的做法,或者干脆使用 PySonar2 的代码。
我很少关注和跟踪 PySonar 的使用者,然而它的用户其实不止 Google 和 Sourcegraph。我的一个朋友做了一个代码管理工具,使用 PySonar 作为 Python 的索引引擎,现在华为是这个工具的一个用户。我还知道另外至少两个 startup 试图使用 PySonar 的强大索引功能,来构建新一代的代码编辑和管理工具。也许不久以后大家就能用上这些的产品。
我并不是没有能力来发展类似的产品,实际上我是一个非常好的设计师。有人可能没有想到,我甚至设计 UI 的能力,都比一般的设计师要好。然而我对 PySonar 本来就没有很大的兴趣,所以我宁愿让其它人使用 PySonar 去创造商业价值。
虽然 PySonar 作为产品对于我的价值相当的低,然而通过独立思考实现 PySonar,我掌握了非常重要的思维方法。实际上,第一次在 Google 实现 PySonar 之后,我已经从无到有,构建出了几乎整个所谓“类型理论”(type theory)领域的知识。我没有通过阅读 TAPL 这样的书籍来学会类型理论,而是独立的发明了大部分的内容。
这种独立获得的知识和思维方法,对我有着巨大的价值,这种价值比 PySonar 本身要大非常多。这些思维方法,完全不局限于 Python 语言,而是可以普遍的适用于所有的语言,包括 Python,JavaScript,Ruby,Java,C#,Go,Rust……
这些思维方法,甚至不止限于设计程序语言的工具,它们可以被用于设计许多其它的系统。所以即使在 PySonar 的工程结束以后,它们仍然能够指引我解决现实工程中越来越多的问题。我利用这里面的某些思想,在实际的工作中做出了很大的贡献。由于商业机密原因,我无法向你介绍我做了什么。我并不需要网络上的人对我的认可,获得我的服务的公司,他们显然知道其中的价值。
通过设计 PySonar 所掌握的这些精华信息,价值巨大,所以显然是不会那么轻易传授给其它人的 :P