l

2012年8月31日 星期五

你很矛盾耶:談Time Log

August 30 16:23~17:39

image

 

有鄉民問Teddy:「你在《這不是整人遊戲之time log紀錄方式》這一篇宣揚你自己以前是如何寫time log(紀錄工時)的,但是最近你又說,紀錄工時就不敏捷了?要記錄工時也是你說的,不記錄也是你說的。你很矛盾耶!」

此事說來話長。Teddy紀錄工時的那幾年,是在學校念研究所的日子。當初想記錄工時,而且覺得紀錄工時有用,主要有以下幾點原因:

  • 想知道自己每週時間分配:念博班不像是念碩班一樣,畢業時間是比較可以預估的(基本上碩班兩年就可以畢業)。有時候忙了好一陣子,卻發現自己的研究沒什麼進展。藉由寫 time log,可以確定自己有沒有把時間平均分配到該分配的地方。例如,修課、準備資格考、讀paper。舉個例子,有些人可能認為修課很重要,把全部的時間都拿去修課、寫作業,每一門課都拿第一。但是,三年過去,都沒時間準備考資格考,最後資格考沒過,還是被退學…Orz。從這個角度來看,寫time log是一種協助自己做「time boxing」管理的工具。
  • 想知道某些重複出現的工作需要花多少時間:在研究生的生涯中,像是寫proposal、paper等事情,是會重複出現好幾次。這些工作通常都是有deadline的工作。Teddy還記得自己第一次寫proposal的時候,對於需要多少時間才能寫完一份proposal這件事完全沒有任何概念。所以剛開始會很緊張,怕時間到了寫不完,只好七早、八早就開始動手寫(請注意,從敏捷精神的角度來看,太早做某件事也不一定是好的喔…XD)。經過幾次紀錄,Teddy發現寫一份proposal大概需要30-80小時的時間(看是要寫幾年的計畫書以及對該主題的熟悉度)。有了這份參考數據,後來寫proposal這件事對Teddy而言就變成了一件可以預估的工作(當然另一方面也是自己的能力變好了)。除了可預估之外,後來Teddy寫proposal就抱持著一個心態:「我這次準備投資N小時(N介於30-80)在這個proposal上,我的目標就是在這段時間內盡其所能地把proposal寫好。時間到了就把proposal丟出去,然後繼續做其他的事情」。這也是time-boxing的做法。
  • 提醒自己不要偷懶:唸到博班基本上指導教授不會管你要做什麼,自己要對自己準備做的事情有想法。但是,有時候東晃、西晃,一個禮拜過去,發現自己什麼都沒做。如果一週統計下來,發現自己只投入20小時在修課+寫作業+讀書上面,那就很有問題了(迷之音:玩Facebook花了12小時,玩線上遊戲花了20小時…Orz)

寫time log有一個最最最最最重要的重點,那就是「誠實記錄,灌水是沒有意義的」。念書的時候環境單純,老闆(指導教授)不會拿time log來做為打考績的依據,而是用來提醒學生時間分配與使用是否洽當。再加上當時的工作類型也相對單純,Teddy自己想了一個overhead最小的紀錄time log方法(請參考《這不是整人遊戲之time log紀錄方式》),也就持續寫了好幾年的time log。

***

場景換到公司內部。

CEO:我以員工的性命發誓,紀錄工時只是用來作為計算專案成本的參考,絕對不會用來當作打考績的依據 開個玩笑

主管:啊,一週下來玩Facebook花了一小時…不錯嘛勃然大怒 火冒三丈(笑裡藏刀)。回email花了四小時。是怎樣,寫情書給女朋友求婚嗎?

打考績的時候…

主管:嗯,從time log看起來,「馬屁雉」平日每天都工作25小時以上,連假日都來加班。我叫「馬屁雉」往東,他絕對不敢往西,完全配合公司的 愚人 政策。非常優秀的一位奴才…不對,是人才。考績甲等,年終打賞六個月。

主管:另外這個「白木林」,每天都給我準時下班,假日也不來加班,還三不五時跟我唱反調。考績丁等,外調「最果署」(鄉民甲:這是哪裡啊?!)。

CEO:嗯,此次「京察大典」愛卿操辦的不錯,打賞黃馬褂一件。

主管:謝主隆恩。

***

友藏內心獨白:現在是演到哪個朝代了?

2012年8月30日 星期四

怎樣才算敏捷?

August 29 20:40~21:50

image

 

先說明一下,這個問題,沒有什麼正確答案,必須要自己用心體會。

先思考一下這幾個問題:

  • 聽說敏捷方法都沒有在寫文件的耶,這樣怎麼行?
  • 我最近用到前人寫的元件,都沒有說明文件可以看耶。所以我打算在下個sprint中,安排一些時間來補寫API的使用文件。
  • 有了這個電子化看板(taskboard)之後,我就可以從電腦上看出來每個開發人員每天花了幾個小時、做了哪些事情、check-in那些程式碼。
  • (承上)而且這樣我就可以透過這個系統來review開發人員的程式碼了。

以上所說,和敏捷不敏捷有何關係?

故事一

安辛啞的寫真集一本80塊,搖搖的寫真集一本60塊。鄉民們手上只有100塊,請問要買哪一本?

鄉民甲:安辛啞比較可愛,當然是買她的啊。

鄉民乙:搖搖比較大…方…又平易近人,而且一本只要60塊,當然是買她的啊。

鄉民丙:你們很笨耶,沒看過食神嗎?當然是兩本一起買啊。

阿兩:當然是買安辛啞啊,因為她會模仿搖搖 挑眉質疑

眾鄉民:誰是阿兩?

Teddy:不重要,來亂的。繼續看下去。

鄉親們,誰都想兩本一起買。問題是,別忘了你手上只有100塊,在有限的資源之下,要做出最合適的選擇。兩本都想買,最後很可能落得一本都沒買到。

敏捷方法要不要寫文件?有需要、有時間,那就去寫。有需要、沒時間,就安排合適的時間寫。沒需要,有時間,也不要寫。沒需要,沒時間,當然不寫。重點是,從對於「有沒有需要」這件事情的判斷,就可以看得出每個人的敏捷力(好玄啊 不要告訴別人)。

***

故事二

主管:團隊自從用了電子化看板之後,每天都有乖乖地填入工時,這樣每週每個人在那些專案上所投注的時間都一清二楚,這個系統真好用。

烏鴉嘴:有了這麼好的系統,怎麼案子還是都延遲、客戶還是不滿意、bug還是那麼多?

如果想要做code review,為什麼不鼓勵pair programming,而要事後再來做?啊,因為只有你有資格幫別人做code review,而又是全團隊最忙(到處開會)但卻沒有時間做事的人。所以,「會議好多都沒時間去做code review」就成為專案的「現況」。

想知道團隊成員每天都在幹什麼,為什麼不實地觀察?「皇祖母有云:奏摺是天底下最不可信的東西」。要靠報表治理軟體開發團隊,有誰成功的請好心的分享一下相關經驗。

***

鄉民:以上講了這麼多廢話,該講的事情都沒講。

Teddy:對不起,我該講什麼?

鄉民:就「怎樣才算敏捷啊」!

Teddy:喔、喔,對耶。答案很簡答…如果這一次Teddy再搞什麼「一字曰之心」這種老艮,鄉民們就可以準備轉台了。各位觀眾,答案是:

在做決定的時候,思考這個決定是否對於對客戶價值真的有所提升,這就是敏捷精神(的一種體現)。

姥姥 鄉民:這哪招?

大家都想要提升客戶價值,也都以為「這樣」(自己正在做的事情)可以提升客戶的價值。難就難在,如何判斷某個措施或是制度,只是在做白工,還是在提升客戶價值。

這就要靠鄉民們的智慧去自行判斷啦。不然有機會多參加C. C. Agile每月一次聚會互相交流一下,也是一個不錯的提升功力的途徑。

***

友藏內心獨白:拜託,一個月才辦一次,然後名額才20個,要哪一天才搶得到啊…Orz。

PS:活動報名不到會發生很恐怖的事…不要問…真的很恐怖啊。

2012年8月29日 星期三

這樣就不敏捷了啊

August 28 12:20~14:05

故事一

兩個月前在「逛夜市」的時候無意間看到一本談論敏捷開發的新書,書中強調可以藉由某套「武功高強的軟體」,來幫助開發人員快速導入敏捷方法。根據書中的說明,這套軟體內建了敏捷方法與Scrum範本,可以自動產生很多「報表」,滿足「管理階層」對於專案進度與成本分析的需求。更讚的是,這套軟體有「電子化工作看板(task board)」的功能,開發團隊只需要透過「瀏覽器」,就可以輸入product backlog、sprint backlog。在Daily Scrum的時候,開發團隊圍繞著投影機打出來的task board,再也不需要實體的task board了。什麼便利貼,這麼低科技又不環保的東西,丟掉、丟掉、丟掉

丟掉便利貼與實體task board,把所有的story與task全部都電子化之後,就會有很多好處喔,例如:

  • 可以支援traceability:簡單的說,就是可以知道那些工作、模組、程式碼、bug、issue等是屬於那些需求(反之亦然),或是一個大的需求被切割成那些小的需求(反之亦然)。
  • 可以記錄每一個task與story的工時:只要在認領task的時候,在工具上面按下「開始施工」,工具就會幫你自動計時(迷之音:這樣鄉民們就知道要如何虛報工時了吧XD)。
  • 可以自動產生很多報表。

完全丟棄實體task board有沒有缺點?不知道耶,這本書沒提到。這本書一共有三大章,其中有很多內容都在介紹如何設定、使用、與駕馭這套「武功高強的軟體」。Teddy只看了第一章身體就不太舒服有點反胃想吐而沒有繼續看下去趕快離開夜市回家休息。回家之後躺在床上思考一下,腦中浮現一個不是很重要的小疑問:

這樣就不敏捷了啊

***

故事二

導入Scrum之後,接下來要思考的問題,就是如何改善團隊的程式開發能力。以前Teddy還在「吃頭路」的時候,有一位工作上的前輩告訴Teddy,他在帶領Scrum團隊的時候,想要讓團隊成員用refactoring技巧來改善設計的品質。這位前輩堅信好的設計應該要套用很多design pattern,所以程式經過refactoring後的結果,應該是變成很多各式各樣的design pattern。問題來了,團隊的程式碼之所以設計不良,是因為團隊成員其實不懂design pattern。而這位前輩又希望團隊成員可以透過refactoring直接在現有的系統中套用很多pattern。在不懂refactoring又不懂design pattern的情況下,請問單兵該如處置?

前輩:所以說,要導入refactoring之前,要先教團隊成員design pattern,這樣系統重構後的結果才會「漂亮」。如果不懂design pattern,refactoring的步驟就會變成一次改一點、一次改一點,這樣無法做到「一步到位」,很浪費時間耶

Teddy:單純的把duplicated code 去除也是refactoring,應該不需要先學design pattern才能把refactoring做好吧?

前輩:…(申論題,文長,勿入,直接省略…XD)

聽完前輩的看法之後,Teddy內心只有一個不是很重要的小疑問,要實施refactoring之前還要先學design pattern的話,

這樣就不敏捷了啊

***

講這麼多廢話,那到底要如何才算敏捷?歡迎參加:

image

名額有限,報名網址請按我

***

友藏內心獨白:不要搞到敏捷都不敏捷了

2012年8月28日 星期二

Design Patterns這樣學就會了:入門實作班,Day 2

August 27 16:30~17:12

螢幕快照 2012-08-27 下午5.14.58

練習活動也可以選擇pair programming喔XD。

 

第二天的課程一早趁著學員腦袋清晰的時候,先搬出State模式伺候。State模式說難也難,說簡單也簡單。只要能夠劃出state transition diagram,把每個狀態用一個State類別來表示,再接著實作每一個transition就OK了。

螢幕快照 2012-08-27 下午4.34.05

這個State從講解到實作,花了一個早上的時間,實際操作過一次,相信每位學員都了解State模式的用法。

下午開始學員們剛吃飽,先來個簡單的Facade模式。講解完畢之後請學員們在紙上畫出自己經歷過的Facade模式。

螢幕快照 2012-08-26 下午9.25.11

螢幕快照 2012-08-27 下午4.41.24

螢幕快照 2012-08-27 下午4.41.53

緊接著上場的是Template Method。提到這個模式,就一定要介紹另外一個重要的物件導向原則:Narrow Inheritance Interface Principle。

螢幕快照 2012-08-27 下午4.43.51

 

接下來用一個逐步演化的例子,介紹Simple Factory、Factory Method、與Abstract Factory這三個有點像,又不會太像的模式。當然最後也是要把Factory Method與Abstract Factory給實做出來。

螢幕快照 2012-08-27 下午4.47.47

螢幕快照 2012-08-27 下午4.48.35

***

這次三天的課程雖然還有一天才會結束,但光是上前兩天的課就讓Teddy有很多感想,以下是最重要的四點:

  • GoF的design pattern真的沒有想像中那麼的難以學習,重點是有沒有找到好的學習方法和途徑。
  • 教design pattern實作班雖然累,但是看到不同背景的學員可以當場練習一次每一個pattern的寫法,還是覺得這種教法比較有效(不過成本會比較貴XD)。
  • 有些人可能認為自己了解design pattern,但實際上卻只是看到pattern表面的含意,這是非常危險的。因為誤用design pattern比不用design pattern還要可怕很多啊。有病還是要看醫生,不要隨便吃亂成藥 XD。
  • Christopher Alexander的pattern與pattern language這套方法,不只對軟體開發有幫助,對於分析困難與複雜問題也很有幫助。

***

友藏內心獨白:真的是教學相長。

2012年8月27日 星期一

Design Patterns這樣學就會了:入門實作班,Day 1

August 26 22:35~August 27 00:14

螢幕快照 2012-08-27 上午12.25.01

 

8月25日星期六是「Design Patterns這樣學就會了:入門實作班」第一天上課,此次報名的學員比Teddy原先預期的要多,有兩位還遠從高雄北上來上課,這也是出乎Teddy原本的預料之外(因為Scrum的課程都沒有南部來的朋友啊…挑眉質疑)。

學pattern方法十幾年,Teddy覺得光是講GoF書中的pattern,雖然對學習軟體設計非常有幫助,但如果僅止於知道GoF書中的pattern,並不足以發揮Alexander原本「pattern」和「pattern language」的威力,所以Teddy特別在這次的課程中,花了四個小時的時間,從「什麼是軟體設計的產出物」這個問題開始談起,然後以一個一般鄉民都看得懂的例子,一步、一步帶領學員,透過說明下面這個觀念,進入pattern的世界。

螢幕快照 2012-08-26 下午10.39.02

 

這個pattern的例子一開始長成這樣。

螢幕快照 2012-08-26 下午10.58.45

 

改到第5.1版之後,變成這樣(還沒改完喔)。

螢幕快照 2012-08-26 下午10.55.03

 

把例子講完之後,再仔細說明與分析pattern六大元素之間的奧妙關係,學員們在30分鐘之內就有能力寫出一個pattern出來。

螢幕快照 2012-08-26 下午11.05.14

 

寫得好認真啊 很棒

螢幕快照 2012-08-26 下午11.07.32

 

接著Teddy解釋一個很重要的觀念,為什麼要學pattern(這裡所說的pattern,不是GoF的Design Patterns,而是Alexander在The Timeless Way of Building一書中所談的pattern喔)?。Pattern是一種思考與解決複雜問題的方法,可以幫助鄉民們從「加班到死的programmer」,慢慢轉變成「programmer」、「designer」、「architect」的一個過程。這種pattern方法的核心精神,可以應用在各種不同的領域之中。

螢幕快照 2012-08-26 下午11.09.39

 

以上內容就算是不會寫程式的人來聽,都可以理解並且實際應用pattern來作為一種思考與設計的工具。所以之後Teddy會將這部分的內容獨立出來,單獨開一門介紹如何使用Pattern來作為思考與設計工具的課程。

***

接下來的內容慢慢轉移到軟體身上,先講物件導向設計觀念。

物件導向的觀念Teddy講了可能快有20年的時間了(比學pattern的歷史還要長久啊)。光看這兩張投影片可能會覺得沒什麼,現場聽完之後,保證會讓很多人懷疑:「我以前學過的東西,真的是物件導向的觀念嗎?」

螢幕快照 2012-08-26 下午11.24.58

螢幕快照 2012-08-26 下午11.24.29

接下來就進入GoF的design pattern範圍,第一天介紹的是Singleton與Observer,當場要把程式給寫出來。

(迷之音:JUnit的jar檔放在哪裡…Orz)

螢幕快照 2012-08-26 下午11.31.35

***

第一天課程結束之後,Teddy覺得教這個Design Pattern的課比上Scrum還要累大概5倍以上啊(所以日後學費也要乘以5)。已經有好一陣子沒有體會到武俠小說「射鵰英雄傳」中,「一燈大師」幫「黃蓉」治療內傷之後,那種虛脫的感覺了…Orz。不過說真的,Scrum的確比pattern要容易了解太多了(雖然要把兩者都學好,個別來講都是很高難度的一件事)。

來上這門課的學員,有好幾位在工作上是用C在寫程式,對於物件導向的觀念並不是很熟。也有工作上使用C++、Python和Delphi的學員,但是基本上在課堂上並沒有遇到什麼嚴重的困難,這也是讓Teddy感到很高興的一點(因為之前Teddy有「放話」,只要曾經會寫程式,對於pattern有興趣的人,都可以來上這門課,沒有限定要對Java或是物件導向很熟悉才可以學)。

***

友藏內心獨白:還是要花時間寫一本《設計模式的逆襲》,讓沒錢上課的學員可以自己買書回家看?!

2012年8月26日 星期日

120708(下)國軍英雄館早餐_台灣博物館

August 25 22:22~22:43

接下來要參觀「台灣博物館:土銀展示館」的另一個重頭戲,也是小朋友最喜歡的「恐龍化石展」。請看照片就知道。

在二樓用餐的地方,就可以欣賞到恐龍喔。

螢幕快照 2012-08-25 下午10.25.52

 

蜻蜓的化石。

螢幕快照 2012-08-25 下午10.27.24

 

小強的化石。

螢幕快照 2012-08-25 下午10.27.33

 

海綿寶寶的…祖先 微笑

螢幕快照 2012-08-25 下午10.28.05

 

還有很多其他種類的化石。

螢幕快照 2012-08-25 下午10.28.12

 

鳥類標本。

螢幕快照 2012-08-25 下午10.28.19

 

恐龍化石。

螢幕快照 2012-08-25 下午10.32.45

 

很多恐龍骨架。

螢幕快照 2012-08-25 下午10.32.05

螢幕快照 2012-08-25 下午10.32.58

螢幕快照 2012-08-25 下午10.33.12

 

天上飛的。

螢幕快照 2012-08-25 下午10.33.24

水裡游的。

螢幕快照 2012-08-25 下午10.33.42

 

這應該是長毛象。

螢幕快照 2012-08-25 下午10.33.48

 

從後方往前看。

螢幕快照 2012-08-25 下午10.33.55

 

這個是要買幾號的鞋子?

螢幕快照 2012-08-25 下午10.34.19

 

看的好過癮,準備回家了。看一眼可愛的地球。

螢幕快照 2012-08-25 下午10.34.44

***

花20元新台幣就可以同時參觀「台灣博物館」與「台灣博物館:土銀展示館」,真的是非常值得啊。除了展覽好看之外,冷氣也好涼,實為消暑外加長知識的好去處啊 很棒 很棒 很棒 很棒

***

友藏內心獨白:小朋友看到恐龍好開心。

2012年8月25日 星期六

120708(中)國軍英雄館早餐_台灣博物館

August 25 19:38~20:20

離開位於二二八公園內的「台灣博物館」之後,來到對面的…ㄟ…「台灣博物館:土銀展示館」。先到二樓吃午餐。有點小貴,食物還OK。

螢幕快照 2012-08-25 下午10.50.31

螢幕快照 2012-08-25 下午10.50.41

螢幕快照 2012-08-25 下午7.49.15

螢幕快照 2012-08-25 下午7.49.27

 

吃完之後先到一樓參觀。一樓有一個區塊是介紹這棟建築物的歷史,此建築物之前是土地銀行的資產,後來不知道為什麼就變成了…「台灣博物館:土銀展示館」。

螢幕快照 2012-08-25 下午7.50.11

螢幕快照 2012-08-25 下午7.50.44

 

館內有展示一些日據時代的台北老照片,看起來好有fu喔。以前的台北好美。

螢幕快照 2012-08-25 下午7.54.05

螢幕快照 2012-08-25 下午7.54.18

 

據說以前從台北車站是可以直接看到二二八公園內的台灣博物館的。

螢幕快照 2012-08-25 下午7.54.29

 

館內還有展示一些銀行業與土銀演進的過程。

螢幕快照 2012-08-25 下午7.54.51

 

黃金。

螢幕快照 2012-08-25 下午7.55.04

 

白銀。

螢幕快照 2012-08-25 下午7.55.10

 

美鈔。

螢幕快照 2012-08-25 下午7.55.19

 

錢莊。

螢幕快照 2012-08-25 下午7.56.27

 

大東亞共榮圈的地圖。這算是日本人的「歐盟」概念嗎?只是「歐盟」是透過自由意志決定是否加入,大東亞共榮圈是使用武力強迫中獎。

螢幕快照 2012-08-25 下午7.56.40

 

展示空間一角。

螢幕快照 2012-08-25 下午7.57.08

 

懷舊的新台幣。

螢幕快照 2012-08-25 下午7.58.03

 

銀行金庫,趕快研究一下要如何打開。

螢幕快照 2012-08-25 下午7.58.28

 

在一樓土銀展示區的門口,有一個「補摺機」,上面放了一些「假存摺」。拿一張假存摺放到機器裡面補摺,下次來台灣博物館參觀,就可以用半價購買購買門票,現省10塊錢(其實全票也才20元,好便宜啊)。

螢幕快照 2012-08-25 下午7.58.50

 

離開這一區就要到另一個完全不一樣的展示區塊,下集待續。

***

友藏內心獨白:好久沒有這麼晚出刊了啊 害羞