本文是 Python 之禪特別系列的一部分,重點此篇着眼於第七、八、九條原則:可讀性、特殊情況和實用性。
軟件開發是一門充滿了取捨的學科。每一個選擇,都有一個同樣合理但相反的選擇。將一個方法私有化?你在鼓勵複製粘貼。將一個方法公開?你在過早地對一個接口做出承諾。
軟件開發者每時每刻都在做艱難的選擇。雖然 Python 之禪 中的所有原則都在一定程度上涵蓋了權衡,但下面的原則對一些權衡進行了最艱難、最冷酷的審視。
可讀性很重要Readability counts
從某種意義上說,這一中間原則確實是整個 Python 之禪的中心。這條原則與編寫高效的程序無關。在大多數情況下,它甚至與編寫健壯的程序也無關。它講的是編寫出別人能讀懂的程序。
閱讀代碼,就其本質而言,發生在代碼被添加到系統中之後。通常,它會發生在很久很久以後。忽略可讀性是最簡單的選擇,因爲它對現在沒有傷害。無論添加新代碼的原因是什麼,它都會對現在造成影響,無論是一個令人痛苦的 bug 還是一個被強烈要求的功能。
如果面對巨大的壓力,把可讀性扔到一邊,只管“解決問題”,而 Python 之禪提醒我們:可讀性很重要。編寫代碼讓它適合閱讀,無論是對自己還是他人,都是一種慈悲。
特殊情況不足以違反規則Special cases aren't special enough to break the rules
總是有各種藉口:這個 bug 特別麻煩,先簡單處理一下吧;這個功能特別緊急,別管美觀了;這種情況下所涉及的領域規則特別複雜,嵌套深點也沒關係。
一旦我們對特例的藉口妥協,大壩就會破裂,就喪失了原則;事情就會演變成一個瘋狂麥克斯的荒誕症,每個程序員都會爲自己試圖找到最好的藉口。
紀律需要承諾。只有當事情艱辛、有強烈的誘惑時,纔是對一個軟件開發人員的考驗。總是有合理的藉口來破壞規則,這就是爲什麼必須堅守規矩的原因。紀律就是向例外說不的藝術。沒有任何解釋可以改變這一點。
雖然,實用性勝過純潔性Although, practicality beats purity
“如果你只想着擊打、彈跳、撞擊、觸碰敵人,你將無法真正打倒他。” —— 《宮本武藏:水之卷》
歸根結底,軟件開發是一門實用的學科。它的目標是解決真實的人所面臨的實際問題。實用性比純粹性更重要:首先,我們必須解決問題。如果我們只考慮可讀性、簡單性或美觀性,我們將無法真正解決問題。
正如宮本武藏所說的,每一次代碼修改的首要目標應該是解決問題。這個問題需要我們心心念念地去解決它。如果我們不以解決問題爲目標,只想着 Python 之禪,我們就辜負了這些原則。這是 Python 之禪所固有的另一種矛盾。
via: https://opensource.com/article/19/12/zen-python-trade-offs
作者:Moshe Zadka 選題:lujun9972 譯者:wxy 校對:wxy