2011/05/22

一致性

在很久很久以前,看完一本書,通常是指某程式語言的書,就可動手開發軟體了,現在可不同了(早就不同了),就算你能在24小時內學會某語言,你還要學會成堆成山的函式庫與類別庫,許許多多約定俗成的慣用法與程式片段,多少的青春歲月就花在這些層層疊疊的架構中,多少的辛酸血淚就灑在這些有臭蟲又不更新、不想用又不得不用的醜陋框架(framework)裡,唉,怎一聲長嘆了得。

寫程式時,需要一種天份,能夠在短時間內記住很多小細節的天份,變數名稱、函式名稱、回傳值、上下繼承關係、這段程式碼應該要寫在哪裡才好、等等,久了之後,自然而然熟極而流,越寫越順,當你能夠控制環境,這裡指的是掌握開發軟體時的環境,就會感到快樂,對每一行都確實知道在幹嘛,不用寫一寫就要停下來查文件,能夠處於那種優遊自在的狀態,真是美妙地不可言喻啊,所以,如果很不幸地要你換一種語言、換一套開發環境,那將會是極端苦痛、痛不可言、言語無法形容地不幸啊,光程式語言本身就會有很多的差異,有大有小,大的也就算了,畢竟是不同的語言,如果沒有一定程度以上的差別,那幹嘛存在多一種的語言了,至於小的,就很惱人了,有些一樣、有些差不多一樣、有些不太一樣、有些不一樣又有相似處,煩死啦。

請看一下底下這兩張圖,這一張是Perl的布林比較,當我在Perl書裡讀到其比較的判斷法則時,心理只有一種想法,瘋啦瘋啦,誰能記住這玩意兒啊?這什麼規則啊?(當然,我記不住不代表別人記不住。)


這一張是JavaScript的,好像好一點,但也處處是陷阱,一不小心程式的結果就會跟你想的不一樣。


顯然地,各程式語言的創作者對於這麼一個小小地方都能夠有眾多分歧的意見,什麼是true、什麼是false,nil又能代表什麼,nil能代表空串列嗎、nil等同於false嗎,等等等等。


當某語言有太多細微細節要花心思記得的話,用起來就很礙手礙腳,我認為Perl就是其中之一,Perl還標榜著"There's more than one way to do it",聽起來是不錯,不過怎麼能記住這種種不同的用法呢?通常是選出一兩種好的,然後一直用吧。C++比較好一點但也差不多,當開始使用C++各種較進階的功能時,例如exception或template或operator overloading,哇賽,各種眉眉角角就出現了,要記住的地方就變多了。


很佩服那些跨平台的框架或軟體,光要搞定windows、mac、linux就快死人了,其中的差異可不是隨便就能講完列出來的,若是說到手持式裝置上,那就更加分歧了,再加上封閉、保護公司資產、追求與眾不同市場區隔、刻意與別人不一樣,嘿,真是混亂的世界啊。


在這裡有個小小的希望,至少、至少在語言層級,能夠有一致性,不是每個人都能像翻譯機精通八國語言聽說讀寫樣樣行,我知道,語言設計者是大師們,他們有思想有文化有所堅持,但是還是請你們至少把布林比較這麼基本的地方設計出一致性吧。


如果你對程式語言的歷史以及各種語言特性有興趣的話,看看這段影片吧。這根本是大師級的火力展示,裡面一堆聽都沒聽過的語言,例如KRL、COMIT、等等。

No comments:

Post a Comment