源码先锋

源码先锋

从 3 个月业余项目到全球第一语言,Python 之父:将就代码如今真香

admin 180 163

GuidovanRossum在1989年圣诞假期期间,着手开发Python,仅仅用了三个月就让Python有了雏形。如今,这门语言不仅成为全球最受欢迎的编程语言之一,甚至超越了昔日霸主Java。

然而,在这门语言风光无两的35年后,Python的创始人却抛出了一个引人深思的问题:“‘Worseisbetter’(差即是好)现在还适用吗?”VanRossum坦言,这与其说是一个严肃的提案,不如说更像是一场“吐槽”,旨在“激发核心开发者们的一些思考”。

1“当年写Python的时候,我选择了将就”

今年五月的Python编程语言峰会上,GuidovanRossum—Python的创造者本人,无疑是大家最期待的面孔。他出现后直截了当地抛出了一个问题:“‘Worseisbetter’(差即是好),这套理论现在还管用吗?”

Guido先回顾了Python早期35年的开发经历。他提到,当年自己几乎只用UNIX,自然而然地,Python也深受UNIX精神的影响,尤其是其中的“worseisbetter”理念。

时间回到上世纪80年代末,Guido在荷兰的CWI研究中心参与了一个名为Amoeba的分布式操作系统项目。这个项目的目标是让整个计算机网络像一台单一的机器一样运作。

面对这一挑战,Guido开始思考是否有更高效的方法来开发这些必要的工具。他认为,与其继续用C语言编写,不如直接设计一门新的语言来加速开发进程。他想到了自己之前参与过的ABC语言项目。ABC语言结构优雅,特别适合处理用户数据,并且拥有列表和字典等强大的数据结构。然而,它过于抽象,无法直接与操作系统进行交互,更像是一种电子表格语言。

假期结束后,Guido仍在业余时间持续推进Python的开发。特别是在早期,Guido几乎包揽了所有代码工作。

“对我来说,‘worseisbetter’在很长一段时间里确实非常奏效。”如今,他Guido回忆道。他还举了很多Python的“糟糕设计”:比如没有长整型、依赖C的stdio实现、甚至一开始连类都没有。

但正是这些“简陋”的选择,让他能“在三个月内把语言跑起来”。他说:“语言的语法和结构,我其实并没有深入推敲,很多地方直接照搬了C和ABC。”

在软件设计领域,存在两种截然不同的哲学取向。

一派以MIT/Stanford为代表,强调“做正确的事”(TheRightThing)。CommonLisp、CLU、Scheme等语言都深受这一哲学的影响:注重形式逻辑、追求优雅和完整。与之相对的是另一种路径,即“WorseisBetter”。这一思想源自Unix与C传统。

“WorseisBetter”的核心哲学是:优先追求实现上的简洁性,而非完美。早期的Unix和C编译器正是这一思想的产物——它们结构简单、资源消耗少,能在不同平台上轻松移植运行。这种“够用就好”的策略,使得它们不仅能运行在小型计算机上,也能适配大型系统,展现出极强的可移植性。

这种做法也被称为“新泽西方法”:重点不是寻找最优解,而是先构建一个“能用、能传播”的系统。一旦系统达到“足够好”的门槛,就有可能像病毒一样迅速扩散。用户会逐渐适应它的不完美,开发者社区则可以在此基础上持续改进,逐步逼近理想状态。

这套方法通常遵循这样的路径:

首先构建一个跨平台、资源消耗低的基本实现;

把这个“次优解”快速推向用户;

在广泛采用的基础上,持续增强功能和性能。

“WorseisBetter”的提出者Gabriel(,1949年出生,美国计算机科学家,以在Lisp编程语言方面的贡献闻名)其实也并未否定MIT派的“正确主义”理念。他指出,这种模式更适合构建庞大复杂的单体系统,或像钻石般精致的小型系统。然而,这类系统往往需要漫长的设计周期和强大的硬件资源,难以在早期计算资源有限的时代广泛推广。

相比之下,“WorseisBetter”更具现实主义精神。它强调快速构建、简洁实现,从“够用”出发,逐步演进。这一理念不仅推动了C和Unix的崛起,也启发了后续如Web、JavaScript、Rust、React等技术生态的发展路径:先做出最小可用系统,再在实际使用中不断打磨。

2“今天的‘worseisbetter’还成立吗?”

对Python而言,“WorseisBetter”的理念似乎得到了验证,那些为了快速迭代而做出的早期妥协,最终也都被时间一点点补上了。

“这些年来,我当年偷的每一个懒,最终都被补上了。”比如哈希表的实现“被重写了两次”,垃圾回收器现在“几乎能填满整套系统”,测试用例也“堆了一大堆”——而最早的时候,“我们连测试都没有。”Guido在大会上表示。

“在那个时代,‘worseisbetter’是Python得以流行的关键。”他说,“我根本耗不起三年做语言设计,还没人用、也没人夸我一句。”事实上,从动手写代码到第一次发布,前后不到一年。“发布前几乎没有修什么问题,除了类——那还是一个实习生加进去的。”

“[Python]并不完美的事实,反而鼓励了很多人参与进来。”他回忆说,当时的代码都很简单直白,没人想着做什么性能优化。这让早期的贡献者迅速产生了归属感,“这门语言也成了他们自己的孩子。”这些人后来也在各自的公司里积极推广Python。

那么,“今天的‘worseisbetter’还成立吗?”Guido将早期开发节奏和现在作了对比:“现在的新功能,往往需要大厂资助的团队投入数年时间才能推出。”

比如静态类型系统,“得理解非常深奥的类型系统理论,几乎得有学术背景。”而且这还不仅是Python自身的复杂度问题,“像numpy这样的项目,也全靠专职维护者撑着。”

“我们现在的社区很大,但真正能做出实质性贡献的人其实并不多。”Guido反问:现在的贡献者是否非得“写出一份完美的PEP,或者一个能直接部署的原型”?

他怀念过去那种“先把功能做出来交给社区,后面再慢慢完善”的开发节奏。

“难道我们真的要放弃‘worseisbetter’,追求每一件事都尽善尽美?”他说,“那样挺可惜的。”但他也承认,“我不知道该怎么改变现在的状况。”毕竟,核心开发者也担心发布新功能后会破坏已有代码。

3让更多人走进Python

谈及其他项目时,Guido还特别提到了PyO3,分享了Rust与Python的组合开发“就是走的‘worseisbetter’路线:先把能跑的核心特性搭起来,再慢慢打磨。”他停顿了一下:“听起来比做核心CPython有意思多了。”

据其维护者DavidHewitt的说法,PyO3定义了所有Python解释器的公开API,让Rust能够把它们视为C的外部接口,其目标是让Rust开发者只需要专注于自己的业务逻辑,而不需要考虑底层细节。

David认为,Rust的优势体现在人才生态上,“许多年轻程序员正在从Rust起步”,如果Rust获得投资,这可能会“扩大人才库的规模”。

不过,引入Rust并非没有代价。从单一语言到双语言开发,会带来显著的技术和组织复杂度上升,一个可参考的案例是“Linux内核项目推进Rust的引入”。尽管RustforLinux项目在技术和社区管理上都极具挑战,甚至遭遇部分核心开发者的抵触,但它还是在跌跌撞撞中被往前推进,其重要原因就是Rust能为Linux吸引来一批新一代的开发者。

另外,针对Rust这门语言本身,Python之父Guido补充道:“当然啦,我可能永远不会学Rust……也许该试试。”

最后他总结道:“也许我们真的应该朝这个方向多走一步:让更多社区成员有参与感,让他们也能关心这门语言的发展。”