Tag Archives: python

Programmer’s Python: Everything is an Object – Mike James

因工作上的需要,去年我才開始學習Python,寫了Python程式接近一年,寫起來漸漸得手應手。Python不愧為近年冒起得最快的語言,它集傳統OOP語言如C++和快速interpret語言如Perl兩家之大成,syntax簡潔易用,dynamic typing和duck typing寫起來更輕鬆自由,若果對typing不放心還可以optional type check。我久不久要回去寫C++,寫開Python忽然要寫上一代language,很不習慣,然後就咒罵為什麼C++沒有那些好用的功能,當然鬧了兩句後,就會記得C++比Python運行速度快很多倍,static type是有其存在的原因。

學習一個程式語言,除了學習syntax學習使用不同library外,若果要學得深入學的精專,就要明白程式語言的運作原理。C++只要有C的基礎,而C只要有Assembly的基礎,只要弄懂pointer其他就很易明。Python也是一樣,只要明白它任何東西也是object的核心,它的variable和funciton scope是如何resolve,其他所有「進階」syntax只是飾裝的外衣。

市面上有很多Python課本,亦有不少online tutorial,絕大部份都是教你應用Python去寫code,沒有真正講解Python的內部結構。Python official document有提及,我由頭到尾叫做看過一篇,不過寫得太枯燥無味,內容零碎沒有系統,不適合一般人閱讀。這本《Programmer’s Python: Everything is an Object》是進階讀物,並不適合初學者,甚至不會你寫Python,而是從程式語言設計的層面,去解釋Python內裏的運作原理,換一句話說就是解釋那些double underscore builtin attributes有什麼作用。

這本書是I Programmer網頁的作者出版,這個網頁是我follow開講computer science專業級知識的網頁。網站上有這本書的試看版,差不多也有半本書的內容,因為實在寫得太好,所以一定要賣回來看全本的內容。這本書非常冷門,不要說一般書店或網上書店沒有得賣,連加拿大Amazon也沒有入貨,更不要說網上沒有盜版pdf,我要特地去美國Amazon訂購回來。

這本書有沒有實際用處?很難講。日常寫Python程式,其實不需要理會它如何運作。看完這本書後,讓我懂得欣賞Python設計的巧妙。若果對程式語言設計有興趣,這本書亦講述很多程式語言設計理論,對日後學習其他語言會很有幫助。

Head First Python

說到要學電腦程式語言,Python相信是近年最炙手可熱的語言了,一來Syntax易學易用,二來library支援眾多,更是近期最熱門人工智能的主要語言,我最近因工作需要也要學Python。以前我讀大學時程式入門課教C,然後過幾了年進化為教Java,不過最近陸續轉為教Python了。公司新請回來的大學生個個都懂Python,吾等老海鮮也要與時並進才不會被淘汰。

原本公司內部個兩不同部門使用不同語言,chip testing和apps那邊以前用tcl,貪tcl不用compile方便操作,我們software testing那邊則以C++為主,因為需要OOP和static type來架構軟件測試系統。兩個部門有很多基礎的應用程式功能重壘,不過因為使用不同語言,同一個功能需要寫兩次。高層認為一code兩寫很沒有效率,下令我們統一使用同一語言,在雙方列出對語言的要求後,Python成為很自然的選擇。Python是interpreter language不用compile,同時又支援OOP和type checking,一次過滿足我們兩個部門的願望。

學習新程式語言,很多人喜歡讀網上課程,不過我比較傳統喜歡看書,我嫌網上課程看影片太嘥時間,看書容易明的部份可以速讀,難明的部份可以花多此時間重看幾遍。學習寫程式最重要是落手落腳寫code,跟課本的練習做同做網上課程的功課分別不大,反正程式寫得好就work有bug就唔work,沒有需要改功課對答案的問題。在芸芸眾多本Python書中,我挑選了這本《Head First Python》,看電腦書不是大大本很厚多字就好,最重要是把應用慨念解釋清楚,有時一張圖或一個例子可以抵得上三版紙枯燥的文字。這本書開宗明義不是教寫程式,而是寫給已懂其他語言的人學習Python語法。這本書最優勝之處的單元的編排,整本書就是寫一個有趣的小小網上應用程式,每章都教一些新東西為程式加上新功能,看書就好似一路做project咁不會悶。最怕有些程式書只是把語法由頭到尾列出來,再口水多過茶地加鹽加醋地長篇大論講解。

最初看Python很不習慣那個indent style,寫了咁多年程式都係用curly bracket, 唯有Python別樹一格強迫indent,不過寫幾個星期習慣了就不再覺得礙眼。同C++或Java比,Python同Ruby算是第四代的程式語言,去年學過Ruby所以Python很快上手,兩者的設計理念不同,不過最核心的本質其實一樣,明白了個背後用C寫的Ruby/Python個interpreter,睇埋個interpreter入面的internal data-structure,咁成個語言就一理通百理明。Ruby就乜都係object,Python雖然有人都係咁講,但我認為Python的真蒂其實乜都係callable,連class declaration都係一個function。明白了這一點後,Python所有新feature concept,如generator,declaration,context manager,future, asyncio等等就能清楚理解明白。

睇完本書跟住它做完個project仔,再上Python官網看一次官方tutorial,把standard library的所有API係咁意睇一次,大慨知道有乜function乜library可以用,遇到問題就問stack overflow大神求救,還有功能強大的PyCharm相助,其實Python很容易上手。越寫越覺得Python好使好用,大有相逢恨夜的感覺。現在學了用了Python兩個多月,自問至少追上公司新仔的水平,review佢地寫的code也不會失禮問白痴問題。