跳到主要內容

讀書心得: 程式設計師提昇生產力秘笈


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

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

啟動板

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

這個過程一般人已經習以為常,不以為怪;而啟動版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上操作電腦的方法跟工具很有效,但現今已逐漸失傳,於是作者打算撥亂反正,把這些訣竅重新挖出來分享給大家,而且試圖證明這些訣竅在Win、Mac上一樣可以實現。

後半段則是一系列思考軟體開發的散文集。我很喜歡其中的一篇,用一個漂亮的例子說明TDD不只消極的防止bug,還能積極的影響軟體本身的設計。應用TDD的程式最後會切割成許多很小、不可分割的運算,正好呼應Code Complete裡的優良函數的特性「內聚力強」、「耦合力弱」。有機會我再把後半段也吸收消化成另一篇讀書心得。

這裡有兩篇我認為跟本書呼應的文章,相當值得一看:
Vgod追求神乎其技的程式設計(十): 程式員生產力之謎
軟體開發之建置風險的故事

留言

這個網誌中的熱門文章

讀書心得: 你以為你以為的就是你以為的嗎?

當初想要接觸哲學的時候,挑上的第一本書就是「你以為你以為就是你以為的嗎?」,因為書名太好玩了。讀完後發現內容也一樣好玩,整本書的形式有點像坊間流行的心理測驗小書,每章的開頭都要讀者先做一組題目,後面接著就對你的答案做一番分析。 我自己的讀後感是,恩,這些題目對一個以前從未接觸過哲學的人來說太過犀利,第一次作答的時候,每翻過一頁都好像在呼自己巴掌,臉頰很燙。 「你以為你以為就是你以為的嗎?」書名念起來很拗口,但是很貼切,因為這些題目為的是要檢查我們腦袋內的想法是否一致,在邏輯上有沒有BUG。 我舉個例子,書裡有道題目「只要不傷害他人,任何人都有權自由追求自己的目標」要讀者回答同不同意,我認為這句話聽起來相當合理,所以勾了同意。過了幾題後,出現另一道題目是「為個人吸食而持有毒品的行為應予除罪化」,這次我的直覺是毒品這麼危險,怎麼可以除罪化呢,馬上勾不同意。 但是,我沒有發現這是刻意安排的陷阱,因為這兩句話其實講的是同一回事。 單純個人持有毒品,不散佈也不販賣,就不算傷害他人,那他就應該有自由追求自己的「吸食毒品」目標的權利,畢竟他只有傷害自己呀。這敘述聽起來有點危險,不過我必須承認一開始的確想的不夠清楚,我以為第一句話是真理,但馬上被反例打了自己的臉。 再舉一個例子,首先是「對藝術品的評斷,純粹是個人品味的問題」,接著是「米開朗基羅是史上數一數二的偉大藝術家」,這牽涉到評斷藝術的標準,不過你只能認同兩句話的其中之一。 書中我最有興趣的是「神明DIY工作室」與「信仰殺戮戰場」,這兩章擺明了直衝基督徒而來。當中有些問題圍繞著以下的敘述,如果你同意「神是全知、全能、又全然慈愛」,那該怎麼解釋世界上發生的許多苦難呢? 比如說被南亞海嘯淹沒的小女孩? 如果神沒辦法消除這些苦難,祂就不是全能。如果神沒辦法事先知道創造出來的世界會有這些苦難,祂就不是全知。如果神明知道有苦難,也有能力去掉,但是卻故意不做,那祂就不是全然慈愛。 我思考後的結論是,全然慈愛的神並不等於神希望世上的苦難越少越好,這些苦難都是在祂的允許下發生的。 書裡指出了一個基督徒的通病,被問倒了之後就嚷嚷「你不知道神是超越人所理解的嗎 」,但回頭又馬上賦予神非常明確地人的屬性。後來我也理解到這些尖銳的問題並不是故意要為難我對神的看法,而是逼迫我去反思一些比較深層的宗教議題,就像我...

UVa 10125 Sumsets

解題策略 這題的解法很直接,要找d=a+b+c 用四層迴圈下去跑a,b,c,d就好了 XDDDD 我犯了幾個錯誤 要找最大符合d (意思是數列中可能出現好幾個符合要求的解),所以迴圈應該由最大元素往下找,第一個找到的解就是答案,我一開始由最小元素往上遞增尋找,拿了WA。 沒找到解就回傳0,殊不知0也有可能是解: 0 = -5 + 3 + 2,這裡也吃了一個WA,所以我後來改回傳 INT_MAX 作為無解。 這題有負值,所以 -5 = -10 + -2 + 7 ,這樣算一組合法的解。 是比較需要小心的地方。 官網論壇上的(a+b)=(d-c)法,方法複雜很多,卻沒有比較快。