軟件業的特點,就是層出不窮的新東東涌現。Windows早就革了DOS的命,瀏覽器差不多革了桌面軟件的命,云計算準備再革所有軟件的命,最后還追上個喬布斯說一切聽他的。
動蕩的軟件界,讓人眼花繚亂。這一切的后面,是失落的編程族:好容易才精通的東西,隨之變得一錢不值。曾經的人才,如同數碼產品般的迅速貶值。乃至好多人懷疑,編程是吃青春飯的行當。
在我前10年的編程經歷里,重復著同樣的杯具。Turbo C學完了,用Borland C,Visual C++太麻煩,開始用PowerBuilder快速開發,接上去Delphi、C++Builder、JBuilder,十八般武藝都學完了,結果又蹦出 個新時髦。哪天有個終結?在軟件的浪潮里,程序員太渺小了。我們害怕自己,會同過氣的語言一樣曇花一現,成為過眼煙云。
不是我見異思遷,而是潮流不可阻擋。但直至Python出現,故事開始轉折。
起源于上世紀80年代末的Python語言(
http://python.org),是一種開放源代碼的解釋型高級動態類型語言,語法簡練、類庫豐富,以開發效率高著稱。
20多年的發展時間,Python是愈久彌香,經歷住了時間的考驗。Python是Goolge的三大語言之一;全球最大的視頻網站 YouTube,以及國內的豆瓣網也是采用Python開發;最新最熱的行當中,python是往往web game的首選開發語言之一,谷歌和國內的易度云計算開發平臺也都選擇了Python語言。
這就是神奇的Python,在交錯的語言大戰中,Python卻成為一顆長青樹,不斷煥發新的光彩。
而Python也成為我最近8年的編程生涯的主體,或許這將是我作為程序員的歸屬,一直走下去。讓我們一起分享下這不一樣的Python。
簡單是硬道理
====================
php被很多嚴肅的開發人員詬病,太簡單、太臟了。然而php卻被企業所喜歡,連yahoo和facebook都選擇了php, php不斷在發展,生命力異常旺盛。
為什么?因為簡單。
程序語言,從機器語言到匯編,到高級語言,不就是簡單在驅動嗎?程序員也是人,需要更容易使用的語言。時髦點的話,就是語言也要多為咱程序員服務了,人機接口、用戶體驗要好。
因為簡單,所以開發效率高;因為簡單,所以容易閱讀和維護;因為簡單,所以不怕沒人接手;因為簡單,重構下也無妨;因為簡單,項目經理就不必寫偽代碼了,直接Coding出框架代碼吧.
簡單帶來的優勢,是成指數級別增長。簡單省了錢,加快的進度,減少的項目風險,首先老板會喜歡。簡單是硬道理。.net同樣是靠簡單占領了不小的市場份額。
python語言最早設計指導思想之一,就是想提高代碼的可讀性。Python語言采用縮進來標識代碼塊,而Java采用的是配對的大括號來標 識。不僅僅是排版更漂亮,Python的數據結構非常簡單和統一,Python自帶非常龐大的類庫,很多東西拿來即可。這樣,相同的邏輯,使用 python可能只需要java五分之一的代碼量。
很多軟件愛拿自己“數百萬行代碼”出來說事,表明自己很強大。而在Python的世界里,人們在炫耀相同的功能后,喜歡說我只有幾千行代碼(比如 Python上的對象數據庫系統ZODB就只有不到5千行代碼)。背后的意思是,放心用吧,有問題你也很容易維護這個系統;或者如果有時間,你自己也可以 接管這個代碼。
Pythonic之美
======================
php靠一個“簡單”占領了市場,php的哲學是quick and dirty;Python同樣簡單,但Python的哲學是Pythonic。Pythonic是什么?Pythonic是quick and not dirty,也就是quick and beautiful.
這個Pythonic之美,代表了程序員的素養和品味。什么是好的代碼?什么是漂亮的代碼?有一本書,叫做《unix編程藝術》,實際上一本對編 程審美進行洗腦的經典書籍。而Python語言的設計理念,正符合了這種編程審美。因此,Python深受高端開發人員的喜歡,Python和他們有相同 的文化。這如同,很多人將擁有Mac機作為自己審美品味的象征一樣。
讓我們再一次領略下Pythonic的禪意,它作為一個彩蛋隱藏在python的this模塊::
>>> import this
下面是我基于賴勇浩先生的首譯,稍作更改后的翻譯::
(讓我們來說說該如何寫代碼:)
優美勝于丑陋,
清晰明了勝于晦澀,
簡潔勝于復雜,
而復雜又勝于雜亂。
扁平勝于多層嵌套,
適當空行、錯落有致勝于擁擠不堪,
可讀性很重要。
雖然實用主義往往和上述規則矛盾,
但所有特例都不足以打破他們。
絕不要忽略異常(不寫 except:pass),
除非你進行精準地捕獲。
當你遇到含糊不清,不要嘗試猜測可能,
一定有一種,而且絕對是唯一的一種明顯的處理方法。
雖然你可能一開始很難找到這條路,除非你是 Python 之父。
現在就動手好過永遠不做,
雖然不做通常好于蠻干。
實現方法如果難以表述,那這思路就肯定不對;
反之如果容易表述,那可能是個好想法。
命名空間是一個值得叫好的想法,我們應當多加利用。
Python寶庫
===================
Python號稱自帶電池(Battery Included),也就是有強大的類庫。
Python內建的類庫就已經非常全面了。從web抓取,到xml解析,到嵌入式數據庫,到壓縮包的處理,到郵件協議,到json解析,而且不斷在增長。
如果你還覺得不夠,可到
http://pypi.python.org上 去找,這里有1萬多種第三方的類庫。從圖片處理、到加密算法,到excel文件解析生成,到pdf文件轉換,可謂應有盡有,無所不能。探訪這里的樂趣,就 如同海邊拾貝,如同山間采菌,那種驚喜,那種“大國大民”的優越感,讓你在心底涌現出投身Python的幸福,進而歸屬感倍增。
更重要的是,所有的這些寶貝,全部開源,而且大都是類 BSD協議的開源,您直接用于商業。有了這些,我會經常為自己選擇了Python而慶幸,這使得我們像易度這樣龐大的應用快速構建起來。
Python自帶強大的包管理機制,簡簡單單一個easy_install命令,您就可以在線安裝升級、卸載這些包。這類似debian/ubuntu的apt包管理機制一般方便。
全能選手
===============
可能是因為Python語言練就了動態語言的以柔克剛、借力打力的太極推手功夫,加上Python簡單導致的生產力指數級增長效應,Python應該是應用最全面的一種語言了。
從腳本、到web開發、到嵌入使用、到客戶端、到云計算,python都干得不錯。你只需要學會Python這一門語言,老板給你什么任務你幾乎都能完成。讓我們隨著時間的年輪滾進,看看Python應乎潮流的72變。
操作系統腳本
-----------------------------
幾乎所有的Linux發行版本和Mac都自帶了Python解釋環境,還有Nokia的S60手機平臺,可直接運行python腳本。簡潔的 Python語法,即便是不大懂開發的系統管理員或者企業IT人員,也可以快速掌握。事實上Ubuntu和Red Hat的安裝程序,以及 Gentoo的包管理系統也是用python開發的。
就我所知,Google的那些爬蟲,就大都采用python編寫完成。料想他們調整一次調整一次排名算法不會太麻煩吧。
最佳伴侶
-----------------------
很多軟件往往選擇會選擇將整個Python接上去內嵌到軟件中,作為一個操控軟件的腳本語言。
最典型的是各種3D動畫軟件,大都使用Python來做特效。比如Maya、Blender等;一些2D的圖像處理軟件,比如GIMP等也可Python來更靈活的處理圖片。
其他的,OpenOffice可以內嵌Python編寫宏;知名的地理信息系統ArcGIS采用Python作為腳本語言;一些游戲引擎,也通常 選擇Python作為游戲邏輯的編寫工具;還有一些有限元分析軟件和數據統計分析和挖掘的軟件,也采用Python作為使用接口。
客戶端程序
-------------------------
現在的桌面,已經不是Windows一統天下了,Linux和Mac的用戶在逐漸增多。誰都想自己寫的程序,能夠在多個平臺上運行。Python就是這為數不多的選擇之一。
國內limodou編寫的UliPad文本編輯器就是用Python編寫的;而最早的BT下載客戶端,也是采用Python。
Web 應用
--------------------------------
Web應用是Python大放光彩的領域。豆瓣網站很pythonic,網站風格完全符合python簡潔、漂亮、優美的審美。而豆瓣也是采用了python上的一個叫做quixote的web框架開發完成。更大的YouTue.com案例我就不多說了。
Python上的web輕量級框架,其實可能有數十種之多(這可能需要歸功于Python的生產效率)。最流行的是Django,其他的包括 TurboGears、Pylons、BFG等。隨著Python上的web服務網關接口(WSGI)的逐漸普及,各個web框架直接的公共部分 (WSGI中間件)也越來越多,有很多框架也產生相互合并的意圖。分久必合,我相信統一是web框架之間競爭的最后結果。
在今天webgame“肆虐”的風潮里,Python同樣高調登場。5分鐘版的開心農場就是采用Python開發的。Python是眾多webgame工作室的首選游戲邏輯語言。
企業應用
------------------------------
Python上的企業應用代表,著名的包括開源的ERP軟件OpenERP。OpenERP從后臺到客戶端,到web端,全部是采用Python開發完成。
另外一個就是Plone。Plone是一個世界級的開源內容管理軟件,被包括美國中情局在內的全世界眾多政府大機構、軍方和大企業使用。Plone基于Python上的一個重量級web應用框架Zope開發。
云時代的新生
---------------------------------
在如今云計算風生水起的時代,Python被谷歌云開發平臺Goolge App Engine奉為首選的云計算語言。而國內的易度云辦公平臺,從內部實現到第三方的PaaS開發,都采用了Python語言。當前在云存儲方面的新星 DropBox,更是從后臺到客戶端,全面采用了Python語言。
如果云代表了軟件業未來之一,那Python這一次真正開始走在最前面。
說說缺點
-------------------------
沒有哪個人是完美的,Python也一樣。
Python的一個大問題是,對多處理器支持不好。也就是一個Python進程,目前只能在一個處理器上運行。這對于日益普及的多處理器架構,不 能說是一個缺憾。當然對于web應用,采用多進程負載均衡便能解決這一問題。目前Python也正在提供一個支持多處理器的版本,但是還沒有達到穩定的版 本,相應不久的未來這個問題可以得到解決。
另外一個問題是解釋型語言的通病,就是性能問題。這個問題,Python社區有個pypy項目,將Python的解釋型執行,轉換為編譯執行,大 大提升效率。只是這個pypy還沒有到正式版本。谷歌內部也啟動了一個項目,號稱目標是將Python的執行效率提升5倍,讓我們拭目以待。
尾聲
================
我們是職業程序手,我們需要經久耐用、多快好省、功力強大的語言。我選擇了Python,你呢?
原文:
http://www.douban.com/group/topic/13347288/