l

2009年11月25日 星期三

Retrospective Meeting = 許願池

11/25 22:24~23:55

許願池,常見於各大廟宇以及名勝古蹟之中。不管願望能否實現,丟個銅板,就可以擁有「有夢最美,希望相隨」的片刻。對於出門在外手頭不方便的鄉民而言,順手撈幾個銅板就可以換一個國民便當或是買一張回家的車票,省去攔路要錢的尷尬。Producers 和 Consumers 各取所需,王不見王。從軟體架構的角度來看,此種 decoupling 的特色,相當具有擴充性。

許願池的種種優點,做軟體的朋友們當然也發現了。別說 Teddy 騙廣大的鄉民們,就在 Scrum 中,每個 sprint (iteration,一個固定長度的開發週期,通常介於 2 - 4 週之間) 結束時都要進行的活動 -- retrospective meeting -- 就是開發團隊的許願池啦。

Retrospective meeting 照字面解釋,就是「回顧會議」,這是 Scrum 設計用來改善開發流程的一道關卡,每一個 sprint 結束之前都要過這一關。在這個會議當中,開發團隊討論在這個 sprint 當中,哪些事情作的很好,要繼續維持。哪些作的不好,應該改善,並挑出幾個比較重要的改善項目列出改善的行動方針。以下是幾個例子:

好的部分:
  • 導入 Scrum
  • 有一個公開的 product backlog
  • 有訂定產品的 release plan
  • 有持續整合的環境
  • 有自動化功能測試案例與測試環境
有待改善: 
  • 電腦效能不佳 (都是 Vista 的陰謀啦)
  • 沒有寫 unit test
  • 沒有 pair programming
  • Tasks 完成條件定義不清
  • ezScrum 太慢 (這是真的有人提出... 嗚嗚...)
改善行動方針:
  • 長期目標:增進工作環境效率
    • Action Plan: 增加記憶體到 4G
    • Action Plan: 安裝 Vista SP2 (或是 窮得只能超頻?)
  • 長期目標: 所有 methods 至少都有三個對應的 unit tests
    • Action Plan: 安排1個小時的 workshop 教導 JUnit 使用方法
    • Action Plan: 下個 sprint 每個人至少寫 3 個 test cases
  • 長期目標:50% 的開發工作都以 pair programming 方式進行
    •  Action Plan: 因為目前工作環境並不適合 pair programming,因此先改善工作環境。首先向公司申請 22" 螢幕、無線鍵盤、滑鼠。

由於開發流程改善是一條很漫長的路,有多長,這 麼 長... 長到你看不到底。所以,很多改善項目需要長時間的關注。例如,光是做測試這件事,就足夠玩個一年半載以上,才能小有成果。所以,為每一個改善項目訂定長期摽,然後列出本次的 action plan (行動計畫,就是下個 sprint 準備採取的改善措施)。這樣,週而復始,無限迴圈卯起來改善流程,便可達到:「人人有事做,月月有錢領」的最高境界 (一直到 stack overflow 為止)。

*****************************************************************************************

眼尖的鄉民看到這裡應該會問:這和許願池有什麼關係。是滴,以往沒有 retrospective meeting,開發團隊可能老早就發現很多問題,但是苦無 call in 管道可以暢所欲言,以至於長期悶在心中,很容易得內傷,影響工作效率。久而久之甚至導致團隊成員移民到其他公司。有了 retrospective meeting 之後,給了各位頭家一個「嗆聲」的機會和管道。就像許願池一樣,錢丟下去,願望會不會實現是另一回事,至少聽到噗通一聲當場爽一下也好,可以減少得內傷的機率。

Teddy 在 retrospective meeting 中看過一些比較有趣的願望包含:
  • 冷氣太冷,快得 H1N1 感冒,影響工作效率。
  • 要去參觀資訊展,看 show girls 了解一下競爭對手的產品。
  • 政躬康泰 ,皇上吉祥
  • 股市上萬點
  • 長命百歲
  • 世界和平
  • !#%!@#~
總之,每個 sprint 花一、兩個小時來了解民間疾苦、收攏人心、開開競選芭樂票、罵罵老佛爺,比起傳統無聊到爆、火氣很大、忙著找代罪羔羊的大鍋炒會議,這種 C/P 值超高的活動,還不趕快去弄一個來玩。

搞笑談軟工之前世今生

11/25 01:49~03:00

當年為了學人家趕流行,不是帥哥更不可能是正妹的 Teddy,在 2007 年六月時開了這個部落格。當時心想,身為一個資工博士ㄕㄣ,至少也看了幾百篇的軟體相關 papers,應該有很多「料」可以寫。如今回頭憶當年,2007~2008 年 Teddy 只寫了 10 篇,平均 55 天才寫一篇。為什麼產量這麼少?以下是「史蒂芬周」的分析:

看看 Teddy 的第一篇部落格文章 Pattern Languages and Patterns,居然還有參考資料,把部落格搞的好像在寫論文一樣 (好吧,Teddy 承認,裡面的內容的確是從之前發表過的論文中抄下來滴)。沒創意又太無聊了,失敗。

在第三篇文章 例外處裡 (1) 中,Teddy 奮發圖強了一下下,終於寫了一篇新的文章。不過寫論文養成的壞習慣還是沒改,文章裡面還是有「參考資料」。搞笑只搞了半套,失敗。

 *************************************************************************************

 2008 年的文章,已經少有參考資料,這是一種慢慢從書呆子變成正常人類的好現象。可是,這個部落格的內容到底要寫些什麼,用什麼風格寫,Teddy 還是沒有掌握的很好。

時至 2009 年,在 Kay 的推薦之下,Teddy 有幸看了三本奇書 (學校圖書館有喔),終於開竅了。這三本大作分別是:
前兩本書的作者是廣告人,第三本書的作者是電視人。姑且不管這些奇奇怪怪的書名與內容在談什麼,這三本書有一個共同點,那就是淺顯易懂且很好笑。


曲高和寡這成語大家都知道,但是做事的時候卻還是無法避免唱高調的習慣。尤其是書讀的越多,越不容易放下身段。軟體工程這種東西,說實在的,大部分都很無聊。要怎麼把枯燥的內容講給一般的地球人了解,這就需要下點功夫了。
 
*************************************************************************************

幾天前在某個學弟的「非死不可」上面看到一則留言,提到學弟和他的老闆在「輕鬆談軟工」部落格發表了一系列作品。不過這不是重點,重點是鄉民甲的回應:

「看完輕鬆談軟工之後,怎麼覺得很不輕鬆」

Teddy 笑了

*************************************************************************************

前幾天 Teddy 才發現,Teddy 的部落格沒有主題。嗯,就叫做:「搞笑談軟工吧」。


友藏內心獨白:「看完搞笑談軟工之後,怎麼覺得很不好笑」

2009年11月22日 星期日

Scrum + 國科會計畫書 = 研發抵免

11/22 00:34~01:42

各位鄉民們,如果剛好在台灣念過研究所,而老闆剛好需要提國科會計畫,則多多少少都有機會參與國科會計畫的撰寫,才不枉被稱之為「研究 ㄕㄣ」(要學功夫足球裡面周星馳的發音)。

有此經驗者,一定和 Teddy 不一樣,心中暗自咒罵著老闆。在 Teddy 念研究所這 N 年中,參與了約 20 年份的國科會計畫書撰寫 (鄉民甲:Teddy,敢問您研究所念幾年啊)。所謂好人有好報,辛苦的付出就在工作之後獲得回饋。

看過 Teddy 大作「美簽:快速簽證之學術面談」的鄉民們都知道,Teddy 只是在一家民間公司當個小工程師,開發軟體,寫寫程式。這看起來跟國科會計畫八竿子打不著。錯!就在一個多月前,Teddy 任職公司的行政人員突然通知大家,因為公司要申報研發費用抵免租稅,因此需要工程師填寫研發資料。這個突如其來的要求,很多人都不知道該怎麼回應。好里佳在,對於擁有「參與20 年份國科會計畫書撰寫經驗」 的 Teddy 而言 (唸起來還真給它繞口),只能算是小 case 的啦。

不過,話說回來,光有計畫書撰寫經驗還是不夠滴,總是要生出實質內容吧。還好 Teddy 上班這一年以來,都乖乖奉行 Scrum。所有的開發時程、需求、施工內容一應俱全,而且有把它存到電腦中。此外,當然也包含可以動的軟體和精美的使用手冊 (不像有些學生 OOP 作業寫不出來最後只交一份程式屍體,害助教還要開棺驗屍才能打分數)。經過這次事件之後,Teddy 應用 OOAD 的技巧,推導出一個軟體從業人員不可不知的公式:

Scrum + 國科會計畫書 = 研發抵免

前後約三個工作天就把10幾頁的資料交出去啦。負責收資料的行政人員非常滿意,還跟 Teddy 開玩笑說:「要提名 Teddy 為優良員工」 (可是公司根本沒有這項選拔活動啊)。


不過,此時 Teddy 內心又冒出小小的吶喊:「寫歸寫,Teddy 可不保證最後能否通過國稅局的抵免審核」。畢竟 Teddy 參與過的這 20 年份的經驗,也不是每次都有要到錢的啦 (這都是阿共的陰謀啦)。

總之,各位「研究ㄕㄣ」,下次老闆要你幫忙寫計畫書,絕對是替你未來就業著想,乖乖寫,可不要偷懶亂寫一通,最後又跑回學長身上啊。

2009年11月21日 星期六

窮得只能超頻

11/21 12:00~13:20

超頻這種舉動,就好像把一台時速只能跑120公里的房車硬ㄍㄧㄥ到200公里,是一件很危險的行為。而且會消耗更多的能源,不符合節能減碳的潮流。Teddy 已經過了追求速度與刺激的年齡,一切只求「穩」,因此買電腦的時候,不曾把能不能大超特超這個因素考慮進去。

Teddy 手邊這一部 ASUS P5B Intel Core2 E6400 (2.13 GHz) 桌上型電腦,已經賣命的服務了兩、三個年頭。最近這幾個月是越來越不爭氣,只不過跑個 VMWare、FireFox 開個三、四十個 tabs、寫寫文件、偶爾開個 Eclipse,在使用上常常會有lag 的感覺 (難道是 Teddy 要求的太多了嗎?)。

也許是這台 P5B 受到馬總統的感召,要 Teddy 一起拼經濟 (像 Teddy 一樣的薪水階級小老百姓,拼來拼去怎麼都是拼到別人的經濟 ?)。難道 Teddy 也該換台新桌機了嗎,不知道現在的地球人大概都多久換一台電腦?

這幾天花了點時間在 PCHome 上研究一下電腦規格和價錢,既然 Teddy 手邊這台是雙核心的,下一台應該至少是四核心起跳吧。嗯,看了一下報價,新的「愛妻 (i7)」 、「愛我 (i5)」等級的電腦,最爛的也都要兩、三萬起跳,買這個肯定會被罵的啦。好吧,那不要買最新的,此時 9999 這個數字刺傷了 Teddy 的眼睛:

Acer「霹靂戰神」四核燒錄電腦

  • 處理器:四核 AMD Athlon X4 630 (2.8GHz)
  • 記憶體:1GB,4 組記憶體插槽,最高可到 8GB
  • 硬碟:320GB
  • 光碟機:全功能DVD燒錄機
  • 其它:讀卡機、原廠鍵鼠組、HDMI 輸出
這樣的配備,甘愛 (需要) 兩萬嗎?不用;甘愛一萬嗎?也不用。只要 9999。如果再買個兩條2G的記憶體 (再加 3000 左右),加上 Teddy P5B 上面現有的兩條2G,就有 8G RAM。安裝 64 位元作業系統,這樣應該可以多跑幾的 VM 來玩一下不同的 OS。
這組 C/P 值看起來頗高的桌機,應該就是 Teddy 理想的選擇啦。

依照往例,Teddy 的異想世界又破功了,只是提出購買意願書就被駁回。Teddy 還不想引發家庭革命,只好鋌而走險,把腦筋又動回 P5B 身上了。

嗯,電腦太慢也許是驅動程式太舊了,看看有沒有什麼驅動程式可以更新的先。連到 ASUS 網站,好樣的,果然是「X碩品質,以卵擊石 堅如磐石」,上面居然有最近才更新,可以支援 Win7 的最新驅動程式。這真是佛心來的,太感恩了,趕快盲目的卯起來把能更新的軟體一次更新完畢。只是有點擔心,同時吃太多藥,不知道會不會藥物中毒,互相衝到。

歷經 N  次重開機之後,耶,嗯,啊,喔... 新的 GeForce 7300 GT 驅動程式以及Intel 晶片驅動程式好像有讓電腦感覺稍微順了一點。此時 Teddy 心中傳來小小的吶喊「超頻、超頻、超頻」。還好 P5B 的 BIOS 超頻選項設計的很好,連 Teddy 這種超頻小白也可以輕鬆完成。先操個 10 趴看看。

 

由 2.13 GHz 變成了 2.34 GHz,雖然只小小的增加 200 MHz 的速度,用起來好像順了不少。免錢的提升性能,撐一陣子先,如果夠穩下次試看看 15趴。

友藏內心獨白:好希望跟阿扁一樣「窮得只剩下錢」,而不是「窮得只能超頻」

2009年11月20日 星期五

麥甲我蓋布袋, Part 2

11/20 00:45 01:10

Teddy 繼上次冒著生命危險在學校糾正一位在大樓內抽菸的學弟之後,膽子變小了許多,但心中那把微弱的正義之火還是伺機死灰復燃。今天 Teddy 又做了一件極可能會被蓋布袋的事,詳情如下。

Teddy 因為脖子痛到住家附近的小醫院復建已經有三、四個月的時間,今天晚上依例又到醫院報到。由於今天沒有復建科門診,天氣又冷、Teddy 去的又晚,復建室裡只剩下四、五個病人。當Teddy 在做「熱敷 + 電療」的時候,坐在 Teddy 旁邊的某位中年女性病患 (簡稱 X 女士),居然拿著疑似 PSP 在看韓國演唱會的影片。人家看她的影片關 Teddy 什麼事?沒錯,X 女士在 Teddy 到之前就已經在復建了,原本她要做什麼是不關 Teddy 的事,但是她並沒有戴耳機,直接把聲音用很大的音量放出來。當 Teddy 坐在她旁邊復建時,X 女士旁若無人,繼續看她的影片。Teddy 總是相信人性本善,給了X 女士一分鐘改過自新的機會,誰知道她不善加利用,依然故我,於是 Teddy 側身對X 女士說:「 歐巴桑 小姐,可不可以麻煩妳戴耳機聽」。此時,一位身材略胖的男士(簡稱 Y 復建師),突然出現,把X 女士的PSP 拿走。原來這位Y 復建師是醫院的復建師,這台PSP應該是他借給X 女士的,當場小小間接的得罪了復建師。

現場短暫恢復了平靜,當 Teddy 做完「熱敷 + 電療」之後,要換場地做第二項「拉脖子」,此時X 女士已經做完「拉脖子」,又跑回「熱敷 + 電療」場地做其他復建項目,這個項目是需要Y 復建師徒手治療。鄉民們猜猜發生什麼事?沒錯,就在 Teddy 被綁在「拉脖子」的機台無法動彈的時後,Y 復建師又跟X 女士熱絡的大聲聊天,還開著類似搖滾音樂助興。

20分鐘過去,Teddy 做完「拉脖子」項目,離開前跟現場另一位資深的復建師反應,請她轉告Y 復建師:「要聽音樂請戴耳機,不要把復建室搞的跟舞廳一樣」。就這樣,會給 Teddy 蓋布袋的嫌疑犯又加了 2 個人。

難道是 Teddy 太「龜」了嗎,連別人聽個搖滾重音樂都無法忍受?還是嫌疑犯X+Y的公民與道德亦或是國文不及格,把「己所不欲,勿施於人」直接改成「己所欲,強施於人」(獨樂樂不如眾樂樂?)。乾脆下次 Teddy 也把手機帶去,現場播個大悲咒什麼的好了(收妖)。

友藏內心獨白:不是說過地球很危險了,你還在這幹麻?

2009年11月17日 星期二

Teddy 的 Pair Programming 之旅

01:00~02:10

簡單的說,pair programming 就是兩個人共用一部電腦,坐在一起開發軟體,一個動手,另一個閒著 看著,並不時提供意見 (如果沒在啃雞腿、吃泡麵、看連續劇、或睡著的話)。也許叫做 pair developing 會比較貼切一點。問題是 Kent Beck 大哥用了pair programming 這個名稱,晚輩們不敢造次,繼續沿用。

此時 Teddy 又聽到鄉民們的怒吼:「什麼,人都不夠用了還兩個人一起寫,這麼爽。兩個人分開寫不是比較快」

的確,連小學生都會的算數:一個人一小時寫 20 行程式,請問兩個人分開同時寫,一小時可以寫幾行?
答案是:「40 行」

那麼,如果兩個人一起寫,一小時可以寫幾行?
答案是:「20 行」

所以,你的老闆一定反對 pair programming ,因為生產力變成一半。

*************************************************************************

鄉民們有看過「實習醫生」這部影集嗎?片中的實習醫生或是住院醫生,想盡各種辦法,都要陪著「主治醫生」一起進開刀房動手術。手術室中除了若干位醫生,還有護士、麻醉師、操作醫療儀器的技術員等。耶,那開醫院的人一定都是笨蛋,因為這樣生產力變成 1/N。

為什麼動手術需要這麼多人?因為「品質(人命)」比「速度 (生產力)」來的重要。

此外,很多位醫生一起動刀還肩負著 相互監視「經驗傳承 (教學)」的目的。在動手術的過程中,資深醫生會和實習醫生對話,測試他們對病況了解的程度與應對方針是否洽當。時機成熟也會讓實習醫生們動動刀 (可憐的病人...)。

當遇到很棘手的案例時 (例如,切除不良腫瘤),有時需要動用到多位資深的醫生一起動刀。所以不一定都是資深醫生搭配實習或住院醫生。

*************************************************************************

如果我們看重的是「程式的品質」而不僅是「寫程式的速度」,那麼 pair programming 就很有意義了。因為 pair programming 同時具備 coding、review、testing、 refactoring、learning 等目的,是一種殺傷力很強的武器。但大家也都知道實施 pair programming 不容易。為什麼?扣除大家熟知的環境因素 (沒有開刀房 沒有大桌子、大螢幕)、配對因素 (熟手配熟手、熟手配生手、生手配生手、男生配男生、男生配女生、女生配女生、團團配圓圓、地球人配火星人...)、不信任 (覺得生產力剩下一半、浪費時間、無聊...) 以外,在 Certified Scrum Master 課程講義中有提到一點:

因為 pair programming 打破人的界線 (boundary)

Teddy 很同意,咱們台灣人連「藍綠蜘蛛網」都打不破了,更別說要打破人的界線。

*************************************************************************

Teddy 提一下自己擔任 Scrum Master,在專案中鼓吹 pair programming 的經驗:

  • phase 1,政令宣導:鼓勵團隊有機會的話儘量採用 pair programming 。結果是,沒人理Teddy。
  • phase 2,自己下海:找一、二個團隊成員來和 Teddy pair。成效還不錯,不過自己累的半死。當 Teddy 停止抓人來配對之後,也沒有人繼續嘗試。
  • phase 3,強迫中獎 I:告訴團隊這個sprint所有開發工作都要以pair programming的方式進行。結果,成效很好但只維持兩個sprints。畢竟強制的方式無法持久。
  • phase 4,無為而治:。從此不再特別強調,由團隊自己決定。經 Teddy 非正式估算大概只有10~20%左右的開發工作會採用pai programming。

說真的,到了這個階段 Teddy 已經沒輒也沒力了。Teddy 自己非常相信 pair programming 的 「藥效」, 但良藥苦口,團隊不肯安心按時服用,Teddy 也不能強迫 (難道真的是叔叔有練過,小朋友不肯學嗎?)。雖然在 retrospective meeting 經常會有人提出需要增加 pair programming 的時間,但神奇的是,等到真正領取工作的時候,又是各做各的比較多 (也許 retrospective meeting 缺少 action plan?)。

  • phase 5,強迫中獎 II:以往在估算 tasks 的時候,團隊只估算一個人做這件 task 所需的時間。也許是這個因素,導致於一個 task 通常只由一個人完成。從上週開始,團隊在 sprint planning meeting 時,就大致決定哪些 tasks (約略 80%) 需要採用 pair programming ,將其所需時間乘2,並且在 tasks 上面寫一個 P 字 (不是維大力P),提醒團隊這是一個經過大家同意,需要 pair programming 的工作 (而且已經分配兩倍的時間)。由於才實施一週,因此長期成效尚難斷定。不過目前感覺起來這是 Teddy 試過的幾種方法中比較好的。當然,決定採用這種方法之前,Teddy 還是循循善誘一番,且經過團隊同意才實施。

友藏內心獨白:什麼是「藍綠蜘蛛網」?

2009年11月14日 星期六

掛羊頭買狗肉:Scrum篇

幾個禮拜前接到指導教授打來的電話,告訴Teddy系上的C老師想邀我回去給一場演講。我心想,應該是研一的「專題討論」這門課,Teddy以前也上過。大致上就是每兩週找一位校外人士來演講,雖然偶有佳作,但大部分的演講內容都是鴨子聽雷。這種感覺好比買樂透一樣,買的時候充滿希望,開獎的時候卻屢屢槓龜。好吧,終於換我荼毒學弟了,欣然答應。

就像老祖宗常說的:「代誌不是憨人想A駕泥簡單」,這回Teddy又錯了。幾天後Teddy收到C老師寫的email,原來是這學期學校在大一新開了一門必修課叫「大學入門」(友藏內心獨白:這是什麼東東,我還佛學入門勒),專門給大一新生一些大學生涯的概念。這落差太大了,從研一變成大一,一下子年輕了四歲。這還不打緊,最重要的是,Teddy沒有唸過大學啊,要講什麼?可是都答應了,又不好拒絕,只好硬著頭皮上了。

就在Teddy即將完全忘了這件事的時候,這禮拜一再度收到C老師的email,通知Teddy不要忘了這禮拜五的演講(就是今天啦,13號星期五,還真會選日子)。哇,這麼快就到了,還沒想到當天要唬爛的主題…還好,前一陣子去上了 Certified Scrum Master 課程,就來講這個好了。

「休蛋一A」,此時Teddy聽到鄉民們的怒吼:「跟大一生講這個會不會太超過了,況且和主題也不符」。正所謂「狗掀門簾,全仗著一張嘴」,沒錯,這時候只能發揮想像力,生命會找到出路的。

Teddy去之前就在想,這門課排在禮拜五七、八節,這不是引人犯罪嗎?這種不翹課對不起父母的時段,果然很適合這種營養學分(這…有算學分嗎?)希望到時候沒有人啃雞腿、吃泡麵、看連續劇….

15:10準時上課,C老師帶著Teddy,一踏進教室,C老師就說:「人怎麼這麼少」(依Teddy目視判斷,應該只來了一半吧)。意料之中,Teddy終於當了一回事前諸葛亮。

演講歷時約70~80分鐘,精采程度不在話下。原本有一個Scrum練習要給學生們做,為了不耽誤大家回家的時間,就取消了。整個過程下來發生幾件令Teddy十分感動的事:

  • 沒有人吃雞腿或泡麵(好樣的,比台大醫科水準還高)
  • 睡著的人只有6個左右(也不錯,水準跟台大醫科差不多)
  • 完全不理會Teddy而自顧自聊天的人控制在5-8人左右
  • 睡著的都很安靜,沒有打呼吵到隔壁聊天的人
  • 聊天的人也很自制,放低聲量沒有吵醒隔壁睡覺的人
  • 學生中有一位是友邦的黑人同胞,應該聽不大懂中文吧。可是她撐到最後10分鐘才睡著(因為之前都在忙著和隔壁的人聊天,辛苦您了)

另外,有兩件不應該發生的事:

  • 有一個坐在Teddy演講位置前方的學生,居然整場都給予Teddy很認真的表情和眼神。敢問這位仁兄,您是咖啡喝太多了嗎,這麼有精神!
  • 另外,現場控管不好,居然被滲透了兩、三位研究所的學生。你們大學應該都有畢業吧,還來湊什麼熱鬧。

想看看Teddy賣了什麼狗肉,這裡有演講投影片可下載:http://pl.csie.ntut.edu.tw/~ctchen/pdf/csie-2009-11-13-v0.2-blog.ppt