l

2015年8月31日 星期一

敏捷咖啡

August 28 12:36~13:43

螢幕截圖 2015-08-28 13.42.43

▲維也納的中央咖啡館

 

Teddy小時候家裡只喝茶,雖然談不上特別喜愛,但對於喝茶並不陌生,再苦的茶喝起來倒也是甘之如飴。有一次不小心喝了一口黑咖啡,喝了半口馬上吐了出來。當時覺得很奇怪,這麼苦,簡直是「中藥等級」的液體,為什麼有人每天都要喝否則就會渾身不自在?

長大一點,廠商出了罐裝的「伯朗咖啡」。因為加了糖、奶精,味道比起黑咖啡「好入口」很多(當時不懂得喝咖啡)。罐裝飲料很方便,喝咖啡又覺得挺 高尚 特別的,所以有一陣子經常買「伯朗咖啡」做為提神飲料。

更長大一些,出社會之後經常在外用餐,有時候喝到味道不錯的黑咖啡。說也奇怪,怎麼這時候的黑咖啡雖然還是苦,卻喝的出苦中帶甘,甘中帶香的味道。漸漸地,可以區分出不同黑咖啡的味道,哪些好喝,哪些不好喝。喜歡上喝現泡咖啡之後,就幾乎不喝罐裝的「伯朗咖啡」,喝茶的頻率也少了許多。

因為太常喝,後來乾脆自己買豆子回家,要喝咖啡之前再磨豆子。現磨、現泡出來的咖啡不但更好喝,而且空氣中還瀰漫著現磨咖啡豆所散發出來的香味,真是味覺與嗅覺的雙重享受。

***

好景不常,得了胃潰瘍之後,每次喝咖啡就會刺激胃酸過度分泌,造成胃潰瘍復發。後來也就很少喝咖啡,就算喝頂多喝個幾口。唯一的例外是出國旅遊的時候,不知道為什麼在國外喝咖啡胃的反應就還好,還頂得著。如果在國內,有時候貪嘴想多喝一點,在喝咖啡之前還要先吃顆胃藥(制酸劑),才可以享受咖啡的美味。

***

同樣一杯咖啡,各人喝出的味道都不一樣。就算是同一個人,不同時期、不同環境之下,也有不同的體會。這樣的經歷,就好比導入敏捷開發一樣。看別人搞敏捷搞的熱熱鬧鬧的,自己喝一口「敏捷咖啡」味道卻是其苦無比,難以下嚥,還是回頭喝「瀑布咖啡」比較順口。但「敏捷咖啡」真的不好喝嗎?也許是機時未到,也許是自己泡咖啡的方法不對、買到不好的豆子,又或者是喝到不純的三合一罐裝咖啡。也有可能是年紀尚小,體會不出咖啡那種苦中帶干的香醇味道。也有可能是自己體質不佳,咖啡雖好,但刺激胃酸過度分泌導致胃潰瘍,只能敬謝不敏。

咖啡到底好不好喝?全世界喝咖啡的人口那麼多,總是有它的道理。也許現在的你覺得難以下嚥,但持續保持嘗鮮的勇氣,也許有一天你會找到適合你的咖啡。

***

友藏內心獨白:等一個人的咖啡嗎?

2015年8月30日 星期日

2015捷克、奧地利考察之旅Day8-E午餐、聖維塔大教堂門口、舊皇宮

August 10 14:05~14:33

離開黃金巷已經過了12點半,在城堡區內找了一間Lobkowicz餐廳用餐。

▼餐廳入口,看起來有點高級。

螢幕截圖 2015-08-10 14.09.47

 

▼可能是城堡區,所以價錢比舊城區要高一點,不過還在可以接受的範圍。

螢幕截圖 2015-08-10 14.10.04

 

▼在捷克吃了那麼多餐,東西都算好吃,咖啡也很好喝,幾乎沒有遇到地雷。

螢幕截圖 2015-08-10 14.08.25螢幕截圖 2015-08-10 14.08.32螢幕截圖 2015-08-10 14.09.00螢幕截圖 2015-08-10 14.09.27螢幕截圖 2015-08-10 14.10.13螢幕截圖 2015-08-10 14.16.56

***

▼吃完飯後又走回聖維塔大教堂,在門口補拍幾張照片。

螢幕截圖 2015-08-10 14.20.55螢幕截圖 2015-08-10 14.21.04螢幕截圖 2015-08-10 14.27.09螢幕截圖 2015-08-10 14.28.20螢幕截圖 2015-08-10 14.28.33

***

▼接下來參觀編號第一號的舊皇宮,可惜內部無法拍照,只能看幾張從舊皇宮露臺往舊城區拍的照片。

螢幕截圖 2015-08-10 14.22.03螢幕截圖 2015-08-10 14.22.11螢幕截圖 2015-08-10 14.22.19螢幕截圖 2015-08-10 14.22.30螢幕截圖 2015-08-10 14.22.39螢幕截圖 2015-08-10 14.22.51

***

友藏內心獨白:台北的食物真的太貴了。

2015年8月29日 星期六

2015捷克、奧地利考察之旅Day8-D黃金巷

August 10 13:20~13:59

離開聖喬治教堂之後來到黃金巷,傳說16世紀的鍊金師在這裡煉製黃金,故稱為黃金巷。這是一條小巧的街道,有許多商店,二樓還有展示盔甲與武器。這裡最有名的是第22號公寓,因為著名的作家卡夫卡在這裡住了兩年。

▼黃金巷地理位置。

螢幕截圖 2015-08-10 13.30.50

 

▼22號公寓,販賣卡夫卡的著作與紀念品。

螢幕截圖 2015-08-10 13.36.25螢幕截圖 2015-08-10 13.41.17

 

▼黃金巷名字很好聽,但就只是一條狹長的小巷子。

螢幕截圖 2015-08-10 13.43.32

 

▼黃金巷一角。

螢幕截圖 2015-08-10 13.43.24

 

▼從這張照片右下角可以看出,黃金巷一樓是店面,二樓是用來防備敵人的迴廊(算迴廊嗎?不知道要如何稱呼)。

螢幕截圖 2015-08-10 13.45.41

 

▼現在一樓除了紀念品商店之外,有些保留以前的擺設,介紹古時候的生活型態。

螢幕截圖 2015-08-10 13.45.52螢幕截圖 2015-08-10 13.46.05螢幕截圖 2015-08-10 13.46.11螢幕截圖 2015-08-10 13.46.19螢幕截圖 2015-08-10 13.46.25螢幕截圖 2015-08-10 13.46.31

 

▼二樓算是中古時期武器大觀,展示許多盔甲、槍械。

螢幕截圖 2015-08-10 13.38.00螢幕截圖 2015-08-10 13.38.13螢幕截圖 2015-08-10 13.38.23螢幕截圖 2015-08-10 13.38.31螢幕截圖 2015-08-10 13.38.51螢幕截圖 2015-08-10 13.39.04螢幕截圖 2015-08-10 13.39.17螢幕截圖 2015-08-10 13.39.26螢幕截圖 2015-08-10 13.39.52螢幕截圖 2015-08-10 13.40.05螢幕截圖 2015-08-10 13.40.17螢幕截圖 2015-08-10 13.40.31

 

▼這張椅子應該是給練習金鐘罩鐵布衫的人所使用的XD。

螢幕截圖 2015-08-10 13.38.41


***

友藏內心獨白:好痛。

2015年8月28日 星期五

有反應,有想法

August 13 08:59~11:00

螢幕截圖 2015-08-13 11.02.13

▲Eiffel:多看多書應該可以累積一些想法

 

有一次去顧問一個Scrum團隊,第一次參加團隊的product backlog refinement workshop,他們進行的方式出乎Teddy意料之外的好。Product Owner和團隊藉由互相合作的方式,在這個活動中幫下個sprint預計執行的story訂定驗收條件。首先Product Owner解釋story,團隊成員對於不清楚的地方發問。了解story內容之後團隊成員接著估算story point,然後依據story的優先順序逐一在白板上寫出驗收條件。寫完驗收條件之後團隊成員向Product Owner解釋這些驗收條件,Product Owner再看看有沒有遺漏的地方。團隊成員透過撰寫驗收條件,向Product Owner回饋他們對於需求的理解,是一種不錯的互動方式。唯一的小缺點就是這種過程所花費的時間比較長,有時因為時間限制,無法幫當次所有的story都撰寫驗收條件,當下所撰寫驗收條件有時會遺漏一些特殊但重要的劇情。

觀察團隊幾個sprint之後,Teddy發現在sprint中間所舉辦的product backlog refinement workshop,似乎有點不夠「即時」。以Teddy以往的經驗,在sprint review之後,Product Owner很可能會因為sprint review所收集到的回饋意見而調整下個sprint的story。因此原本在product backlog refinement workshop所準備好的story便可能沒有被使用到。從精實開發的角度來看,這便形成了「半成品」。過多的「半成品」不但是一種浪費,也會拉長完成story的交期(lead time)。

Teddy和團隊溝通這個現象,但當時團隊成員並不覺得他們現行的作法有何不妥,因為product backlog refinement workshop可以讓他們提早排除下個sprint可能遭遇的外部阻礙,例如跟協力廠商協調互動的API。

Teddy所感受到的這個force(作用力)對團隊而言當時並沒有感覺,在向團隊分析完context、force、可能的solution選項,以及resulting context之後,這個「問題(或是說觀察結果、建議)」就先擺著,看看過一段時間是否會發酵,還是過了保存期限被丟棄

過了幾個月之後,該客戶的另一個Scrum團隊的ScrumMaster跟Teddy提起product backlog refinement workshop的問題。在他們這個專案中,每次product backlog refinement workshop所遺留下來無法被排入下個sprint的story已經越來越多,所以他們準備試看看把product backlog refinement workshop和sprint planning part 1合併,看看能不能改善這個問題。

***

請問:

  • 原本團隊決定在sprint進行中間舉辦product backlog refinement workshop有錯嗎?
  • 另一位ScrumMaster是否表現得比較好,因為他促使團隊決定嘗試改變product backlog refinement workshop進行的方式?

Teddy覺得兩個團隊對於product backlog refinement workshop有不同的反應實屬正常現象,並不是「對或錯」的問題,而是他們所屬的context不一樣,面對的問題也不同,自然有不同解決方法。團隊一有比較多需要與協力廠商配合的story,所以在sprint進行中間舉辦product backlog refinement workshop協助他們處理些這外部相依性的問題。而且團隊一的product backlog相對來說比較穩定,因此他們在product backlog refinement workshop所規劃的story,大部分都會被排入到下個sprint,沒有被排入而累積在product backlog裡面的情況並不嚴重(至少團隊的感覺是如此)。

而團隊二的專案比較少外部相依性,所以原本在sprint中間舉辦product backlog refinement workshop的好處就減少很多,而這種「up-front design」雖然很輕微(不是big up-front design),但累積久了也是很可觀的時間花費。

***

Scrum不是一成不變的靜態活動,書上或是其他公司的做法可以參考,但照抄這些做法不加以思考,又可能變成〈貨物崇拜〉,飛機是不會因此而降落的。

***

友藏內心獨白:乾脆自己成立航空公司好了,愛在哪降落,就在哪降落。

2015年8月27日 星期四

如何套用設計模式?

August 25 16:31~17:43

螢幕截圖 2015-08-25 17.36.41

 

關於design pattern(設計模式),Teddy最常被問的一個問題就是:「如何套用pattern?」或是「我怎麼知道pattern有沒有套對?」其實這個問題的答案很簡單:

  1. 如果不套pattern就可以解決問題,那就不要套pattern。
  2. 如果某個問題一定要套用pattern,套完之後請留意resulting context。如果這個resulting context你可以接受,問題解到這裡就可以告一段落。如果不能接受,有兩個可能性:
    • 套錯pattern:選用了錯誤的答案來解決問題,請選擇另一個pattern再試一次。
    • 再套另一個pattern:原本套用的pattern留了一些force沒有解決,或是產生了新的force。此時可考慮套用另一個pattern來處理這些遺留的force。如果選擇套用另一個pattern,則原先pattern的resulting context就變成下一個pattern的context

***

聽起來有點抽象,沒關係,請看一個剛出爐熱騰騰的例子。上週末Teddy到台中上「Design Patterns這樣學就會了–入門實作班」,第二天吃下午茶的時候,看到餐具Teddy嚇了一跳,誰那麼有創意,把塑膠湯匙插入喝珍珠奶茶的粗吸管裡面?

螢幕截圖 2015-08-25 16.58.20

 

Context:綠豆薏仁湯裝在500 C C的飲料杯中。

Problem:如何吃到綠豆薏仁湯?

Solution用嘴巴吃 用塑膠湯匙將綠豆薏仁湯舀出。

Resulting Context

  • 使用塑膠湯匙可以順利舀起綠豆薏仁湯食用。
  • 杯身太高,手很容易碰觸到杯子內緣而變的黏黏的。

***

很顯然「塑膠湯匙」這個pattern沒有把問題解的很漂亮。如果鄉民們知道有另一個pattern叫做「長柄湯匙」,也許可以嘗試改套用其他pattern。由於店家沒有「長柄湯匙」這個pattern,於是套用「粗吸管」這個pattern,來解決「手很容易碰觸到杯子內緣」這個衍生的問題。

Context:你用塑膠湯匙舀起放在 500 C C 影料杯的綠豆薏仁湯,但杯身太高導致你的手碰觸到杯子內緣而變的黏黏的。

Problem:如何避免手變的黏黏的?

Solution:將塑膠湯匙尾端插入粗吸管,固定後拿著粗吸管使用塑膠湯匙將綠豆薏仁湯舀出,便可讓手不碰觸到杯子內緣。

Resulting Context

  • 道具看起來很特別。
  • 可以順利吃到綠豆薏仁湯。
  • 使用兩種餐具,有不環保的嫌疑。

***

使用pattern解決問題的流程就是那麼簡單。看到這裡鄉民們可能會說:「我聽你在放風箏,真實生活中軟體設計的問題哪有那麼簡單就解了!」的確,還有一件難的事情Teddy還沒說,就是「採用這種方式解決問題,你必須要知道足夠多的pattern,才有可能針對不同的狀況套用不同的pattern。」這麼多pattern怎麼學?了解Alexander對於設計的看法,以及pattern六大基本元素之後,學習新的pattern會容易許多。

***

友藏內心獨白:真佩服台中飲料店的智慧啊。

2015年8月26日 星期三

讓它自然發生

August 25 09:29~10:48

螢幕截圖 2015-08-25 10.38.18

 

有一位上過「Design Patterns這樣學就會了入門實做班」的學員在七月份聽完Teddy在 C. C. Agile分享的「了解模式讓你更敏捷」之後告訴Teddy :「看影片比入門班看照片練習的效果要好很多」。謝謝學員的回饋意見,這句話一直在Teddy腦中盤旋不去,刺激Teddy思考要怎樣才能夠讓學員透過練習活動更容易理解pattern的六大元素呢?

在七月份的時候入門班課程Teddy已經教過13次,課程的內容也改過好幾次。光是pattern寫作練習的題目,就換過「忠孝新生捷運站」、「便利商點集點活動」、「敏捷工作空間(agile working space)」。在準備「了解模式讓你更敏捷」這個題目之前,Teddy從來也沒想過可以透過看一個短片的方式來解釋pattern的六大元素。最近因為在Facebook上偶然看到有人貼了一小段日劇「王牌大律師」的影片,看完之後除了大笑以外,突然有種「耶,就是它了」的感覺,可以用這段影片完美的解釋pattern的六大元素。經過七月份台北與台中場的兩次分享活動,看影片(重點是要選對素材)的效果的確比看照片要來的好很多。

在這之前Teddy也曾多次苦思要如何改善原本練習題目呈現的方式,但卻想不出比原有做法更好的解法。有時候「創意」就是這麼奇妙,也許發現問題的當下沒有答案,但經過一段醞釀的時間,在時機成熟的時候,答案就自己跑出來。難的地方在於,你不知道這段醞釀期有多長,也不知道醞釀後的成品是什麼。但無論如何,總是要先發現問題,才有醞釀答案的空間與時間。

***

上個週末Teddy到台中上第十四次「Design Patterns這樣學就會了入門實做班」,出發前一天早上想著有沒有可能把原本的練習題目換掉。「王牌大律師」的短片很好,但是這次上課的學員有不少人已經在七月份台中場的活動中看過這個影片,再播同一個影片就不好玩了。想著、想著,突然靈機一動,在YouTube上找了幾段國外介紹「agile working space」的影片,從中選了一段當作練習題目。這個影片雖然沒有「王牌大律師」那麼好笑,但卻具備多重效果。除了可以解釋pattern六大元素,還可以說明pattern language,算是了了Teddy多年前的心願。

話說第一次上「Design Patterns入門實作班」的時候,課程內容包含pattern language的介紹。但那次介紹pattern language講的很失敗(下跪謝罪...Orz),後來決定將pattern language從教材中拿掉,把焦點放在pattern的六大元素,讓入門班更聚焦一點。但近三年來Teddy一直在想,有沒有什麼簡單易懂的方法可以讓大家知道「pattern language」,過了三年,在上禮拜終於找到一種可能的方法。

***

Teddy現在的工作內容,講噁心一點,也算是「知識產業」。在資訊時代,獲取知識的途徑那麼多,憑什麼別人要花錢來接受你傳遞的知識?Teddy一直相信Kent Beck的觀點:「厲害的人不是自己很強然後獨善其身。而是能幫助別人,使別人原本認為很難的事情,在他的幫助之下變得很簡單。」這就是泰迪軟體想要培養的競爭力。

但是,這種競爭力要怎麼培養?有公式嗎?有捷徑嗎?還真的沒有。只能營造一個環境,讓它自然發生。建築師Alexander說:「It is a process which brings order out of nothing but ourselves; it cannot be attained, but it will happen of its own accord, if we will only let it.」日本作家植西聰也說 :「努力追求自己的夢想或志向,自然會有人欣賞我們『努力求生』的模樣。」

***

友藏內心獨白:怎麼搞得好像在釀酒一樣。

2015年8月25日 星期二

養貓之後

August 13 12:11~13:45

螢幕截圖 2015-08-13 12.49.20

▲Eiffel:你看不到我

 

今年初養了Eiffel之後,突然對幾個以前常聽到的名詞有著不同的體驗,例如:

躲貓貓

躲貓貓,又稱為捉迷藏,官兵捉強盜,是很多人小時候最喜歡玩的遊戲之一。剛把Eiffel領養回家的時候,為了讓她熟悉環境,先把她放在家裡平常很少使用的和室。說也奇怪,這麼小的一個空間,怎麼有時候要找她卻找不到,到底躲到哪裡去了?

過了幾個禮拜Eiffel漸漸熟悉環境,膽子也變大了起來,開始離開和室往家裡其他地方探險。這下子更好玩了,可以躲的地方更多。曾經有過到處都找不到的經驗,一度懷疑她是否已經成功「越獄(逃家)」了 XD。

突然覺得「躲貓貓」這三個字實在是用的太巧妙了,大概只有養貓的人才可以體會那種家裡存在「異次元」空間的感覺。

***

我的作業被貓吃了

以前念書的時候,有同學沒交作業,有的老師會開玩笑說:「難道你的作業被貓吃了?」當時Teddy心裡在想:「貓是肉食性動物,幹嘛吃紙啊?」一直覺得這只是一句無厘頭的玩笑話。

隨著Eiffel漸漸長大,發現Eiffel還挺喜歡咬東咬西的,紙類是她的最愛之一。有一天回家發現書桌旁的期中考考卷有好幾張被她咬掉了一角,還好這是上學期的考卷,不然就要告訴同學:「你的期中考考卷被貓吃了 。」以後如果有同學以「我的作業被貓吃了」為理由而缺交作業,Teddy一定會相信這絕對不是藉口。

▼Eiffel:這個東西白白的看起來不錯吃的樣子。

螢幕截圖 2015-08-13 13.11.49

***

毛孩子

貓跟狗都被暱稱為毛孩子或毛小孩,Teddy以為是因為他們的毛都很多的原因。剛養Eiffel的時候,她大概4~5月大,那時候沒有覺得她很會掉毛。幾個月前Eiffel開始掉毛,天啊,那種掉毛的程度,真的是怎麼掃也掃不完。Teddy小時候養過狗,狗也是很會掉毛,不過那已經是N年前的往事,記憶有點淡了。經過這次掉毛事件,對於「毛孩子」有另一層的體驗—「掉毛的孩子」。

▼每天梳不完也打掃不完的毛,對於「都是你的毛」這句話有深刻體悟…Orz。

螢幕截圖 2015-08-13 13.48.05

***

很多時候你以為從書上讀過「躲貓貓」的介紹,但對於「躲貓貓」你很可能只是一知半解。你說讀過養貓的書,請問讀過幾本?讀過之後,養過幾隻貓?養了幾年?每次養貓有沒有累積之前的經驗並持續改善養貓的方法?對於各種不同性格的貓,是否有加以分析並理解形成這種性格的背景(context)與造成這種現象的作用力(force)?如果都有,這樣的經歷是否已經達到一萬小時的練習?

相信大家都聽過這樣的說法:「滿的杯子是裝不了水的。」如果不先把水倒掉一些,何必又跑去飲水機裝水呢?

***

友藏內心獨白:「不知道你不知道」,比「不知道」更可怕。