这篇文章主要内容来源于 Python 编程语言的最初设计者及主要架构师 Guido van Rossum 的博客 The History of Python(http://python-history.blogspot.com/)。博客文章不多,只有32篇而已,但是 Guido van Rossum 在这个博客里叙述和解释了 Python 一些重要特性的发明历史和这个特性诞生的原因,比如为什么 Python 会叫 Python,Python 为什么会使用缩进区分编程语句等等,有些特性很平常,而且替代选择也很多,至于为什么会选择其中一个,使用者往往不好回答,而对于最初设计者而言,却轻而易举。
Guido 大学毕业后加入了 CWI ,CWI 是荷兰的一家研究中心,它由荷兰政府教育部和其他研究基金资助,对计算机科学和数学进行学术级的研究。在 CWI 中,Guido 参与了 Amoeba 项目。Amoeba 项目是由 Andrew Tanenbaum 负责,CWI 和 Vrije Universiteit Amsterdam 两所机构共同参与开发的基于微内核的分布式系统。
在 Amoeba 项目中,Guido 发现用 C 语言开发系统管理程序所花费的时间太长了,而且因为 Amoeba 是一个全新的底层操作系统实现,导致了和原有的 Bourne shell 不兼容,在 Bourne shell 中无法执行 Amoeba 项目中的一些程序。这些原因让 Guido 意识到它需要一个能够弥合 C 和 shell 之间鸿沟,更高抽象级别、更加简单的编程语言去完成工作任务。
于是 Python 诞生了。
同样的 Guido 也在文章中解释了为什么选择造轮子发明 Python,而不是移植其它编程语言 ?那是因为当初并没有其它编程语言可以完成这些任务。
Python 的中文是“蟒蛇”的意思,而且 O’Reilly 出版社也用蟒蛇图片作为了 Python 相关书的封面(O’Reilly 非常喜欢用动物图片去作为其出版物的封面),平时看过的一些关于 Python 文章想当然的认为 Python 这门语言与蟒蛇关联上了,但实际上 Guido 并不喜欢将 Python 与蛇关联上。
For many years I resisted attempts to associate the language with snakes.
Guido 使用 Python 这个名字的灵感来源于他喜欢的一个马戏团的名字 Monty Python,并且他认为使用 Python 更具有 IT 行业一贯以来的不拘一格的个性。也符合编程语言的名称来源于名人的名字的习惯。
The word “Python” was also catchy, a bit edgy, and at the same time, it fit in the tradition of naming languages after famous people, like Pascal, Ada, and Eiffel.
Guido 在博客的开篇便提起了他所认为的 Python 是什么样的一门语言,从中摘抄几个核心设计点:
注意到没有,Guido 在开篇从未提到 Python 是一门追求性能的语言,至于为什么,在下一章提到 Guido 的设计哲学会提到,为什么 Python 不会一味地追求性能。
在了解 Python 的设计哲学之前,首先要知道 Python 在刚开始时是一个一个人独自维护的项目,没有任何官方预算,也没有任何其它支持,并且 Guido 也希望能尽快出结果。这些因素影响了 Python 的设计哲学。
First of all, Python was originally conceived as a one-person “skunkworks” project – there was no official budget, and I wanted results quickly
可以偷懒的设计哲学:
这些设计哲学帮助 Guido 在实现 Python 时节省了大量的宝贵时间,没有陷入到没有必要的细节中去;在不应该节省时间的地方,Guido 花费了大量的时间去精雕细琢。Guido 在 Python 这门语言中展现了他对实现细节本身和实现细节所需要花费时间的平衡的把握程度。
不可以偷懒的设计哲学:
就像 Guido 所说的那样,这些设计哲学正是让 Python 获得如此巨大成功的主要原因之一。
In many ways, the design philosophy I used when creating Python is probably one of the main reasons for its ultimate success. Rather than striving for perfection, early adopters found that Python worked "well enough" for their purposes. As the user-base grew, suggestions for improvement were gradually incorporated into the language.
Python 使用缩进区分编程语句来源于 ABC 编程语言,但是这个想法并非起源于 ABC,它是 Donald Knuth 所提倡的一种著名的编程风格( occam 编程语言也使用过它)。但是,ABC 编程语言的作者确实发明了使用冒号将导入语句(lead-in clause)与缩进块(indented block)分开的方式。
至于为什么要引入冒号进一步区分编程语句,是因为在一项早期的用户测试中发现单纯地使用缩进去区分语句,会让一些用户产生疑惑,影响了他们对编程语言的学习。而后面在编程语言里添加了冒号去区分编程语句,就会引起用户对后续内容的注意,从而帮助用户将前后的编程语句联系起来(想想 if/else、while 和 for 语句)。
除了上文提到,The History of Python 这个博客中还聊了很多,比如有对列表推导和迭代器历史的叙述,还有对 Python 为什么不是一门函数式编程语言,却有着函数式编程语言特性的解释,等等。
通过对这些历史的了解,读者朋友可能在某个时刻写着写着代码,用到了某个特性,想到了它的历史,便会心一笑:原来如此,心情也会豁然开朗。