軟體開發中的七種浪費

Teddy 大的 "敏捷開發法的逆襲" 我還沒有看完, 不過裡面提到的七種浪費行為已經可以整理出來了. 所謂的 "七宗罪", 本來是針對豐田汽車生產過程中的品管. 但是拿來套用在軟體上確實也並無不可.

1. 半成品 (Partially Done Work)

很多功能我們做到一半, 說打通了嗎? 還沒有. 不過可以 demo 喔, 看著都會動, 要圖有圖, 要數據有數據. 這些半成品其實是不能量產的! 如果不能一口氣把半成品推向成品, 久了就會變成廢物. 後來不是規格改了, 就是人改了, 公司投進去的資本就在無形中被浪費掉.

2. 多餘功能 (Extra Feature)

基本上, 沒有主管的要求, 很少人會寫出多餘的功能. 具有要五毛給一塊性格的工程師非常罕見, 雖然他們有時候會被批評為想太多, 進度太慢. 但是比起想太少, bug 很多的人, 我還是比較喜歡前者.

如果說是多餘的或是無效率的代碼倒是很常見, 可以很精簡做完的一件事, 有些時候也會被很囉嗦的方法來達成. 像是我以前 trace GPS 的組合語言時, 就發現這邊的 sin(x) 代碼用泰勒展開式與查表法強化計算速度, 順便把泰勒展開式很接近的 atan(x) 也寫在同一函式節省 code size ; 那邊的 cos(x) 卻是用 sqrt(1-sinx(x)2) 暴力達成, 大吃 sin(x) 的豆腐. 可見不同的工程師自我要求也不相同, 主管的功能在這個地方也可以有所發揮.

[註] 講到豆腐, 我不得不推薦一下中華豆腐 (4205 的恆義), 它不錯.

3.  重複學習 (Relearning / Rework)

所謂的重複學習重點在於重複是個浪費, 但學習不是. 大家各寫各的 code, 為何會重複呢? Teddy 大比較著眼於測試的部分, 因為測試的人要學習如何測試. 如果把 test 做成自動化, 就可以減少測試人員學習的時間.

不過我感觸比較深的部分在於系統整合的階段. 如果我需要一個與使用者互動的功能, 上面包括 UI 的呈現, 中間牽涉 framework 的實施, 底層要把資訊 parsing 出來. 那麼誰要負責 study? 如果大家都去看 spec., 絕對是一種浪費. 若是指定某人去 study, 而他沒辦法把架構從上到下講清楚 (這也點有強人所難), 導致其他人必須在更短的時間內自行搞懂, 這也是重複學習. 雖然此時連一行 code 都還沒開始, 浪費在其中矣.

如何消除這種浪費呢? 我們想想今年的紐約尼克隊. 它需要一個能兼顧得分和助攻, 兩者都還不錯的後衛. 如果沒有這樣的人才, 教練只好要求得分主力偶而也幫忙助攻, …接著就會一團亂. 所以我覺得重點在於人才, 甚至是板凳深度.

4. 交接 (Handoff)

不用說, 交接一定是浪費. 大家都不希望有交接, 不管是主管或是工程師都一樣. 交接的接收人通常想完全沿用舊 code 不要去動它, 或是全部砍掉重練. 很少聽到接收人稱讚他收到的 code 完美無比, 通常將它評價為 "能用" 就很偷笑了. 畢竟就算是被接收人吐槽為很爛, 不能用, 主管也只好買單這種說法, 不然難道要找一個懂得欣賞的人來交接?

5. 工作切換 (Task Switching)

如果 assign 太多工作給同一個人, 對方幾乎都會抱怨的. 就算是努力做事不抱怨的人, 也很難在許多八竿子打不著的工作中迅速切換. 這就像是把許多工作同時丟給電腦, 最好的作業系統也只能保證優先級最高的工作先完成, 其他的…再說啦.

Scrum 的每日站立會議就用來確保大家所做的是都是最優先的.

6. 延遲 (Delay)

延遲的浪費在於導致下游的工作無法展開. 後手的人不得不撥一點心思來 polling 上游的狀況, 並且導致他/她的下游也跟著延遲.

7. 缺陷 (Defect / Bug)

有嚴重缺陷的成品或是半成品都會對下游造成不遜於延遲的傷害. 一個有問題的 commit 導致全 team 的人都編不出新版, 這個代價真是不小. 更不用說 bug 流落到客戶那邊後, 甚至可能造成退貨的危機. 據說某名牌 IC 設計公司的產品就是因為連續開機一萬小時後會自動關機而導致全部退貨. 追究其原因, 也不過就是設計者的觀念瑕疵而已 – 把測試休眠的時間參數寫成一萬小時, 反正客戶也不可能用那麼久不關機, code 就留著以後還可以回收 – 後來真的整個產品都回收了.

我個人也遇到過一個好笑的 bug. 當年做翻譯機的時候, 我自認已經交接完了, 大陸的同事忽然慌慌張張地打電話給我, 說這個 bug 他們解不了, 一定要我去現場看一下. 據說我們的翻譯機很怕遇到快譯通和女生, 只要是女生去試用或是和快譯通放在一起 demo 就會當機, 但是和它牌的同時 demo 倒是沒事.

我過去看了 code 之後, 發現 silence detection 的 zero crossing 寫在 share memory, 但用完後沒有清掉. Co-processer 以為這是 main chip 的 command code, 一執行當然就瘋掉了. 至於為何最怕快譯通呢? 原來快譯通為了聲音好聽, 特別提高輸出的 pitch. Pitch 高, zero crossing 就大到和 command code 剛好值一樣, 才會發生這個 bug. 這兩個故事告訴我們, QA 要找女生. 測試用的 code 一定要用 define 包起來, 這樣就不會導致把測試 code 變成量產版本的問題.

我讀 «我靠基金 38歲退休之基金逆轉勝實戰報告»

前幾天開車的時候, 聽到電台在訪問賤芭樂 (王仲麟先生). 雖然我記得在 57 號夢想街也看過他上節目 (或是由來賓談論他?), 不同於在電視上呈現的 “解盤人" 形象, 在電台上他 “聽" 起來滿謙虛的. 所以當老婆想要在 PC home 買書的時候, 我就順便多買了這本賤芭樂的新書.

本書的前作 “我靠基金 38歲退休" 聽起來確實有點囂張, 王仲麟說那是書商的說法. 他即使 38 歲不上班, 但也並非就此閒雲野鶴, 還是有很多事情要做. 我看了芭樂園這個網站之後, 確定專業投資人其實也是很忙的. 出名之後難免有人來求教, 免費幫路人回答問題也不是輕鬆的事情.

由於作者王先生已經把新書簡介放到 Youtube 了, 所以我也省了很多事, 毋須做太多介紹~~~

然而, 大家若有緣讀到本書, 應該會感覺到它很像是工具書. 作者把各種基金套牢的情況分類寫成不同章節, 然後從四種對策中給予建議 – 停損, 續抱 (停扣), 攤平, 或是擴大加碼. 有時是單選, 有時是複選. 而選擇的原理也很簡單, 那就是依據基金本身的三種屬性 – 大漲大跌麻辣味 (A 級), 小漲小跌家常味 (B 級), 抗漲抗跌你哪位 (C 級). 簡單地說, 凡是大漲大跌的基金, 那就多半建議續抱; 如果抗漲抗跌, 反正漲不多, 有獲利就可以出場了; 沒獲利也不太建議續扣.

我們在大二的時候學過一門數位電路設計, 其中有個單元叫做卡諾圖 (Karnaugh map). 卡諾圖專門把分門別類整理成更簡單的邏輯. 既然我今天醒得早 (其實是醒了睡不著), 乾脆就來歸納一下. 1 表示那招可用, 0 表示不能用, X 表示 don’t care. 四個連續數字表示上面講到的四種對策.

  單筆小賺 單筆小虧 定期小賺 定期小虧
A 套左腰 1011  1011  0011 0011 
A 套頂點  xxxx 1011  xxxx  0011 
A 套右腰  1011 1011  0011  0011 
B 套左腰  1010 1010  1010  1010 
B 套頂點  xxxx 1010  xxxx  1010 
B 套右腰  1010 1010  1010  1010 
C 套左腰  1010 1010  1000  1100 
C 套頂點  xxxx 1010  xxxx  1100 
C 套右腰  1010 1010  1000  1100 

根據陳龍英教授教的, 同類的可以合併, 以簡化設計. 因為不論套在哪裡? 每一級的解法都可看成一樣, 所以我們首先得到:

  單筆小賺 單筆小虧 定期小賺 定期小虧
A 級 1011 1011 0011 0011
B 級 1010 1010 1010 1010
C 級 1010 1010 1000 1100

再來可以看到, 單筆不管小賺或是小虧, 策略的數字一樣. 定期部分, 依據賺或是虧, 作法有點不同. B 級不管怎麼操作, 賺或是虧, 做法都和 C 級單筆相同. 那麼我們可以得到簡化的設計如下.

  單筆 定期
A 級 1011 0011
B 級 1010  
C 級   1000/1100

 A 級和 C 級在定期的部分幾乎是互補 (0011 vs 1100), 除了  C 級小賺後不選第二策略之外. 基本上作者很不建議 “裝死" 的第二策略, 看來看去幾乎都是 0. 然而, 裝死應該是虧損時最普遍的人性啦!

這個第二策略在定期定額是 “暫時停扣, 未來到低點再復扣". 和單筆的第二策略 “暫時擺著, 逢高出場", 雖然數字代碼一樣, 但實際上有點不同. 主要是已經投入的都不動, 也不加碼(續扣), 等到更好的時機出場或是復扣.

所有買單筆的解套策略也都很類似, 除了買到  A 級的人不選第 4 策略之外. 第四策略是逢低擴大投資. 因為 A 級大漲大跌, 要是摸不到底就糟了. 故此點也不難理解.

以上就是我的整理. 至於怎麼知道自己是套在左腰還是右腰? 我想看過作者的前一兩部作品後就可以知道. 昨天我也想過這招能用在股票上嗎? 我想如果公司不會倒, 那麼的確也適用. 只是單一公司的風險很大, 遠不如基金可以分散風險.

漲跌互見的金融商品

剛剛打開理專寄的資料, 發現在一片不景氣之中, 有些產業非常地慘, 但另外一些公司竟然表現還不錯. 衝著這種奇怪的現象, 決定花幾分鐘整理一下.

首先是 ETF 的部分, 我把價格在 52 週的價格位置以百分比計算. 如果 0% 表示創一年新低, 100% 表示創一年新高, 50% 就表示在過去 52 週裡面, 現在的價格正好是中點.

排名  低檔商品 百分比
1. 全球綠能 0.95
2. 以色列基金 1.06
3. 全球媒礦 1.97
4. 全球替代能源 2.49
5. 全球金礦業 2.6

從最淒慘的商品來看, 大家非常不看好未來的景氣, 不想買入資源. 相對地, 以下的幾個商品竟然在高點.

排名 低檔商品 百分比
1. 美國 3-7 年公債 99.31
2. 美國 7-10 年公債 98.68
3 美國投資級債券 98.26
4. 美國 20 年以上公債 98.22
5. 美國 10-20 年公債 98.15
6. 新興市場債 97.29

換言之, 債券的價錢被大家買高了; 現在去買債券有一定的風險. 風險不在於領不到利息, 而是淨值的下跌. 唯一不值錢的債券是美國的短債, 價格百分比是 53.73%, 這是美國政府扭曲操作的結果. 在歐元區的兩年期公債照樣搶破頭, 債券的殖利率已經是負值了  (2012/7/23, 殖利率 -0.04%).

再看到美股本身也很有趣, 它的差異性也令人吃驚. 首先, 礦產沒人要, 也沒有人要買汽車, 非蘋電腦 – 因為蘋果本身在 86.19% 的高水準.

排名 低檔股票 百分比
1. Barrick 金礦公司  0.45
2. 動態研究公司  1.11
3 惠普 (HP) 1.52
4. 美國鋁業 1.55
5. 福特汽車 1.52

大家喜歡吃藥和買日常用品, 不景氣日子還是要過~~~

排名 高檔股票 百分比
1. 輝瑞 96.27
2. 威名百貨 (Wal-mart) 93.6
3 eBay 93.35
4. 默克藥廠 92.6
5. 好市多 92.22

以上供大家參考.

幾種免費防毒軟體的缺點

講到防毒軟體, 應該每個人都用過, 現在連手機版的防毒軟體都出來了. 我用過付費的軟體, 包括趨勢 和 Norton. 另外一半的時間則是用免費的軟體.

我有一陣子買過卡巴斯基. 因為我是大塚軟體的股東, 所以支持卡巴斯基也是應該的. 但是卡巴斯基設定頗為複雜, 掃毒也比較慢, 後來我不再用卡巴斯基, 順便把大塚也賣了. 

Norton 基本上還不錯, 不過一旦過期之後, 就不斷地跳出視窗來威脅客戶, 似乎不用它的軟體, 電腦安全就不保了. 由於 Norton 很難反安裝, 我也拿它沒轍. 只能說是愈看愈生氣, 乾脆把Norton 列入拒絕往來戶! 好在後來安裝某個新防毒軟體時, 它說 Norton 和它相衝, 幫我把 Norton 除掉了.

金山雖然是免費軟體, 但掃毒能力不錯. 缺點之一是容易誤報病毒, 往往報出一些不是病毒的東西. 第二個缺點算是重大缺點. 它竟然把 Adobe Reader 給殺了! 感覺蘋果公司有投資金山的樣子, 怎麼跟 Adobe reader V10 有那麼大的仇恨? 所以我只好把金山毒霸給卸載啦!

[補充] 金山會要求把 "金山導航" 設為瀏覽器首頁, 一不小心同意了的話, 下次想改回來都會被當成 "惡意竄改首頁" 而改不成.

接著因為在 PCHOME  買了不少東西, 所以也得到熊貓 (Panda) Antivirus 的三個月試用序號. 這個軟體的缺點是禁止我的部落格被讀取. 呃…在我搞懂怎麼設定之前, 我也把它卸載了.  不過請大家記住那個試用序號只能安裝一次. 卸載之後就失效了. 

另外有個小雨傘 ( Avira) 防毒軟體. 我記得這個免費版軟體的缺點是不太防木馬網站. 此外它和 Windows 的 defender 相衝. 雖然 defender 很差, 不過別的軟體都沒有特別提到要去關 defender, 難道他們的技術是一樣的?

[補充] Avira 很愛打快顯廣告, 有時沒事就出來一篇阻礙視線. 不過拿人手短, 也就算了.

趨勢的 PC-cillin 雖然以前有聽過一些缺點, 但是我真正不喜歡的是有一年它促銷時, 順發店員說不用設定, 買兩年送三年. 等到兩年到了, 它就不讓我用啦! 雖然不知道該怪趨勢還是順發, 總之我也不再用趨勢的產品了.

大陸的瑞星我也用過, 不用錢, 看起來好像功能強大. 但是電腦怪怪的時候, 它好像沒有真的抓出什麼東西來讓我安心一下. 而且它的家族發展愈來愈大, 慢慢看不懂安裝哪些叫做剛好? 久了也就不想用了.

最後附帶一提, 兩套防毒軟體共存是可行的. 除了少數軟體不相容之外, 大部分都證實能夠相容.

清泉半日遊

今天午餐過後, 決定去一個平常不會去的地方. 那就是在竹北很容易就看見路標的 “張學良故居".

當然, 這個地方有點遠我是知道的. 在想像之中, 相當於監獄的這個 “故居" 應該在非常荒涼的地方吧!? 不過在開了一個小時多的山路之後, 發現這棟故居竟然在新竹清泉算是相當好找的地方??

原來所謂的故居早就被颱風沖毀了. 現在我們看到的這一棟, 是在張少帥搬到台北之後才重建的 (見下圖的新建故居). “新古蹟" 這招大陸滿常用的, 想不到台灣也會. 大概可以吸引大陸觀光客吧!

這棟故居裏面最值得看的是訪談的紀錄片, 畢竟西安事變離我們很遠了, 了解一下張少帥在當地人心目中的印象比較感覺比較真實. 他們夫婦被軟禁在此的時間是 1943 ~ 1962 年, 當時我都還沒出生呢!

故居裡面第二有趣的是張學良元配寫給他第二任老婆的信. 故事大概是說張學良 16 歲時娶了于鳳至女士. 後來他喜歡上趙一荻女士 (人稱趙四小姐). 因為女方父親反對, 所以趙四小姐私奔於張少帥. 當然張少帥當時很有勢力, 我們也看不出他們的感情有多堅定. 據說趙四小姐要求于女士接納她, 寧可不要名分.

西安事變結束之後, 張學良淪為老蔣總統的階下囚, 兩位女士自然都是共犯. 其中于女士因病先到美國就醫, 因此後來被關在清泉的就是趙女士. 據說老蔣總統擔心張帥會因為與于女士的婚姻關係獲得美國的庇護, 所以一直設法讓張帥與于女士離婚.

但張帥和于女士都沒有這個打算, 按故居裡面展示的說法, 張帥不想對不起于女士, 所以堅持不離婚. 照理說, 當初 1928 年張趙兩人情投意合時, 都沒要元配下堂, 哪有 40 年後反倒要鬧離婚的道理.

據說老蔣總統對此事耿耿於懷, 所以始終沒有罷休. 後來張家夫婦 “移監" 到了台北, 于女士擔心若兩人不離婚, 老蔣總統終究不會放心張帥有獲得美國支持, 至少是政治庇護的可能, 故終於同意離婚一事.

這封把張帥讓給趙女士的信寫得相當感人, 它刻在一塊大木牌上, 表示媞妹 (趙女士名媞字一荻)才是照顧張帥最用心的人, 所以放心把張帥交給她. 並且暗示她相信張帥並不想與他離婚 (OS: 都是某人害的). 我依稀記得大意是說: 以少帥當年的地位, 就算是娶三妻四妾也很平常 (老帥便是娶了一妻四妾), 但張帥只娶了她一個人, 證明他是有良心的.

與于女士離婚後, 1964 年 7 月 4 日張帥與趙女士正式結婚. 最後他們還是獲得美國的綠卡, 終老於檀香山. 當然, 那時候少帥都變成老帥了, 總統也換成李登輝先生, 不再姓蔣.

從霞喀羅溪的這一岸, 過了吊橋之後, 就到了桃山國小. 故居那邊的廁所有時突然人滿為患, 但是國小這邊的遊客就少了很多, 廁所總是空蕩蕩的. 內急的人可以考慮過橋. 這邊有三四座吊橋, 過橋之後, 我想起上次過門不入的三毛故居也不遠, 索性來個 “故居之旅". 與桃山國小相反方向的路就可以到三毛故居. 往三毛家的上坡還滿陡的, 我想她當時應該不太常下山吧? 不然腳力應該練得滿勇的.

參觀三毛故居要收 20 元清潔費, 這點是事先不知道的. 她在此一共住了 3 年 (1983~1986).

再往霞喀羅方向走一點, 就到了 “將軍湯". 這個溫泉原本被日本人命名為井上溫泉, 但它和真正的張學良故居只隔一條馬路, 故現在被命名為將軍湯. 這個溫泉真的很燙, 本人泡不了多少秒就要拔腿了. 雖然溫泉有幾度我不得而知, 但上面的 LED 顯示 123 度 (誤) 更是令人不安. 

貨真價實的張學良故居現在已經變成這樣了. 我看老照片裡面的台階沒有現在這麼整齊, 但方位大致相同. 這裡還有些紀念性的陳設, 包括照片, 雕像與石刻. 說明文字與故居都相同, 但因為放置於戶外, 看來有些毀損的跡象.

下面這幾話說得很有氣勢, 張帥當時已經 89 歲了. 張帥生於 1901 年, 卒於 2001 年. 雖然高壽一百歲, 但是白白悶了 3/4 個世紀. 原來 “做自己" 也沒那麼容易.

.