全站文章 iT邦幫忙
iThome Online提供免費電子報,現在就訂,最新IT訊息每日寄達。

iThome 每日新聞報
iThome 產品技術報
加入iThome Online會員,立即使用討論區、Blog等服務。

免費加入會員
登入 / 登出
管理會員帳號
忘記帳號密碼
聯絡客服
訂閱周刊
讀者服務
13' E政府專刊no.7(48)
13' iTcloud No.3(47)
12' E政府專刊no.6(46)
12' 個資法專刊No2(45)
12' iTcloud No.2(44)
12' e政府專刊No.5(43)
12' 個資法專刊(42)
11' CIO專刊(41)
11' e教育專刊No.3 (40)
11' e政府專刊No.4 (39)
11'iTcloud專刊(38)
10' e教育專刊No.2 (37)
10'e政府專刊No.3 (36)
09'e政府專刊No.2 (35)
09'e教育專刊(34)
09'e政府專刊(33)
08'企業資安專刊-端點安全防護(32)
08'企業採購情報誌(31)
07'資訊安全技術應用專刊(30)
07' 新世代資料中心專刊(29)
07'企業資安技術應用專刊(28)
企業採購情報誌'06冬季號(27)
程式人產能之謎
文/林信良 2014-02-07
分享到facebook
留意正負產能差異原因,而不是指標結果,例如不適任者的虛耗與難以專注工作的環境

林信良
因在網路上經營「良葛格學習筆記」(openhome.cc)而聞名,曾任昇陽教育訓練中心技術顧問、甲骨文教育訓練中心授權講師,目前為自由工作者,從事講師、技術書籍寫作與翻譯,專長為Java 程式開發相關技術教育訓練,研究興趣包括:程式語言、Web 相關開放原始碼框架。閒暇之餘記錄所學,技術文件涵蓋 C/C++、Java、Ruby/Rails、Python、JavaScript 等領域。

在程式人的產能差異上,你可能聽過不少的傳說,像是「程式人間有5:1或10:1產能差距並不是種曲解」、「90%程式碼是由10%程式人撰寫」、「優秀軟體開發者價值遠勝平庸開發者10,000倍」等,產能差異在哪?單純關注個別程式人的正向產能,是對的嗎?

產能評量的迷思
Joel Spolsky、Robert C. Martin、Bill Gates分別對產能差異提出了以上的想法,Steve McConnell在〈10x Software Development〉中亦提到「許多研究發現,產能與品質在個體甚至團隊間會有10:1的差異」,總之,任何10次方的產能差距你可能都有聽過,作為管理者,大多會關心如何評量開發者產能,期待促進專案整體的生產力。

只是要量測程式人的產能相當困難,程式設計是個知識工作,先不論其本身有許多難以量化元素,如果為了評量開發者產能,訂出了許多量化指標,就會出現許多收集點數的荒謬行為。那麼,這些10次方產能差距的結論到底從何而來?Joel Spolsky是研究學生用相同技術做相同作業花費的時間,以及取得的作業分數,Steve McConnell研究中談到的是創建、除錯一個程式需要的時間,以及程式的大小、速度、找到的錯誤等。

從收集而來的資料看來,產能差距似乎指向時間與品質,因而有人試圖從中建立指標,期待於每年、每季甚至每月,提前並切割地評量程式人的產能表現,然而實務上不會讓兩個開發者做相同的任務,Tom Cargill也說過:「前90%程式碼耗掉了90%開發時間,剩下的10%需要另外90%的開發時間」,這說明了提前與切割地進行產能評量也是個問題。

從管理角度來看,不可否認地需要某些指標來評量開發者好壞,其實當我們覺得某開發者極具生產力時,實際上,心中確實為他建立了一些指標,也許是類似功能另一開發者花了一整月開發而他只花一星期,某問題另一開發者花了一星期無法除錯,而他接手僅花一天就順心解決……那麼,原因呢?與其就結果來論斷他是否有生產力,不如進一步探究為何他擁有這樣的生產力。

程式人的三種美德
在《Programming Perl》中,Larry Wall鼓勵程式人應培養三種美德:「懶惰(Laziness)、沒耐性(Impatience)與驕傲(Hubris)」。懶惰就會讓程式人努力減少整體工作量,寫一些能節省人力的程式,並寫下這個程式的文件,免得要親自回答許多問題;沒耐性的程式人無法忍受電腦怠惰,寫的程式就會儘可能讓它閒不下來,而不是停下來等待你的需求,驕傲的程式人會寫下旁人無可挑剔,而本身極度自豪的程式。

這三種美德看來就對應了先前談到程式人產能差距指向的時間與品質,探討程式人生產力祕訣的《The Productive Programmer》書籍前言中,也談到即使沒有直接提到這三個名詞,然而這三種美德將會在該書中擴展開來。

程式人的三種美德可以拆開來看,也可以合併來看。想要減少整體工作量有個簡單方式,就是不做重複的工作,電腦絕對比你擅長重複工作,只要告訴它怎麼做,如果發現常常用滑鼠在電腦上重複地走來走去,那就想辦法用工具或寫程式把這個過程「錄」下來,如果發現經常要輸入相同的指令,那就想辦法用工具或寫程式讓這個過程自動化,如果發現類似專案間有些個別差異而增加了溝通麻煩,那就讓它們標準化,實際上會發現,不少現成工具就是這麼創造出來的,是否能瞭解、善用甚至創造出這類工具,就決定了優秀與平庸程式人間的產能差距。

重複的程式碼也是一種重複的工作,無論形成重複的原因是否來自程式碼的剪貼,重複會造成程式碼後續維護時整體工作量的增加,將明顯或三次以上的程式碼重複加以適當重構,透過適當設計讓程式有彈性,就構成了程式人第三種美德。實際上,許多文件、書籍在教導或傳承的就是這三種美德,作為一個進取的程式人,多半會關心如何彌補自身與優秀開發者的這段差距,以提升自我程度為自豪。


1 / 2 下一頁

分享到facebook

2014資安趨勢研討會
更多研討會
▼ ADVERTISEMENT ▼
▲ ADVERTISEMENT ▲

電週文化事業版權所有、轉載必究 •Copyright © iThome | 刊登廣告授權服務服務信箱隱私權聲明與會員使用條款關於iThome