l

2010年8月25日 星期三

小朋友不可以說謊喔

August 24 20:36~21:14  Pacific Time (US & Canada).

常常會聽大人對小孩子說『小朋友不可以說謊喔』,以前 Teddy 不覺的這句話有什麼了不起的,最近 Teddy 赫然體會到這句話的真諦。這句話了不起的地方在於加了『小朋友』這三個字,限定了不可以說謊這個要求只適用於『小朋友』。至於大人呢?『善意的謊言』每天都在說。

  • 老闆:『什麼時候才能讓第一個客戶使用我們的產品』。
  • 某高層:『三個月』。
  • 工程師內心獨白:『我怎麼不記得我曾經開發過任何可以用的東西?』。


***
  • 某高層:『我們的宇宙無敵,世界無雙之超級雲端儲存系統已經有客戶在試用了』。
  • 老闆:『很好,很好』。
  • 工程師內心獨白:『你是說上個禮拜進貨的那 50 台硬碟?』。
 ***

  • 老闆:『產品要準備正式 release 了,那我們的 beta 客戶反應如何?』。
  • 某高層:『客戶很喜歡我們的產品』。
  • 工程師內心獨白:『我怎麼不記得有人用過?』。

 ***

這個世界就是這樣,有人敢說,還真的就有人信耶。這種行徑跟詐騙集團好像沒什麼兩樣。

當年老蔣曾經說過:『一年準備,兩年反攻,三年掃蕩,五年成功』。還好蔣先生已經不是小朋友了,還是可以上天堂滴。

 ***

有藏內心獨白:Teddy 的幽默感還在調時差,沒什麼搞笑的 fu。

2010年8月11日 星期三

出差前的購物

August 11 22:51~ 23:50

下個禮拜一晚上 Teddy 即將搭乘長榮航空班機到美國出差。Teddy 在 2004 年九月的時候曾經去過一次美國,目的是去參加研討會(PLoP 2004)。說真的,感覺不是很好。首先到美國要搭 12 個小時的飛機,真的很累。此外,因為 911 之後美國的安檢很嚴格,從辦簽證開始,總覺的每個人都被當成恐怖份子一樣看待(當然你可以說這是為了『大家』的安全)。Teddy 除了長相恐怖以外,對老美的國土應該是沒有任何安全的威脅。入境日本也是要掃描雙手食指和拍一張大頭照,但是感覺就完全不同,不會覺的有種被歧視的感覺(更不用說現在到日本不用辦簽證,而且離台灣又近,爽度大大提高)。自從 04 年到美國之後,Teddy 就完全不會想再去一次。這次實在是千百個不願意,為了一口飯只好『不欣然接受』了。

既然非去不可,只好想辦法提高此行的剩餘價值。如何提高?當然只有購物一途啦。不知到為什麼,很多電子產品在台灣的售價比美國都貴好幾千塊台幣,真是沒天良。台灣平均國民所得明明只有美國的 1/3 ,買個電子產品還比人家貴,難怪會有那麼多人想盡辦法想去當美國人或是美國人的老爸,老媽,阿公,阿媽... XD。


這都不是重點,本集的重點是 Teddy 要買什麼東西。之前 Teddy 一直想買 Panasonic  DMC-ZS7,PxHome 上面售價 14980 (送SD 8G記憶卡+原廠相機包+小腳架+讀卡機+清潔組+保護貼)。客官們,這一台在 Amazon 上面只要 308.98 USD 約等於 9850 NTD。就算把 PxHome 的贈品金額加進去,應該不會超過 12000 吧,硬是比台灣便宜了 3000 左右耶 。

正當 Teddy  準備下好離手前,突然看到 SONY HX5V 這一台號稱 2010 年數位相機消費型機種的機王,PxHome 上居然只要 11980 還送原廠鋰電池+原廠雅緻手腕帶 。這一台在 Amazon 上面價錢就很硬了,要 345.35 USD 約等於 11010 NTD。哇,終於等到在台灣比美國要划算的 Sony 數位相機了,不過別高興的太早,這麼好的東西早就被買光光了。這種看得到,吃不到的感覺,真是只能用『搥心肝』來形容。更令 Teddy 痛心的是,某學弟居然自己搶到了一台,還告訴 Teddy 『這台好用喔』。這種好康也沒提早通知一下,真是枉費 Teddy 平日的諄諄教誨 (學弟內心獨白:其實早就不爽你很久了...XD)。

以下是 Teddy 最後在 Amazon 買的東西,結果還是只買了『書』(Apple iPod nano 16 GB 是 Kay 要用的)。算一算,要大老遠扛回這幾本,大概也只省了 1500 塊台幣而已。看來到時候只能去美國的 COSCO 多買一些維他命補回來了。

***

Shipping Method:         FREE Super Saver Shipping
Shipping Preference:   Group my items into as few shipments as possible
Subtotal of Items:        $381.15
Shipping & Handling:    $12.51
Super Saver Discount: -$12.51  (美國國內不用運費,好棒喔)
 ------
Total for this Order:       $381.15
  • "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))" Jez Humble; Hardcover; $39.99
  • "Agile Game Development with Scrum (Addison-Wesley Signature Series (Cohn))" Clinton Keith; Paperback; $32.57
  • "Scrumban - Essays on Kanban Systems for Lean Software Development" Corey Ladas; Paperback; $19.97
  • "Lean Thinking: Banish Waste and Create Wealth in Your Corporation, Revised and Updated" James P. Womack; Hardcover; $19.80
  • "Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing" Gojko Adzic; Paperback; $27.38
  • "Kanban" David J Anderson; Paperback; $44.
  • "The Principles of Product Development Flow: Second Generation Lean Product Development" Donald G. Reinertsen; Hardcover; $39.95
  • "Apple iPod nano 16 GB Orange (5th Generation) NEWEST MODEL" Electronics; $156.54

***

台灣明啊明離日本比較近,電子產品又都是是中國生產的,在台灣的售價就是比人家貴。

到底是被誰賺走的?

***

友藏內心獨白:趕快支持台灣成為美國的一州吧,至少買東西便宜一點。不過,我們要,別人還不收勒。

2010年8月10日 星期二

Finally clause 小叮嚀

August 09 23:08 ~ August 10 00:06

前幾天學弟問了 Teddy 幾個 exception handling 的問題,在回答問題的過程中,Teddy 突然想到一個問題:

為什麼 Java 與 C# 都建議在 finally clause 中不要丟出 exception?

路人甲內心獨白:蝦米,有這款ㄟ代誌,奈嚨沒人通知我?

請鄉民們先花三分鐘想一下這個問題再繼續看下去。




喂,還沒三分鐘不要偷看。


請參考以下從 Java Programming Language, 4th 這本書所節錄的程式片段。



 先複習一下 Java 的 try block 用法,一個 try block 包含三個結構:
  • try clause: 放正常程式碼的地方,這裡面的程式碼有可能會丟出 exceptions,如果想要處理例外情況,則需要用 try clause 包起然後在 catch clause 中捕捉與進一步處理。
  • catch clause: 捕捉與處理例外的地方,也就是一般所謂的 exception handler (例外處理程式) 就是寫在這裡。實務上,大部分的人都不知道例外要如何處理,所以常常會發現 catch clause 的實做出現所謂的 dummy handler 這個 bad smell (參考 這裡)。另一種常見的處理方法就是將捕捉到的例外轉成另一個型態的例外,然後回報給 caller。這種作法所丟出的例外通常屬於 failure exception,也就是說這個例外用以表示該 method 的執行是失敗的。當 caller 收到一個 failure exception 時,可以依據實際情況進一步決定要如何處理(路人甲:這句有講等於沒講)。嗯嗯,請不懂的鄉民們去拜讀一下 這裡面的文章
  • finally clause: 不論 try clause 的執行是否會丟出例外,finally clause 裡面的程式碼一定都會被執行。這裡面通常用來放 cleanup 的程式碼(釋放資源以免發生 memory leak)。
現在假設你寫了一個類似上面 getDataSet () 的程式碼,但是你在 finally clause 裡面(第13 行) 丟出了一個 CleanupException 用以表示釋放資源失敗。

throw new CleanupException();

現在假裝你是使用 getDataSet () 的人,所以你有可能會收到兩個例外,這兩個例外的『語意』分別表示。
  • BadDataSetException: 表示執行 getDataSet () 失敗。
  • CleanupException: 表示 getDataSet () 釋放資源失敗。
但是問題來了,如果這兩個例外先後發生那該怎麼辦?也就是說,程式執行到第5行發生了 IOException,然後控制權跳到第7行,接著執行到第8行丟出BadDataSetException,然後控制權跳到第9行的 finally clause。不幸地,第11行的 in.close() 又丟出 IOException,然後控制權就跳到13行。現在的13行已經被改成剛剛的 throw new CleanupException(); 這個敘述,所以原本的 BadDataSetException 被『蓋台』了,最後被丟出去的變成 CleanupException。也就是說,如果 finally clause 中也丟出例外,那麼當 caller 收到 CleanupException 時,這個 CleanupException 的語意是不清楚的。

為什麼?講到這裡還不知道... 因為此時 CleanupException 可能代表:
  • 單純的釋放資源失敗,或是。
  • 執行 getDataSet () 失敗加上釋放資源失敗 。
***

至於解法呢?嗯嗯,這個案子目前已經進入司法階段,不便對外說明(眾鄉民們大聲吶喊:真欠扁)。話說 Teddy 當年為了解決這個問題還寫了一篇 journal paper,不過後來 paper 被要求要 revise, 但是當時 Teddy 快畢業而且點數也收集夠了,就偷懶沒改,放到現在 paper 都快『生菇 (發霉)』了。算一算當年為了寫這篇 paper 花了應該有幾百個小時在這個問題上面,還拖累 Teddy 的指導教授一起受苦。這算是某種『無病呻吟』的研究題目嗎...XD。

***

友藏內心獨白:就算違反這個規則大家還不是活的好好的,code 照跑,舞照跳。

2010年8月6日 星期五

造船的目的

August 06 22:05~23:23

最近部落格績效不彰,產量銳減。主要原因是 Teddy 白天都在寫軟體使用手冊,寫了一天的文字,腦細胞早就虛脫了,手和肩膀也酸痛不已。回家除了努力保持呼吸與抽空看海綿寶寶之外,那還有精神搞笑。

前天看了洪蘭所寫的『理直氣平:勇於改變才會進步』這本書,書中收錄洪蘭發表在報章雜誌上的小短文,每一篇各自獨立,很符合 agile 精神...XD。這本書講了一堆作人做事的道理,照常理推斷應該是很無聊的書,但是 Teddy 卻覺的十分有趣,也很有勵志效果。

Teddy 今天想談一下這本書第 151 頁的一篇文章:『失敗比不曾試過好』。 這篇文章的大意是說,洪蘭的朋友的兒子,出社會工作還不到 2 年,就決定把工作辭掉自行創業。這位朋友很擔心,因此請洪蘭去找他兒子談一下。朋友的兒子說上班壓力很大,老闆喜怒無常,覺的自己連靈魂都買給老闆了。洪蘭提醒他創業的風險,對方說:『沒有失,哪有得?人總是去闖一下,才不負少年頭』。

最後洪蘭反回頭去勸她的朋友,讓他兒子自己作主並自己承擔後果。相信日後他兒子會告訴他『失敗的感覺還是比不曾試的感覺好,錦衣玉食無法彌補不能做自己的痛苦』。

接下這篇文章最後兩句話是 Teddy 最喜歡的:

『停留在港口的船是最安全的,但那不是造船的目的』

***

Teddy 是在睡覺前讀這本書的,看到上面這句話讓我當天失眠了。每個人從小到大,在父母的期許,社會的壓力,鄉民的七嘴八舌,以及各種莫名其妙的原因逼迫之下,不斷的競爭,到底是為了什麼?

在可以為社會貢獻一點力量之前,這一段『造船』的過程,充滿了考考考,補補補(考試,補習)。有多少人為了那一點點分數,和好朋友反目成仇。為了補習,浪費了生命中多少美好的事物。以前大部分的人可能認為大學畢業就算是完成第一階段的『造船運動』,現在則是『滿街是碩士』,也許不久之後連接電話的總機都有博士文憑。這些都姑且不談,好不容易把船造好之後,這些船都在幹麼?是找一個好的港口,然後停下來混吃等死,還是航向大海去探索未知的世界。

N 年前台灣股市正熱的時候,很多優秀的人才到竹科當『科技新貴』,領了豐厚的股票,穿著無塵衣做著只需要高中或大學程度就可以勝任的事。 現在,想想 Teddy 以及系上畢業的學弟們,學了許多軟體工程的技術,投入社會之後,真正在工作上施展的又有多少呢?這當然是一個很複雜的問題,每個公司,團隊都有一套自己做事的方法或是固有文化,無論是好是壞,靠一個人的力量去改變是極度困難的。剛畢業的新鮮人也許有極大的熱情,但是不斷碰壁之後,就算現在這個『港口』再爛,總還是比大海安全,所以自己這艘船也就停了下來。什麼軟體工程,卡早睡卡有眠。

(以上廢話一言以蔽之就是『向下沉淪』)

偶而看看這種『勵志小品』可以喚起心中那一絲絲快熄滅的向上提昇的力量。就算是船現在停在港口,也要勤作維修,這樣萬一真的要開出海,才不會還沒出港口就沉了。

***

該死的路人甲:以上和軟體開發有何關係?

Teddy:請注意這本書的副標題:『勇於改變才會進步』。Kent Beck 告訴我們什麼?『Embrace Change』。Mary Kynn Manns 和 Linda Rising 告訴我們什麼?『Fearless Change』。 Scrum 告訴我們什麼?(請鄉民們自己找答案)。

***

友藏內心獨白:再引用書中的一句話:『其實大家都知道改革的關鍵在社會每個人的觀念,人的觀念改了,制度自然就改了。只是觀念是天下最難改得東西,它需要時間』。