讀書: 程式設計師提昇生產力秘笈 (上)

原文書名:Productive Programmer
(對岸譯『卓有成效的程序員』,我比較喜歡這個名字,更精鍊。)

「程式設計師提升生產力秘笈」這本書非常有趣,它不打算教一套新的程式心法或者尖端技術,這本書想說的是「扭轉你從小到大操作電腦的習慣」。有點莫名其妙,不過讀過之後,我發現自己過去的不良習慣,甚至一般人習以為常的電腦操作習慣,的確相當浪費時間。

啟動板

啟動板「Launchy」是我後打開書後安裝的第一個小工具軟體,而且五分鐘後我就愛上它了!平常我們想要啟動一隻程式,例如打開 Word,你會怎麼做呢?當然是先把滑鼠移到螢幕左下角點「開始功能表」、展開「程式集」、選擇「Office」目錄、最後用滑鼠點一下 Word 圖示。

這個過程一般人已經習以為常,不以為怪;而啟動版 Launchy 讓你直接這樣幹:按下 Alt+Space 叫出啟動板,敲W-O-R-D四個鍵就行了。(甚至只要敲W,啟動版就替你挑出最常用的程式),傳統的方法相較之下簡直是繁文縟節。

這例子很小,但是隱約帶出了幾個本書強調的原則:

第一、用搜尋取代瀏覽。

隨著電腦用的時間越久,應用程式清單就會越來越長,目錄裡的檔案會越來越多,而長度正好和其用處成反比,清單越長,效率就越低。啟動版可以幫助你跳過這段用眼睛上下找尋瀏覽的時間,保證啟動程式的動作永遠是O(1)。

第二、啟動版可以隔離那些會讓人不小心分心的事物。

從你想要啟動某個程式,到程式真的運行起來之間,不會有瞥見一眼就丟掉十幾分鐘的東西,例如 RSS Reader,或者是某個你之前就很有興趣但是一直沒時間看的漂亮網頁。

第三、手不需要離開鍵盤。

程序員大多時間都把手放在鍵盤上,滑鼠雖然直覺,但是操作速度上一定沒有鍵盤快,而且手臂在鍵盤與滑鼠之間一直移動也是很令人討厭的事情。

上面提到的這幾項都是書中不斷重複出現的中心思想,用搜尋取代瀏覽,排除讓你分心的事物,鍵盤永遠比滑鼠好,以及最重要的,不要不停的重複做同一件事。

附帶一提,我的桌面現在非常乾淨,只有一個資源回收桶跟幾個常用檔案,那些花花綠綠的圖示跟捷徑都被我封存進一個資料夾,再也沒有點過。

漂亮的GUI是效率的障礙

「重複做同樣的事」是軟體開發裡面最嚴重的效率傷害,通常稱作 D.R.Y (Don’t Repeat Yourself) 原則。

但其實不光是程式碼複製貼上存在 DRY 原則而已,操作電腦的習慣也有 DRY 。例如重複來回地在兩個視窗之間複製貼上,手動修改一份文件裡的幾十個同樣的格式錯誤,或者在許多目錄之間來回的瀏覽翻找一個檔案都是。

重複動作有雙重傷害:浪費時間,而且會傷害專注力。節錄書裡的幾段話:

『對使用者有生產力的事情(漂亮的 GUI、滑鼠、下拉式選單等等)實際上可能是某人試著讓電腦發揮最大效能的障礙。』

『最近幾十年來最大的諷刺之一就是,高手執行日常任務的速度變慢了。往昔 Unix 的傢伙都比較有效率,因為他們把一切都自動化了。』

我看了很震撼,對於 GUI 的效率傷害深有所感。

回想起之前我剛開始用 CodeIgniter Framework 寫網站的時候,因為一個網頁程式被切成 M-V-C 三隻檔案,所以我必須一直用滑鼠去點分頁切換檔案,手不斷地在滑鼠跟鍵盤之間移動,這樣重複的操作把我弄得很痛苦,但是我卻從來沒有想過是 GUI 的問題,不知道從何改善。現在想想,我只要學一下切換分頁的快速鍵,或者「跳到某某檔案」的快速鍵,就可以節省大量精力。

現在我開始轉變自己的心態,放開心胸去學習那些以前看起來不太友善的東西。

比方說,書裡說道『IDE 有大量鍵盤捷徑,全都學!』我把 eclipse 快捷鍵全部翻出來作成一份清單放在案前。以前我寫 PHPUnit,一個檔案裡總會出現幾十次 $this->assertEquals($v1, $v2); ,現在我把它編成 Code Template,我現在只要打 aeq+Tab 就會自動展開句子。還有比方說看起來很難懂的 vim (號稱不需要滑鼠的文字編輯器)、Regular Expression,還有命令列工具。

我的觀念從原本的基本會用就好,轉為積極的去探究 IDE 的極限。程序員應該是使用工具的終極高手。只要一件工具能讓你效率倍增,就值得多花時間學習掌握。

電腦是重複工作的能手

我想我被本書影響最大的一點就是對 D.R.Y 原則的敏感程度,由一般人的程度拉高到靈敏有如狗鼻子,每當察覺自己做了同一件事兩三次後,就思考如何讓電腦代勞。書中到處可見一支支用 Script Language (Ruby/Python/Perl) 隨手捏成的小程式,作者甚至連每天要固定開啟數個 Excel 檔案都寫成 Ruby 程式。

雖然第一次會多花一些時間來撰寫 Script,但是作者的論點很簡單『想出聰明的方法讓任務自動化,可讓你變精明,因為一路上你得學點什麼。』而這個加速的過程是正向循環,越熟悉工具,就能把更多任務自動化,然後你的效能就會進一步提高。人手熟練有先天的肌肉跟反應的速度極限,而電腦的自動化速度幾乎沒有極限。所以讓電腦來代勞重複的工作吧,電腦可以一眨眼就掃過數千個文件,不要再勤勤懇懇的,像做家事或洗碗碟一般的操作電腦了。

這本書的前半段就是一個收集很多技巧的大錦囊,總共有四大原則幾十條內容。總結來說吧,作者認為 Unix 上曾經有一套非常高效的方法跟工具來操作電腦。但這套方法現今已逐漸失傳,於是作者打算撥亂反正,把這些訣竅重新挖出來分享給大家,而且試圖證明這些訣竅在 Windows、Mac 上一樣有效。

本書後半段是一系列思考軟體開發的散文集。有機會我再把後半段也吸收消化成另一篇讀書心得。

最後留下兩篇我認為跟本書呼應的文章,相當值得一看: