Python系列教程6
當Python於20世紀90年代初期出現在軟體舞臺上時,曾經引發其擁護者和另一個受歡迎指令碼語言Perl的擁護者之間的衝突,但現今已成為經典的爭論。我們認為今天這種爭論令人厭倦,也沒有根據,開發人員都很聰明,可以找到他們自己的結論。然而,這是我在培訓課程上時常被問到的問題之一,所以在此對這個話題說幾句話,似乎是合適的。
故事是這樣的:你可以用Python做到一切用Perl能做到的事,但是,做好之後,還可以閱讀自己的程式程式碼。就是因為這樣,兩者的領域大部分重疊,但是,Python更專注於產生可讀性的程式碼。就大多數人而言,Python強化了可讀性,轉換為了程式碼可重用性和可維護性,使得Python更適合用於不是寫一次就丟掉的程式。Perl程式程式碼很容易寫,但是很難讀。由於多數軟體在最初的建立後都有較長的生命週期,所以很多人認為Python是一種更有效的工具。
這個故事反映出兩個語言的設計者的背景,並體現出了人們選擇使用Python的一些主要原因。Python的創立者所受的是數學家的訓練,因此,他創造出來的語言具有高度的統一性,其語法和工具集都相當一致。再者,就像數學一樣,其設計也具有正交性(orthogonal),也就是這門語言大多陣列成部分都遵循一小組核心概念。例如,一旦掌握Python的多型,剩下的就只是細節而已。
與之相對比,Perl語言的創立者是語言學家,而其設計反映了這種傳統。Perl中,相同任務有很多方式可以完成,並且語言材料的互動對背景環境敏感,有時還有相當微妙的方式,就像自然語言那樣。就像著名的Perl所說的格言:“完成的方法不止一種。”有了這種設計,Perl語言及其使用者社群在編寫程式碼時,就一直在鼓勵表示式的自由化。一個人的Perl程式碼可能和另一個人的完全不同。事實上,編寫獨特、充滿技巧性的程式碼,常常是Perl使用者之間的驕傲來源。
但是,任何做過任何實質性的程式碼維護工作的人,應該都可以證實,表示式自由度是很棒的藝術,但是,對工程來說就令人厭惡了。在工程世界中,我們需要最小化功能集和可預測性。在工程世界中,表示式自由度會造成維護的噩夢。不止一位Perl使用者向我們透露過,太過於自由的結果通常就是程式很容易重頭寫起,但修改起來就不是那麼容易了。
考慮一下:當人們在作畫或雕塑時,他們是為自己做,為了純粹美學考慮。其他人日後去修改圖畫或雕像的可能性很低。這是藝術和工程之間關鍵的差異。當人們在編寫軟體時,他們不是為自己寫。事實上,他們甚至不是專門為計算機寫的。而實際上,優秀的程式設計師知道,程式碼是為下一個會閱讀它而進行維護或重用的人寫的。如果那個人無法理解程式碼,在現實的開發場景中,就毫無用處了。
這就是很多人認為Python最有別於Perl這類描述語言的地方。因為Python的語法模型幾乎會強迫使用者編寫可讀的程式碼,所以Python程式會引導他們往完整的軟體開發迴圈流程前進。此外,因為Python強調了諸如有限互動、統一性、規則性以及一致性這些概念,因此,會更進一步促進程式碼在首次編寫後能夠長期使用。
長期以來,Python本身專注於程式碼質量,提高了程式設計師的生產力,以及程式設計師的滿意度。Python程式設計師也變得富有創意,以後就知道,語言本身的確對某些任務提供了多種解決辦法。不過,本質上,Python鼓勵優秀的工程的方式,是其他指令碼語言通常所不具備的。
至少,這是許多采用Python的人之間所具有的共識。當然,你應該要自行判斷這類說法,也就是通過了解Python提供了什麼給你。
相關文章
- Python教程-6模組Python
- 好程式設計師Python教程系列-第6講:迴圈結構程式設計師Python
- Gurobi基礎教程(Python版)-系列教程2Python
- 小白學python系列-(6) 條件判斷Python
- webpack4 系列教程(二): 編譯 ES6Web編譯
- Python教程系列之Flask框架的學習PythonFlask框架
- Python技巧:Docker框架的使用系列教程(一)PythonDocker框架
- Python教程系列(一)—— Python基礎教程之第一個程式設計練習Python程式設計
- H5 Audio ES6版 系列教程之二H5
- H5 Audio ES6版 系列教程之一H5
- 🔥《手把手教你》系列練習篇之 6-python+ selenium 自動化測試(詳細教程)Python
- 【漫畫講技術】CSS系列漫畫教程(6-10講)CSS
- 《Python 簡明教程》讀書筆記系列三 —— 模組Python筆記
- react系列教程React
- 癌症免疫系列(6)
- 人人都能學會的python程式設計教程6:列表(list)Python程式設計
- 好程式設計師Python教程從零開始學Python系列-第2講程式設計師Python
- 好程式設計師Python教程系列分享之Python語言元素之運算子程式設計師Python
- 好程式設計師Python教程系列分享之Python語言元素之變數程式設計師Python變數
- 🔥《吐血整理》保姆級系列教程 - 玩轉 Fiddler 抓包教程 (6)-Fiddler 狀態皮膚詳解
- 《進擊吧!Blazor!》系列入門教程 第一章 6.安全Blazor
- WCF系列教程地址
- 微服務系列教程微服務
- Python學習教程:Numpy系列,建立陣列的三大絕招Python陣列
- 好程式設計師Python教程系列第5講-分支結構程式設計師Python
- 《Python 簡明教程》讀書筆記系列四 —— 資料結構Python筆記資料結構
- Tkinter系列教程01—引言和安裝Tk—Python GUI程式設計PythonGUI程式設計
- leapftp教程,掌握leapftp教程只需6步FTP
- 鴻蒙系統系列教程6-鴻蒙系統專案結構解析鴻蒙
- Python 教程Python
- 依賴注入系列教程依賴注入
- Android 系列教程 彙總Android
- ES6 系列之 WeakMap
- Python爬蟲入門教程 50-100 Python3爬蟲爬取VIP視訊-Python爬蟲6操作Python爬蟲
- Python JSON 教程PythonJSON
- Python快速教程Python
- 【Playwright+Python】系列教程(二)手把手帶你寫一個指令碼Python指令碼
- Python實現超級瑪麗遊戲系列教程01瑪麗登場Python遊戲