程式設計師提升生產力秘笈
by Neal Ford
(*)(*)(*)(*)(*)(46)

All Reviews

6 + 1 in other languages
MattMatt wrote a review
04
(*)(*)(*)(*)( )
網誌好讀版
chchwy.blogspot.com/2011/01/blog-post.html

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

啟動板

啟動板「Launchy」是我打開書後第一個安裝的小工具軟體,而且用了五分鐘後我就愛上它了!平常我們想要啟動一隻程式,例如打開 Word,會怎麼做呢?當然是先把滑鼠移到螢幕左下角點擊「開始功能表」、展開「程式集」、選擇「Office」目錄、最後用滑鼠敲一下程式的捷徑。這個過程一般人已經習以為常,不以為怪;而啟動版Launchy讓你直接這樣幹:按下Alt+Space叫出啟動板,然後敲W-O-R-D四個鍵就行了。(甚至只要敲W,啟動版就替你挑出最常用的程式),比較之下,傳統的方法簡直像繁文縟節一樣。

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

第一、用搜尋取代瀏覽。隨著使用電腦的時間越久,應用程式的清單就會越來越長,而長度正好和其用處成反比,清單越長,效率就越低。啟動版可以幫助你跳過這段用眼睛上下找尋瀏覽的時間,保證啟動程式的動作永遠是O(1)。第二、啟動版可以隔離那些會讓人不小心分心的事物。從你想要跑某個程式,到程式真的運行起來之間,不會看見任何其瞥見一眼就丟掉十幾分鐘的東西,例如 RSS Reader,或者是某個漂亮網頁。第三、手不需要離開鍵盤。把手臂從鍵盤移到滑鼠上是很慢的一件事情。特別是程序員絕大多數時間都會把手放在鍵盤上,滑鼠雖然直覺,但是速度永遠比不上鍵盤。附帶一點好處,我現在的桌面非常乾淨,因為那些花花綠綠的圖示跟捷徑都不再需要了,呵呵。

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

漂亮的GUI是效率的障礙

「重複做同樣的事」是軟體開發裡面最嚴重的傷效率害,通常我們把他稱作 D.R.Y (Don't Repeat Yourself ) 原則,這不光只是程式碼複製貼上而已,操作電腦的習慣也有DRY,例如重複來回地在兩個視窗之間複製貼上,手動修改一份文件裡的幾十個同樣的格式錯誤,或者在許多目錄之間來回的瀏覽翻找一個檔案。重複動作有雙重傷害:浪費時間,而且會傷害專注力。書裡有幾段話節錄:

『對使用者有生產力的事情(漂亮的GUI、滑鼠、下拉式選單等等)實際上可能是某人試著讓電腦發揮最大效能的障礙。』
『最近幾十年來最大的諷刺之一就是,高手執行日常任務的速度變慢了。往昔Unix的傢伙都比較有效率,因為他們把一切都自動化了。』

我看了很震撼,回想起之前我剛開始用 CodeIgniter Framework 寫網站的時候,因為一個網頁程式被切成M-V-C三隻檔案,所以我往往必須一直用滑鼠去點分頁,手不斷地在滑鼠跟鍵盤之間移動,這些重複的操作把我弄得很痛苦,但是卻不知道要怎麼辦。

現在我開始轉變自己的心態,放開心胸去學習那些以前看起來不太友善的東西。比方說,書裡說道『IDE有大量鍵盤捷徑,全都學!』我就把eclipse快捷鍵全部翻出來作成一份清單放在案前。以前我寫PHPUnit,一個檔案裡總會出現幾十次$this->assertEquals($v1, $v2);,現在我把它編成 Code Template,我現在只要打 aeq+Tab 就會自動展開句子。比方說看起來就很難懂的 vim 和 Regular Expression。我的觀念從原本的基本會用就好,轉為積極的去探究IDE的極限。程序員應該是使用工具的終極高手。只要一件工具能讓你效率倍增,就值得多花時間學習掌握。

電腦是重複工作的能手

我想我被本書影響最大的一點就是對 D.R.Y 原則的敏感程度,由普通人的程度被拉高到靈敏有如狗鼻子,每當察覺自己做了同一件事多次,就思考如何讓電腦代勞。書中到處可見一支支用Script Language (Ruby/Python/PHP) 寫成,隨手捏成的小程式,作者甚至連每天要開啟固定數個 Excel 檔案都寫成ruby程式。而他的論點很簡單『想出聰明的方法讓任務自動化,可讓你變精明,因為一路上你得學點什麼。』這個加速過程是正向循環,越熟悉工具,就能把更多任務自動化,人手熟練到某個程度就很難更快,而電腦的自動化幾乎沒有極限。

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

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


*筆記*

Launchy
Colibri
Enso

[OSX]
Quicksilver


簡單的優雅

pragmactic-osxer.blogspot.com

[Terminal]
open myfile

Clipboard
[Win] CLCL
[OSX] JumpCat / jclip

[Unix]
!
history
! + number

[W]
(type type ..) F8

[W]
pushd
popd

[W] Command Prompt Explorer Bar (Ctrl+M)

[W] Command prompt here