Python程式語言

在這一章我們會介紹我們這份教學的主角,也就是Python這種程式語言,Python是Gudio Rossum,在xxxx年發明的程式語言

相信各位讀者一定都會有個疑問,程式語言百百種,最常聽見的C/C++、VB、PHP、Java、Perl、Ruby等等,還有更多從來沒有聽過的,為什麼要選擇學習Python而不是其它的語言呢? 在這裡我們列出一些重要的特性

活躍的社群

選擇一款程式語言不只是單純地選擇一款語言,同時也是選擇社群,那什麼又是社群呢? 簡單的來說,就是使用或參與程式語言發展的人們,活躍的社群就是表示這群人有持續改善語言,在網路上的討論版回答相關的問題,修正相關程式的問題,因此程式語言本身會持續地進步,當你遇到問題可以找到人回答,程式有問題也會有人修正,相對的如果一款語言的社群不活躍,就表示語言幾乎沒有改進,程式本身有問題也沒人修正,出現相關問題也找不到人回答。

因此,一款語言的社群是否活躍是選擇是的一個重點,而Python的社群是相當活躍的,每年都會舉辦盛大的會議,叫做 PyCon ,可以由其一年比一年盛大的情況理解Python的社群是正在成長的,同時,Python在 TOIBE 的指標也一直成長,如下圖所示

../_images/python_plot.png

同樣的,Python的排行也越來越前面

../_images/python_rank.png

可預見的是在未來Python的使用者只會越來越多。

備註

在此TOIBE計算程式語言指標的方式是用在搜尋引擎裡被搜尋的程度來決定的,雖然未必完全準確,但可以做為程式語言是否受關注的參考

非特定公司所有

常見的很多程式語言是由某些公司所研發的,例如Java最初是由Sun公司研發的,然而最近Sun公司被Oracle公司收購,利用相關的專利來對抗其它公司,造成社群的不滿,使用公司支援的程式語言就會有這類的風險,公司有可能倒閉,或被收購,又或著因為商業策略的原因停止語言的支援,在這之後程式語言的社群可能就會開始走下坡,甚至消失。

而Python程式語言本身是由 Python軟體基金會 所有,因此不會有上述的此類情況發生。

開放源始碼

Python的是開放源始碼的專案,因此任何人如果有需要都可以依照自己需求對Python進行修改,又或著當不瞭解Python的某個功能是怎樣運作的? 沒關係,這些答案都可以在程式碼裡找到。

深思熟慮的設計

程式語言本身也需要經過設計和研發,不同的程式語言研發的方式不盡相同,例如PHP的研發是交由參與者自行決定,因此造成很多相當糟糕的設計,例如很糟的Unicode支援,像這諸多缺陷至今仍存在,程式寫起來就較費力且容易出錯。

而Python本身的開發是有嚴僅的流程,先提案,接著由社群討論,接著再定案或否決,因此所有Python的設計幾乎都是經過深思熟慮而不是隨意決定的,這些提案的列表叫 Python Enhancement Proposals ,有興趣可以看看其中的Python設計的提案與討論。

傑出的設計哲學

Python不同於許多程式語言,在Python設計的背後有一套哲學,名為 Python之禪 (The Zen of Python) ,其中闡述了Python的設計理念,而這套理念是來自設計參與者們多年程式設計的經驗,因此使得Python的設計環繞著傑出且老練的哲學,以下即為其設計之哲學

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
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.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

眾多的第三方資源

一款程式語言除了語言的本身,最大的資產就是相關的現有資源,Python本身就擁有相當多的第三方資源,從網頁框架、網路程式、視窗介面等等一應聚全,因此學會Python就可以利用這些現有的資源來加速開發的過程

跨平台

Python是一款跨平台的語言,意思就是Python程式可以在幾乎任何主流平台下執行,例如你可以寫一隻程式可以在Windows下執行,也可以在Mac OS X下執行,當然Linux下也沒問題

備註

在此指的跨平台並不是指所有程式都可以不用任何修改就能夠在不同的環境下執行,很多地方還是得考慮作業系統等相關的環境變因,但Python的直譯器本身在大多數的環境下都能運作,加上豐富的標準函式庫,已經大大減低跨平台程式所會遇到的問題

被廣泛地使用

Python已經被運用在各種不同的領域中並且有良好的表現,例如網路上許多知名網站就是以Python建構的,例如 Plurk 即是一個很好的例子,Python同時被Google大量運用,例如 Google App Engine 第一個支援的語言即是Python,除此之外也被廣泛地使用在科學計算、網路伺服器開發、網頁開發、系統管理等等不同的領域

優良的文件

對於程式設計師而言,很多令人頭痛的問題都是因為相關的文件沒有寫清礎造成的,而幸運的是,Python是一款鼓勵寫優良文件的程式語言,不只是 Python語言本身的文件 ,其優良的傳統也由大多數優秀的第三方程式庫繼承,因此在網路上找得到的Python程式庫大多都有良好的文件,諸如 DjangoSQLAlchemyPyramid …等等數不清的程式庫,都有令人稱道的優秀文件說明,身為Python使用者最快樂的事之一就是到處都有精美的文件

強調可讀性

Python是一款少數極為強調可讀性的語言,為什麼可讀性很重要,是因為關於程式語言有兩個事實

程式讀比寫還多次
讀程式比寫程式難

雖然即使用Python也能寫出骯髒的程式,但是Python做了相當的努力在於增進可讀性,因此大多數的程式設計師都能用Python寫出可讀性佳的程式

美中不足之處

中文資源不足

Python對於中文為母語的學習者而言最大的缺點就是中文的資源相當不足,讀者可以在市面上找到數十本甚至數百本關於PHP的中文書籍,但是關於Python的中文書籍卻少得可憐,因此就現階段而言學習Python得至少要能有閱讀英文的基本能力

國內使用者不足

Python在前些年對國內大部的程式設計師都是一個陌生的名字,大部份人聽到第一個反應都是沒有聽過,很多技國外已經相當流行,但國內通常還流行五六年前甚至是十年前的技術,諸如PHP手工建網站至今在台灣仍然很常見,但是隨著Python在國內越來越流行,從早期沒有人聽過,到最近有越來越多人開始使用,相信在未來會有越來越多人會喜歡上Python這款語言

國內工作需求不足

在國外目前的人力市場已經有相當大量的Python相關工作需求,例如在 Stackoverflow Careers 2.0oDesk 搜尋Python都可以找到大量相關的工作或人才,但在台灣卻是少得可憐

領導時代,而不是讓時代領導你

雖然Python在國內還不是如此的熱門,但是隨著時間成長,相信會越來越熱門,與其等路邊賣雞排的阿伯都說他會寫Python再來學,不如現在就開始吧 :D