Skip to content

Latest commit

 

History

History
131 lines (93 loc) · 7.87 KB

README.md

File metadata and controls

131 lines (93 loc) · 7.87 KB

Python Philosophy原文及相关说明: http://www.c2.com/cgi/wiki?PythonPhilosophy
译文发在:Python Philosophy(Python哲学)翻译及简析,2010-09-28

Python Philosophy(Python哲学)翻译及简析

Python哲学

Python之禅 —— Tim Peters

  1. 美优于丑。
  2. 直白优于隐晦。
  3. 简单优于复杂。 [1]
  4. 复杂优于纠结。 [2]
  5. 扁平优于嵌套。 [3]
  6. 稀疏优于稠密。 [4]
  7. 可读性是有重要价值的。
  8. 特例可以有,但不能特例到打破规则。
    • 尽管在纯粹性和实用性之间倾向的是实用性。
  9. 出错决不能无声无息地忽略。
    • 除非明确地说明了是无声无息的。
  10. 面对二义性情况时,要拒绝任何猜的诱惑。
  11. 一件事应该一种做法 —— 并且宁愿只有一种做法 —— 一种显而易见的做法。
    • 尽管在刚开始的时候这个做法可能不是那么显而易见,毕竟你不是荷兰人。 [5]
  12. 『现在』优于『决不』。 [6]
    • 尽管『决不』常常优于『马上』。 [7]
  13. 如果一个实现难于解释清楚,那它是个差的想法。
  14. 如果一个实现很容易解释清楚,那它可能是个好的想法。
  15. 命名空间是个拍案叫绝的想法 — 放手多多用起来吧!

译注

[1] [2] 单词 complex 的意思是 复杂,而 complicated 是 结构复杂。

在计算机领域中,complex 可以对应 单个模块的复杂,而 complicated 则可以对应 多个模块互相关联的复杂。
用计算机的术语来说,complicated 是不同模块之间紧『耦合』,体现了理解不深、设计不好。

软件的核心复杂度是不可避免的,但要这些集中一起,给用户一个干净高级的接口。
也就是说:如果 complex(核心复杂性)不可避免可以接受,但 complicated(偶然复杂性) 一定要想办法去除。

随着系统的理解深入,模块职责的划分以及之间的交互会更简单明了。
PS: 核心复杂性(essential)与偶然复杂性(accidental)的说明讨论可以参见《代码大全》《领域驱动设计》

翻译上,complex 翻成 复杂,complicated 翻成 纠结。

[3] 这里的『扁平』和『嵌套』说的是代码逻辑,嵌套的逻辑增加了逻辑及其对应理解的复杂性,应该想办法用更好的设计来避免深的逻辑嵌套实现。

另外,一个对应的话题是『数据』的 『扁平』 vs.『嵌套』,个人看来,期望用『嵌套』的数据,因为这可以简化数据理解规则和处理逻辑。可以把『嵌套』的数据看成是有『Namespace』的,也呼应了最后一条大力推荐使用命名空间。

更多讨论参见:

[4] 稀疏、稠密指的是代码行中操作的疏密。

CGeek,喜欢写稠密的代码,比如使用++--运算符来压缩代码行。在Python看来,这个做法不可取,即会让代码更可能出错(如自增操作的副作用),也降低了代码的可读性。

[5] 这里的荷兰人指Python之父Guido,参见说明:武汉大学开源技术俱乐部 技术交流 第1期

在这里作者TimPeters既含蓄地表达了对Python之父Guido的敬意,又体现了自己作为Python开发的傲娇,不是吗? 😁

[6] [7] 关于『Now/现在』、『never/决不』、『right now/马上』,个人理解,这个条目要说的是:

决定是否做实现一个功能,要想清楚,要么做要么不做,都能给出 明确的 理由;但不要模模糊糊的说『后面马上』做,回避对系统的分析思考。

否则结果会是:

  • 『马上』做 是 『世界上最不能相信』的话 😄 ,想想饭店服务员的话『您要的菜马上就好』,其实你自己知道后面往往就不会去做这个功能了。 更多『世界上最不能相信』的话参见世界上最不能相信的几句话
  • 『马上』做 === 不经过思考的不做,结果系统没有做一个本该这个系统做的功能!然后这个功能在不合适的地方被实现,即系统设计有问题。

个人讨论

既有指明大是大非的理念,又有指导细节操作的准则。

既有谆谆教导的推荐,也有声色俱厉的禁止。

每一个点都千锤百炼;每一点都有直指内心的感觉。

看了 N 遍,每遍都会深思。

Python说得内容对生活个人觉得一样有指导性,果然是哲学。

参考/阅读资料

  1. Python(programming language) - Wikipedia
  2. No programming language offers what Python does philosophically.
    在编程哲学上,Python超越了其它编程语言。
  3. 武汉大学开源技术俱乐部 技术交流 第1期
    这里还有其它有关Python有意思的东西。
  4. 核心复杂度的说明参见《代码大全》一书。
  5. 世界上最不能相信的几句话

Python Philosophy原文

The Zen of Python, by Tim Peters

  1. Beautiful is better than ugly.
  2. Explicit is better than implicit.
  3. Simple is better than complex.
  4. Complex is better than complicated.
  5. Flat is better than nested.
  6. Sparse is better than dense.
  7. Readability counts.
  8. Special cases aren't special enough to break the rules.
    • Although practicality beats purity.
  9. Errors should never pass silently.
    • Unless explicitly silenced.
  10. In the face of ambiguity, refuse the temptation to guess.
  11. There should be one -- and preferably only one -- obvious way to do it.
    • Although that way may not be obvious at first unless you're Dutch.
  12. Now is better than never.
    • Although never is often better than right now.
  13. If the implementation is hard to explain, it's a bad idea.
  14. If the implementation is easy to explain, it may be a good idea.
  15. Namespaces are one honking great idea -- let's do more of those!