l

2013年5月24日 星期五

GoF的23個Design Patterns要學幾個(2)?

May 23 16:48~17:50

image

 

沒想到這個主題會出現第二集,第一集的內容在這裡,有興趣的鄉民可以複習一下。在寫了第一集之後,Teddy開了三次「Design Patterns這樣學就會了:入門實作班」以及一次「Design Patterns這樣學就會了:進階實作」,對於這個問題體會又有些不同。

基本上,可以從兩個角度來思考:

  • 有多少資源:如果你只願意投資10小時的時間來學設計模式,那麼可能了解一下Observer、Factory Method、Command的內涵就差不多了。如果你有50小時,又有熟悉設計模式的人可以教你,那麼把GoF的23個設計模式都練習過一次應該是綽綽有餘了。
  • 想成為什麼樣的人:如果你立志當一位「傳統」的開發人員,那麼也許可以完全都不知道設計模式。如果你想當technical leader或是軟體架構師,那麼多學一些設計模式絕對是有好無壞。

***

有些人會認為,GoF的23個設計模式有些使用的時機並不多,有些因為太常用了,已經變成許多程式語言內建的一部分,例如Java有支援Observer、Prototype、Iterator、Proxy。對於這種太偏門或是太常用的設計模式,其實沒必要特別去學習。但是最近的兩次經驗,卻讓Teddy更堅信在第一集所下的結論依然成立:「有機會的話最好是每個都學。當然,學了不一定會用到,但是沒學,幾乎可以肯定用不到」。

經驗一

話說有一位來上過Teddy「Design Patterns這樣學就會了:入門實作班」與「Design Patterns這樣學就會了:進階實作」的學員,有一天告訴Teddy,他原本覺得Iterator不太會用到,因為Java的collection物件都已經支援這個設計模式,他自己也不會去開發新的collection物件。但當他在課堂上實作了Iterator之後,才赫然發現原本他工作中的某個模組,可以套用Iterator減低程式的複雜度,也可以讓客戶端的程式更容易使用他這個模組。

後來他花了一些時間把系統重構,實作了Iterator這個模式。

***

經驗二

有一次在上「Design Patterns這樣學就會了:入門實作班」的時候,講到Composite模式,有一個學員就問Teddy,他們公司的組織表可以套用Composite模式,但是他一直都有一個困擾,就是他們經常需要用不同的方式來瀏覽組織表,並且根據特殊的條件來產生不同的統計資料。這個問題怎麼用Composite模式解決?

這位學員的問題聽起來應該無法直接用Composite模式解決,一種可能的方法是套用Visitor模式,將這些特殊且經常修改的條件寫成個別的Visitor。不過因為當時上的是「入門班」,而Visitor是在「進階班」才會教到,所以當時Teddy也只能建議這位學員回去自己讀挑眉質疑

***

其實Teddy發現很多程式設計師的桌上,都有設計模式的書,雖然不一定是GoF這一本。加減看總有一天功力會變強。

***

友藏內心獨白:花錢來上Teddy的課最快熱戀

2013年5月23日 星期四

改行寫網路小說算了(10)

May 22 18:00~19:01

image

要先從哪一隻殺起哩…挑眉質疑

***

九品工程師:上次「滷肉飯味道太淡」的issue在我們改完程式之後QA有回報什麼問題嗎?

差役甲:沒有啊,QA已經把這個issue給close了,反正又沒有自動化測試案例…不是啦,我的意思是說,大陸那邊的QA吃了新版的滷肉飯之後,發現味道真的有比上一版的還要來的鹹,也沒有拿台灣版的滷肉飯交互比對(因為也拿不到…XD),就把這個issue給結案了。

差役乙:可是我們這種改法,萬一以後有人發現兩岸的滷肉飯味道不一致怎麼辦?

差役丙:如果QA不爽的話可以再report一個新的issue啊,誰怕誰啊。

九品工程師:其實各位不用擔心,這個問題我早就想好了。到時候我們可以說,因為兩岸的口味不同,因此我們的「雲端殺豬系統」配備了「多國語言之非同步巨量資料在地化智慧型使用者經驗全自動語音3D高清口味辨識調整功能」,因此味道會有些微的差異。這不是bug,這是我們的功能!

差役乙:這樣真的可以唬弄過去嗎?如果可以的話為什麼一開始不用這樣方法?

九品工程師:一開始因為各種奇怪的歷史因素QA還有其他豬頭長官們已經認定「中國雲端殺豬系統所製作的滷肉飯味道太淡」,這時候去跟他們說「此為正常現象,請安心服用」無法改變他們根深地固的想法。但是我們把味道搞鹹了之後,他們很快就會忘記這個問題。之後如果有人回報「兩岸滷肉飯味道不一致」,就變成了一個全新的issue。這時候只要我們馬上搬出「多國語言之非同步巨量資料在地化智慧型使用者經驗全自動語音3D高清口味辨識調整功能」的說法,就可以交代過去。

差役甲:所以我們解這個bug的方式,就是先讓bug A照射強烈月光,讓它變身為bug B。這時候都還沒有人發現bug B的存在,讓我們成功為自己爭取到一段和平的時光。過一陣子之後,萬一不幸有人發現bug B,我們就說這其實是我們的功能,不是bug,這樣就OK了。

差役乙:漂亮,就是這樣。這一招江湖上人稱「把bug打到連它媽媽都認不出來之乾坤大挪移」。

九品工程師:如果有選擇,我們也不想這樣搞啊。醬油太淡不從原物料去解決,卻要我們改軟體,沒有這些英明的「豬管」們,怎麼會有我們發揮強韌生命力的機會。

***

差役丙:我突然想到一個問題,當初公司幹嘛開發「雲端殺豬系統」啊,為什麼會有人想開發一個系統把自己的同類給殺掉呢?挑眉質疑

九品工程師:不能說,說出來會動搖國本。

差役甲:其實我們公司高層對同類還是很有同情心的,這也是為什麼我們的「雲端殺豬系統」遲遲不肯上市的原因。真的是佛心來著。

***

不能說的秘密,卻是大家都知道的事實。

***

友藏內心獨白:本是同根生,相殺何太急啊。

2013年5月22日 星期三

Scrum團隊不是要互相分工合作嗎?

May 20 19:18~19:59

image

 

有一位剛導入Scrum的朋友告訴Teddy,說他對於Scrum很失望。

Teddy:為什麼?

朋友:因為Scrum的書上有寫,導入Scrum要組織cross-functional team(跨職能團隊),團隊中的每個人都可以自由認領工作。

Teddy:是啊…理論上是這樣子目瞪口呆

朋友:可是我們現在的工作認領,和導入Scrum之前的差異不大,每個人都還是各做各的。

Teddy:那你認為為什麼會有這個現象?

朋友:因為我們對於彼此的工作都不熟悉,而目前大家手邊的事情都很多,ScrumMaster也沒有安排讓我們可以自由去認領其他人工作的機會啊。

Teddy:首先,工作認領這件事並不是由ScrumMaster來安排的。其次,由於你們才剛開始採用Scrum,因此一開始主要的目標是讓整個Scrum團隊,包含Product Owner、ScrumMaster、Developer可以熟悉在Scrum框架下彼此互相合作的模式。在這個過程中每個人都有很多事情需要學習,例如:

  • Product Owner要學習如何將需求寫成story、如何寫出大小合適、彼此之間儘量獨立的story、如何平衡bug修正與開發新功能之間的資源競爭、如何規劃與釐清每一個功能的操作流程或是使用者經驗等問題。
  • ScrumMaster首先要想辦法讓團隊成員熟悉Scrum的每個例行活動與產出物、培養觀察潛在問題的能力、協助團隊排除阻礙。
  • Developer要學會Product Owner溝通、彼此之間的溝通、自我管理個工作模式、學習要如何關注產品的品質等。

Teddy:組織「跨職能團隊」是一個目標,這個目標不會因為團隊採用Scrum就自動達成。Scrum是一面「照妖鏡」,剛開始採用Scrum的時候會將組織與團隊心目中「理想Scrum」之間的落差顯示出來。至於要如何邁向團隊心目中理想的Scrum境界,則需要時間來逐步實現。

朋友:那我要等到哪一天團隊才會開始邁向跨職能團隊的目標呢?

Teddy:如果你認為現階段組織職能團隊這件事對於團隊非常重要,你可以嘗試在retrospective meeting(自省會議)中提出來,聽聽其他團隊成員的想法。如果獲得其他團隊成員的認同,可以將此列為團隊流程改善的優先執行工作。

***

照妖鏡只能幫你分辨誰是妖怪,要打怪還是需要先練就一身武功啊。

***

友藏內心獨白:Scrum新成,鳥事如麻,團隊詳加計劃,重學做事方法。

2013年5月21日 星期二

299的《例外處理設計與重構》電子書,你會買嗎?

May 20 21:23~22:08

螢幕快照 2013-05-20 下午10.05.07

前一陣子讀了《精實執行-精實創業指南(第二版) (Running Lean: Iterate from Plan A to a Plan That Works, 2/e)》,書中作者Ash Maurya提到出版該書的經驗。Ash先在部落格上寫文章,累積到一定的數量之後,有許多鄉民來信建議Ash可以把文章集結出書。為了驗證出書的想法是否真的有市場,還是僅止於少數鄉民的願望,Ash先在網路上發表這本書的目錄,對外宣告要「預售」這本書的第一版(電子檔),然後以「每兩週寫好一章」的速度,把書(電子檔)逐次寄給預購者。

在發行第一版之後,Ash得到許多讀者的回饋,後來改版出了第二版(紙本)。原先第一版的讀者,也就成為第二版的基本客源(感覺好像賺兩次錢XD)。

***

Teddy目前在計畫準備寫兩本書,一本是《設計模式的逆襲》,另一本是《例外處理設計與重構》。《設計模式的逆襲》這一本書內容有點多,以Teddy目前手邊的工作量,樂觀估算至少也需要1~1.5年的時間才有可能寫完。《例外處理設計與重構》是Teddy博士論文的題目(Teddy的論文題目不是很理論的哪種,一般鄉民應該都看得懂熱戀),素材準備比較容易。目前Teddy已經準備了一份約180頁左右的草稿(主要從搞笑談軟工部落格文章挑選出來,但尚未進行編修)。

扯了這麼多,Teddy想要做一個實驗,效法Ash在網路上預售《例外處理設計與重構》這本書的電子檔,定價299,預購者每兩周可以拿到4篇書中的文章,預計6~8個月後可以拿到本書的全部章節(最少包含48篇文章)。

以下是目前Teddy完成的草稿目錄:

致謝    5
第一部 例外處理設計的現況    6
1 例外處理之必要性    8
2 例外處理之錯誤訊息描述:HTC ONE X拍照篇    12
3 RELIABILITY可以是一門生意    16
第二部 例外處理基本觀念    19
4 FAULT、ERROR、FAILURE、EXCEPTION    20
5 CORRECTNESS AND ROBUSTNESS    25
6 例外處理機制    28
7 EXCEPTION SAFETY    29
8 例外處理PK容錯設計    30
9 EXCEPTION HANDLING 必看 PAPER (1)    31
第三部 JAVA語言的例外處理機制    35
10 CHECKED OR UNCHECKED EXCEPTIONS (1)    36
11 CHECKED OR UNCHECKED EXCEPTIONS (2)    41
12 CHECKED OR UNCHECKED EXCEPTIONS (3)    46
13 CHECKED OR UNCHECKED EXCEPTIONS (4A)    51
14 CHECKED OR UNCHECKED EXCEPTIONS (4B)    55
15 CHECKED OR UNCHECKED EXCEPTIONS (5)    58
第四部 為什麼例外處理那麼難    61
16 用途觀點    62
17 設計觀點    66
18 處理觀點    69
19 工具支援觀點    73
20 流程觀點    76
第五部 強健度等級    80
第六部 壞味道與重構(敏捷例外處理設計)    81
21 敏捷式例外處理設計的第一步:決定例外處理等級    82
22 我到底哪裡做錯之 DUMMY HANDLER    88
23 我到底哪裡做錯之 IGNORED CHECKED EXCEPTION    91
24 我到底哪裡做錯之 NESTED TRY BLOCK    94
25 SPARE HANDLER    99
26 「終止」或「繼續」    104
27 這是你的問題,不是我的問題    109
28 VMWARE越獄之ALTERNATIVE METHOD    114
29 FINALLY CLAUSE 小叮嚀    119
30 自動化更新    122
31 讀CLEAN CODE有感:例外處理程式重構篇    126
32 用 ROBUSTNESS STORIES 評估 SYNCFREE 有多強壯    136
第七部 範例練習    139

Teddy想要調查一下,請有意願預購的鄉民在本篇下方留個言(可用匿名,只是意願調查),好讓Teddy評估一下是否要提高這件工作的重要性。感恩。

***

友藏內心獨白:Running software變成running books挑眉質疑

2013年5月20日 星期一

改行寫網路小說算了(9)

May 19 22:21~23:34

image

 

聖上:上次議到將「行動殺雞系統」移植上雲端的事情,愛卿們辦得如何啊?

行銷總監:啟奏聖上,這件事情在奴才全力監督與協助之下,已經辦妥了。

聖上:喔,很好、很好,愛卿辦事朕放心。那「雲端殺豬系統」可以準備上市了吧?

行銷總監:啟奏聖上,關於這一點,目前還有一個軟體的issue工程師還沒有辦法解決,所以要等工程師解了這個問題之後才可以上市。

聖上:什麼問題這麼嚴重?

行銷總監:就是我們安裝在中國的「雲端殺豬系統」所製作出來的滷肉飯,味道總是太淡了一點。我們的測試工程師在6個月前就已經回報這個bug了,但是軟體部門的人一直無法解決。

聖上:大膽,一個問題居然拖了6個月都沒解決。

行銷總監:是啊,這個軟體部門的人的確是應該要再努力一下。

九品工程師:啟奏聖上,這個問題我們已經追了很久,但是我們安裝在台灣的「雲端殺豬系統」並不會有這個問題。兩岸安裝的是同一套軟體系統,在中國會出現這個問題我們也覺得很奇怪。我們多次申請要去中國實地考察,但是因為旅費的關係都被駁回了,所以…。

產品經理:唉呀,我說九品工程師啊,你就不要再找藉口了,明明就是你們的系統有問題,bug解不了還在那邊怪東怪西的。

聖上:九品工程師聽旨,朕再給你五天的時間,如果五天後這個問題再解決不了,就提頭來見。就這樣,退朝。

(眾人)吾皇萬歲、萬歲、萬萬歲。

***

九品工程師:今日早朝聖上限我們五日之內要把中國「雲端殺豬系統」所製作的滷肉飯味道太淡的問題找出來,各位說這要如何是好啊?

差役甲:我已經跟QA反應過很多次了,味道太淡又不是我們的問題,是硬體…不對,我的意思是說,應該是材料使用的問題。但是QA就是死腦筋,怎麼講都講不通,死咬著是我們軟體有問題。

九品工程師:這我也知道,但是上頭不管,就是要逼我們把問題給解了。

差役乙:如果我們懷疑材料有問題,可以把進貨單跟食譜調出來查一下,看看是哪個環節有問題嗎?

九品工程師:可是我們部門的權限不夠,無法讀取進貨單跟食譜的資料啊。

差役丙:這我倒是有一個辦法,我跟採購部門的Nina有一腿…,我的意思是說我常用「雲端殺豬系統」幫她滷雞腿,交情還不錯,我可以請他幫我們把進貨單跟食譜的資料調出來看一下。

九品工程師:好吧,也能能先這樣了。但速度要快一點,我們只有五天的時間。

***

(三天後)

差役丙:我看到進貨單跟食譜的資料了,上面有一筆change request的資料,上面提到,因為cost down的策略,在中國製作滷肉飯所採用的醬油,改用了「相容廠商」的產品,和台灣所使用的醬油不是同一個品牌。我透過管道從「逃跑網」訂了一瓶,已經送到台灣了。這個副牌的醬油味道的確是有問題,比標準的醬油要淡了30%。

九品工程師:太好了,明日早朝我就立刻向聖上稟報此事。

***

聖上:各位愛卿,有事上奏,無事退朝。

九品工程師:啟奏聖上,關於中國版本的「雲端殺豬系統」所製作出來的滷肉飯味道太淡一事,微臣已經調查出結果了。

聖上:是何原因,速速報來。

九品工程師:因為採購大臣在中國所採買的醬油,濃度比標準的要淡了30%,所以會有味道太淡的問題。

採購大臣:啟奏聖上,臣完全是依據聖上所頒布的「cost down聖旨」辦事。雖然中國的醬油味道淡了30%,但是成本卻只要標準的一半,所以還是幫公司省了不少錢。而且奴才好不容易從競爭對手的手中搶下貨源,一口氣買了10年份的醬油(也順便幫自己賣了一棟房子),公司未來10年都不需要擔心醬油缺料的問題了。

聖上:嗯,愛卿辛苦了。

九品工程師:聖上,原料與規格不符,這明顯是採購大臣有問題啊。

產品經理:唉呀,我說九品工程師啊,採購大臣可是幫公司省了一大筆錢啊。現在既然已經找到軟體的問題,你們就把程式改一改不就好了嗎,反正改程式又花不了什麼時間。

聖上:好了、好了,九品工程師你們部門的人就去把這個軟體的bug解掉,這次朕就不降罪於你。就這樣了,退朝。

(眾人)吾皇萬歲、萬歲、萬萬歲。

***

九品工程師:要我改「軟體的bug」是嗎…好啊,我來改…

public double 傳回醬油用量(double 豬肉重量) {

double result = 豬肉重量 * 標準醬油用量;

if (“中國”.equals(local)) {

      result = result  * 2;

}

return result;

}

***

友藏內心獨白:他水母的,醬油太淡也算是軟體的bug,這哪招惱怒

2013年5月19日 星期日

2013馬祖考察之旅Day1-F戰爭和平紀念公園(下)

May 09 21:51~22:05

接著騎車走一小段來到另一個景點,這裡展示著幾台廢棄的戰車。

螢幕快照 2013-05-09 下午9.23.48

螢幕快照 2013-05-09 下午9.23.30

螢幕快照 2013-05-09 下午9.24.14

螢幕快照 2013-05-09 下午9.24.23

 

地下還有一個碉堡,稱為06據點。

螢幕快照 2013-05-09 下午9.46.54

螢幕快照 2013-05-09 下午9.42.52

螢幕快照 2013-05-09 下午9.42.41

螢幕快照 2013-05-09 下午11.25.47

螢幕快照 2013-05-09 下午11.26.25

螢幕快照 2013-05-09 下午9.43.21

 

入內一看真的很佩服當年徒手挖這些碉堡的阿兵哥們。

螢幕快照 2013-05-09 下午9.46.44

螢幕快照 2013-05-09 下午9.44.08

 

 

沒有彈藥的彈藥庫。

螢幕快照 2013-05-09 下午9.43.31

 

不過主砲堡還真的有一門砲耶。

螢幕快照 2013-05-09 下午9.43.42

螢幕快照 2013-05-09 下午9.45.43

螢幕快照 2013-05-09 下午9.43.47

 

只有連長跟輔導長有專屬的個人房間。

螢幕快照 2013-05-09 下午9.45.25

 

朝海面的機槍堡。

螢幕快照 2013-05-09 下午9.45.54

螢幕快照 2013-05-09 下午9.45.48

副砲堡也有一門砲。

螢幕快照 2013-05-09 下午9.46.21

 

牆上有射擊口訣。

螢幕快照 2013-05-09 下午9.46.06

螢幕快照 2013-05-09 下午9.46.13

還有口號,反攻大陸,解救同胞。

螢幕快照 2013-05-09 下午9.46.36

 

碉堡也有開放時間,08:30~17:00。

螢幕快照 2013-05-09 下午9.45.03

***

下午4:20分,整個戰爭和平紀念公園逛得差不多了,好像已經把北竿重要的景點都逛過一次。要準備回到北竿機場附近買晚餐回民宿休息了。

***

友藏內心獨白:馬祖的坑道和碉堡是一大買點。

2013年5月18日 星期六

2013馬祖考察之旅Day1-E戰爭和平紀念公園(上)

May 09 21:16~21:41

吃完午飯之後來到戰爭和平紀念公園,這裡的地形還滿特別的,請看下面地圖便知。

螢幕快照 2013-05-09 下午9.17.36

螢幕快照 2013-05-09 下午9.17.04

螢幕快照 2013-05-09 下午9.17.17

公園內有一個紀念館,先到館內參觀一下。館內成列很多馬祖戰地物品,有軍械、子彈、文宣物。

螢幕快照 2013-05-09 下午9.17.48

螢幕快照 2013-05-09 下午9.18.37

螢幕快照 2013-05-09 下午9.18.46

螢幕快照 2013-05-09 下午9.19.16

螢幕快照 2013-05-09 下午9.18.54

螢幕快照 2013-05-09 下午9.19.04

螢幕快照 2013-05-09 下午9.19.31

螢幕快照 2013-05-09 下午9.19.39

 

這些是當年空飄的文宣品,據說當年如果撿到對岸的文宣品,一張可以換一毛錢。

螢幕快照 2013-05-09 下午9.19.46

螢幕快照 2013-05-09 下午9.19.53

螢幕快照 2013-05-09 下午9.20.00

 

紀念館的屋頂是個觀景平台,如果有賣咖啡該多好啊熱戀

螢幕快照 2013-05-09 下午9.20.41

 

北竿機場就在不遠處。

螢幕快照 2013-05-09 下午11.21.46

螢幕快照 2013-05-09 下午11.02.24

螢幕快照 2013-05-09 下午11.21.24

***

離開紀念館繼續往前走一小段,可以看到 趙金人 非常驚人的步道,感覺起來根本是走到海裡面了啊。

螢幕快照 2013-05-09 下午9.21.54

螢幕快照 2013-05-09 下午9.21.02

螢幕快照 2013-05-09 下午9.22.49

螢幕快照 2013-05-09 下午9.22.54

 

鏡頭拉近一看,這一段看起來有點恐怖,當天下著小噢,怕步道太滑,這一段路就沒有走,遠遠的欣賞就好挑眉質疑

螢幕快照 2013-05-09 下午9.23.04

 

海面景色好美,好像來到人間仙境一般。

螢幕快照 2013-05-09 下午9.23.17

***

友藏內心獨白:有個海上孔子的景點沒看到啊,殘念。