顯示具有 如何做好… 標籤的文章。 顯示所有文章
顯示具有 如何做好… 標籤的文章。 顯示所有文章

2010年1月19日 星期二

X13 簡單幽默之範例(1)──蚊子

以下內容一字未改,均為當時打字的記錄。

[同事] 蚊子是令人髮指的生物
Joying 蚊子.....正是夜晚穿梭我們"髮"際, 死於我們"指"間的......
[同事] 是半夜咬我們的害蟲
Joying 我家最近也很多
Joying 常常半夜起來, 臉上都一陣酥麻......
[同事] 感覺天氣回溫 害蟲就多了
[同事] 我每天半夜都被蚊子叮醒 睡眠不足
Joying 唉......
Joying 我看, 我們去買一個以往罩在餐桌上防蒼蠅的那種罩子
Joying 調整一下, 睡覺時罩在臉上吧
[同事] 去
[同事] 買蚊帳還差不多
Joying 嘿, 你想出好解法了 :)
[同事] 我昨天睡前 用電聞香薰過房間了 還是沒用
Joying 不然本想再建議西洋劍的面罩....
[同事] 你先試試好了
Joying 我曾幻想過
Joying 有沒有辦法睡覺時把捕蚊燈佈置在頭的周圍.....
Joying 像是把燈泡拿掉, 換成頭在裡面
Joying 這樣蚊子一過來就會先被電
[同事] 這...
Joying 不過, 所有人都認為, 頭會先被電焦 
[同事] 應該會
[同事] 翻身時就身亡了
Joying 好可惜, 那是最棒的解法說, 但有技術瓶頸沒法克服 :(
[同事] 最棒的解法應該適用蚊帳比較好吧
Joying 也有蚊帳裡飛進蚊子的bug啊
[同事] 而且就算蚊子飛到蚊帳裡 範圍也比較小 一下子就抓到了
Joying 呣....只好先選用這囉
[同事] 我個人是不愛蚊帳
Joying 也還有另一個方式喔.....只要讓房間比外面冷, 蚊子自然會待在外頭 (自然驅蚊法)
[同事] 這點我想過 很難 
[同事] 除非開冷氣
Joying 會被當瘋子吧 =.=
Joying 牆角放幾塊大冰塊還比較可行
[同事] 那才會被當瘋子
Joying 至少外人不知道啊.....開冷氣, 全街都知道你瘋了.....
[同事] 切

2009年10月6日 星期二

X06 建立小朋友的能力架構

在小朋友的成長過程裡,父母總會希望他們具備各種能力以應付日後社會上的各種競爭。有些父母會以“多才多藝”作為小朋友的學習目標,但是學習項目過多會使得小朋友們失去童年的時間,因此我的想法在於建立他們的能力架構。能力架構倘使可以適當地建立起來,日後可以根據個人的興趣喜好選擇適合自己的項目,再經由這個能力架構達到更快速的學習與產出。



能力架構的想法類似於電腦的架構,在最底層的需求有輸入、記憶、搜尋、運算與輸出五種能力。每種能力根據自己的認知定義應該要學習的技能。

●輸入:單位時間內傳入的資料量越多就有機會攝取更多的知識,速讀可以提升傳入資訊的速率。速讀的訓練可以從國小低、中年級開始。
●記憶:傳入的資料需要被記憶下來才能在日後再度使用,速記可以提高傳入資訊被記憶下來的比率。坊間的速記課程也包含了速讀,同樣從國小低、中年級開始。
●搜尋:根據現在的情境到腦中的龐大記憶裡搜尋各式各樣符合的資訊運用,我不知道學習什麼技能才能提升這項能力。或許,這是倚賴天份的?
●運算:年輕時跟算術有關的運算都會佔據考試很多時間,學習珠心算將運算時間降到最低,自然有充分的時間驗算並思考其他更有意義的問題。從剛學會筆寫阿拉伯數字的中班年紀開始。
●輸出:思考的結果會經由肢體創造出一些產出,其中很大的部分會是文字,現在電腦的使用佔了很大的比例,因此打字可以提升輸出文字的速率。從認字與注音都稍具基礎的國小中年級開始。

在這五項基本能力之上,我認為還有三個概念性的能力需要加強:

●輸入準則:閱讀能力有助於拆解文字(或圖形)成為腦中可記憶的儲存想法,拆解得越多越可以看懂更多其他人所想要表達的想法。
●輸出準則:作文能力有助於將腦中儲存的想法用文字(或圖形)組織為別人可以看懂的內容,想法描寫得越詳實越有助於讓旁人的腦中建構出與自己相彷的想法。
●規劃能力:利用棋牌類必須規劃佈局同時推算對手各種對策的規則特性,養成每一步進行都先思考各種可能的習慣;同時等待對手回應也能夠培養等待的耐心。

建立起基本的架構能力後,其他需要輸入、記憶、運算與輸入的技能都能有事半功倍的效果,同時運用輸入準則、輸出準則與規劃等概念性的能力還能夠再加強這些架構能力處理資訊的品質。這樣的道理與架構的設計不是很接近嗎?

2009年9月9日 星期三

Y02 如何寫出難改又難懂的程式碼?

一直都在談如何作好分析與設計,這回就來個逆向思考的建議。

●目標:如何寫出難改又難懂的程式碼?

想像公司早上第一個到的人所要做的事如下:開鐵捲門、用識別證開門、開一號盤的15個電燈開關(1-15)與二號盤的15個電燈開關(16-30)。現要設計一個功能來實現這些行為,建議使用以下推薦的方式來撰寫程式,保證可以達到難改又難懂的特殊效果同時不會影響功能的正常執行。(此等技術暫時命名為程式碼的人工混淆化)

●Class、Method與Field的隨興命名
 效果:讓人即使看到名稱也不見得知道這就是他要找的程式。
●Class隨便放到某個Package裡
 效果:與上一招同時施展,可以讓人感覺Class在某個雲深不知處的地方。
●Class、Method與Field內外完全不寫任何註解
 效果:讓別人從眾多的程式碼反推你原本想要做什麼。如有人能完全識破此機關的話一定要選為衣缽繼承人,因為那是萬中無一的奇人。
●執行的大大小小步驟都寫在同一個Method
 效果一:搭配前一招時可以讓邏輯處理的焦點忽大忽小,明明在講進門要做的事卻一下子跳到拿出識別證的動作,完全不知道在幹嘛。
 效果二:可以保護自己想出來的程式解法,例如自己發明一個很帥的識別證拿法就可以直接寫在Method裡,其他人想要用就只能copy(因為要抽方法就得幫你改寫程式,以我所知沒幾個人有這閒工夫);有天你發現姿勢可以更帥時可以保證只有你知道,因為別人抄到的是你前一次的姿勢,跟你肯定沒得比。
●不要花時間去想執行發生錯誤時該怎麼辦
 效果一:程式碼裡一定存在著錯誤,這樣一來可以用更多的錯來證明這句話是極為正確的。
 效果二:搭配前前招使用,可以讓別人在不知道處理邏輯之餘更不知道發生錯誤要怎麼辦?同時讓老板知道只有你能搞定這樣的錯誤處理問題。(註:平時常逛逛求職網站是有助益的,因為總有一天會發生連自己都搞不定的重大問題……)

採用以上方式撰寫程式碼,將會產生下列各方面的效益:

●個人方面:
 加速個人的效率與產能(不用抽Class與Method可減少思考與重構時間)
 提升個人在開發團隊中的重要性(沒人有把握修改別人的程式)
●公司方面:
 加強與其他公司合作的意願(即使程式碼外流也毌用擔心技術被學走)
 減少額外控管程式碼的成本(只要從jar file反組譯回來就是完整程式碼)
●產業方面:
 創造更多的營業額(因應提高開發與維護的成本會增加系統的售價)
 提升開發人員的素質(無法看懂別人程式碼者會被淘汰,只留下適任者)

註:最近一個多月狂寫公司某份計劃書,因而導致這篇文章的風格被影響。

2009年5月4日 星期一

V03 如何寫好作文

作文的基本結構其實很接近Use Case-Scenario-Activity,可以用top-down的設計方式來鋪陳文章的內容。

先將整篇作文視為SRS(System Requirement Specification),作文的題目就像是Use Case Name,用很少的字數來表達全部文章的功用;SRS的第一個章節是描述Use Case目標的詳細說明,那麼第一段就可以先用較多的字數闡述主題(這適用於論文,記述文不要用)。

再來就要先在腦海裡製作文章的scenario,進入前的準備、起點、詳細流程、流程中各種可能分歧與最後的狀況,這些scenario相關的部分都必須先構築完整才能進行下一階段。如果流程只有一半就開始寫作,很有可能會跟現今的專案一樣寫到一半才發現流程有不足之處而難以收尾,屆時不是改寫出問題的那一段就是草草結束,這些都不會有好結果的。

如果需要其他看法的scenario佐證自己的論點,記得也要一併思考。能夠整合為一個流暢的scenario的話就一起表述,否則就依序分開寫作,但是要小心不要有前後的衝突而自打嘴巴。各個scenario都陳述的最後用一段結尾來說明這個Use Case採用我們上面作法的優點或是延伸的感想。這樣一來作文的全部架構就大致成形。

接著進入細部設計。scenario裡的每個activity是句子的集合,要決定用哪幾句話的句意來達到activity的目標,同時再設計每個句子裡要用什麼樣的字詞組合。心裡的模型如何拆解為對的句子順序關係到流暢度,記憶了多少字詞關係到可以選用的API多寡,這無法投機而要看各人事前所作的修行。組合之後再運用重構的想法調整用字遣詞與前後關係,確認後再落筆撰寫。

慢慢寫出心裡的結構與內容完成作文後,記得再閱讀一次測試來找出不理想的地方修正。通過測試後就可以無怨無悔地交卷了。

註:我的高中聯考作文分數為50.5/70、大學聯考作文得分也超過60%,這個論點應該很具有參考價值!

2008年12月15日 星期一

S15 簡單的幽默(6)──切換為不同的視角

除了針對事物本身的特性作文章之外,還可以經由切換不同的角度來突顯既定事實被變調後的幽默。

有位業務在Facebook的塗鴉牆上留言:近年來收入越來越少,算命又說沒有偏財運,該怎麼辦才好?我建議說:如果沒有偏財運的話,不如將現在的工作當作兼差而把買彩券作為正職,應該就能改善。另一位單身同事也留言:最近手頭很緊卻有好朋友結婚,應該如何處理?我回答道:趕快在好朋友結婚前百日之內先結婚,這樣不僅可以省掉紅包錢還可以存下一小筆積蓄。

原先的事實都指定在一個限定的範圍裡,我們可以試著在它的上面或是平等的地方(通常是上面)找出能夠將之硬拗為截然不同意義的視角;前提當然是原來的事實不變而且完全合乎後來從另一視角所設計的劇本裡。第一個例子裡錢賺得少就用命運裡的財運來涵括,使之成為財運的子集合;第二個例子就設計讓主角先結婚,就可以順理成章地以習俗避開沒錢還要包紅包的事件。

工作忙時有些同事會感到頭痛,聊天時會談要怎麼樣可以有效地讓頭不會痛?總有人開玩笑地說:那就讓我用力跺你的腳吧,只要你的腳比頭還痛自然就會因注意腳痛而忘卻頭痛。男生積極邀約女生下班後搭他的便車回家,女生婉拒時可以試著說:搭我的便車回到巷口下車時,如果有鄰居看到就會感覺妳時常被不同的男生送回家會很有成就感喔。

在開玩笑的同時還要留意一個原則:“好的說法要用在對方身上,壞的譬喻得拿自己打比方”。儘量找好的說法來作範例當然可以避免無謂的不好觀感,倘使笑點一定要用不雅的方式才能呈現的話,就儘量用“如果是我的話……”作為開頭來陳述。適當地犧牲自己才會更有機會帶給別人歡樂,這是我所得到的經驗。

2008年12月14日 星期日

S14 簡單的幽默(5)──誇張聯想來龍去脈

與前面幾個類型比起來,這種作法是相對較難的部分,這是因為之前都是依現有資訊限定範圍作發揮,而此時必須以特定目的為基準,快速搜尋腦中的關聯記憶並決定好著重的論點。想要到達這個程度,腦袋裡堆積的記憶資料庫與指定題目的快速索引都是不可或缺的重要能力。

古代的說客是很明顯的例子,孔明過江東舌戰群儒在一群人輪番提問之下逐一找出反駁的道理令眾人無言,他當然對各國的立場與出路都作過一番分析,再以他的智慧作出即席的反應。這個部份在新聞上也很常見,政治人物在做錯事被發現的場合也都會找出一堆理由來合理化他的錯誤。

運用這樣原理在平時聊天,誇張化地導出一個現在的已知結果也是一種幽默;殺雞用牛刀、殺雞取卵的想法都帶有這樣的意味。另一個方向則是從現在的已知結果往後延伸其影響;杯弓蛇影也具有這樣的意味存在。想像出的所有原因或是所有的影響都必須具有一個特性:要能合理地同時滿足選定結果的所有限制條件,不然僅是牽強地符合的話也不過又是冷笑話而已。

曾看過一篇好笑的文章,它鎖定的標題是“一位計程車司機如何消化掉加油送的面紙”。內容敍述一位計程車司機每天因加油帶回家很多面紙,累積了幾年後只好租間倉庫來存放越來越多的面紙,司機太太說除了清潔用途之外即使每天都行房事來消耗還是用不完,所以現在也都送面紙給親朋好友並建議他們多行房事。司機說如果再這樣送下去,他每天開車的精神都很不好會擔心出車禍,所以希望加油站送點別的東西。

如果覺得不好笑的話,純粹是因為幽默的方向不同而已,不用太在意。那篇文章是以“加油送的面紙”鎖定一個方向引申,再加上使用“加油為什麼會是送面紙?”作為標題的話則是發展來源;一個既定標題的來龍去脈都有可能在上面大作文章,就看找出來的方向是否與標題有絕大多數的吻合。

2008年12月13日 星期六

S13 簡單的幽默(4)──提供遮蔽過的資訊

同事聊天時談到教育小孩的話題,問我會不會打小孩?我說會,而且是用“球棒”打。同事們都嚇了一跳。我補充說那只是遊戲用的“空心塑膠球棒”,打起來會痛但是不會受傷,大家才恍然大悟。先從一個正式的回答裡找出最能一鳴驚人的片段,有時真的可以造成令人哭笑不得的效果。

聊天的話題難免會碰到星座,每當問我是什麼星座時我總是回答“變態的雙魚”,對方通常會問:你是說雙魚很變態嗎?我說:不是,變態的是我。因為我的個性大半與星座書裡描述的雙魚座個性不同。這種方式其實很像演講或作文時使用的破題法,只是取用的內容是具有笑果的那種。

被遮蔽的資訊也可以是主詞,在對方認為你描述的內容是某種物件時,答案卻根本是另一種物件。十歲的小明高興地跑進大人的聚會要讓大家猜謎,他出題道:什麼東西是橢圓形、週邊有毛、而且還經常濕濕的?大人們臉色都變了責罵他怎麼可以猜這種東西?小明委屈地說答案是眼睛啊!大人們才安慰他說誤會他了,沒事。

有時直接坦承自己心裡想的就是對方所說的,也會教人不知該怎麼辦才好。佛洛依德的夢解析大多都是以性為說法,像是夢到蛇代表什麼、夢到球棒代表什麼等等(我沒記);某人有次聊到這個,我問他說我昨晚就直接夢到性器官,請問這代表什麼意義?旁人笑說:那代表你很色。

隔了一會兒,小明又跑進那群大人的聚會要大家猜謎,這次的謎題是:什麼東西是橢圓形、週邊有毛、而且還經常濕濕的?大人們說:咦?這不是剛才猜過了嗎?是眼睛啊!小明笑著說:不對,這次的答案是你們剛才想的那個。一對男女朋友躺在沙灘上作日光浴,女問男說:你心裡在想什麼?男的笑答:我想的跟妳想的一樣。女的立即給男的一巴掌:不要臉!

面對遮蔽的資訊時,每個人習慣用自己的思維去補齊缺失的部份以求一個完整的答案,在接續的過程中如果與正解有差異就會產生幽默的效果。但也要小心會有人根據這個原理來提問,進而探索旁人的內心想法。(我就是這一類型的人)

2008年12月12日 星期五

S12 簡單的幽默(3)──著眼於不同的特性

公司對因專案而長期駐點在客戶端的同事會有定期的拜訪,招待一頓午餐時順便宣導一下公司近期政策並聽取同仁的意見。

這次人事主管提出公司樓上將要設置健身房,詢問大家是否會在下班之餘到公司使用。同仁普遍的意見都說專案實在太忙,沒辦法再花時間到公司健身;人事主管說要是專案經理每週固定一天讓大家準時下班的話,大家回答說要是準時下班就會回家休息而不會去。看起來要多花一段時間才能健身並不會是理想的選擇。

這時我提議說,我們每個專案裡其實都有很多電腦,或許可以讓專案的同仁效法陶侃搬磚的精神,每天早上一來先把電腦搬到樓上裝起來用(那個專案在四樓,而且只能走樓梯),下班時再搬到一樓放好。當時每個人當然是無言以對啦,不過根據“健身”這個需求,與其他類似需求作關聯與搜尋後,我鎖定了古代陶侃的例子作為話題的衍伸。

朋友聊天時說她前幾天騎機車被車子從後面撞倒,一時之間根本搞不清楚是誰撞她的,我開玩笑地跟她說那妳以後騎車必須騎快一點,她問為什麼,我說這樣一來至少車禍時妳可以看清楚妳撞到了誰。或者像這個笑話裡的描述,妻問:我新燙的頭髮看起來會不會很醜?夫答:妳的醜跟頭髮完全沒有關係。

在一件事中找出不重要的特性作文章雖然可以有牛頭不對馬嘴的幽默,但在實際生活運用時要特別留意對方的感受。如果在對方迫切需要正確的回饋時,卻發現你言不及義地越扯越遠,那時就有可能會有意料之外的反應。(像我就會觀察對方是否開始左顧右盼地像在找球棒,那時就該切回正題了……)

2008年12月11日 星期四

S11 簡單的幽默(2)──只滿足需求的結論

跳脫置換字詞與句型的小框架,根據整個描述的真實意義還有可以變化的地方,那就是定義出該段話裡所有的需求,再判斷是否有某個需求可以找出符合但是很誇張的結論。

有位同事花了不少錢購買一個具有濾水功能的水壺,平時都裝大型濾水器的溫水過濾飲用。某天大型濾水器停水,同事說即使是過濾茶水間水龍頭出來的水他就可以喝,我好奇地問他:那要是裝廁所洗手台上的水可以喝嗎?他說他不敢,不過小時候我倒是曾經對嘴直接喝過啦。(要再誇張的話可以問能否裝馬桶裡的水,不過幽默的內容要在好笑與不傷人的狀況下取得平衡)

有位同事中午都會出去步行半個小時以上,有一天中午外面下起雨來,他擔心地說今天沒辦法運動,根據他“想運動來消耗熱量”的需求,其他同事就開始幫他出點子。首先建議可以上下樓梯來運動,他說那對腳的負擔太大;改到一樓大廳的空地踱步兜圈子,他說繞圈的運動量不夠;那麼就加強為兜圈子時抱著一張椅子,他說別人會把他當精神病患看。

聊了一會兒後忽然發現雨變小了,同事還是穿上輕便雨衣出去步行。不過經由這次的事件倒是可以發現原來只描述一個主要功能的Use Case,可以在不斷地提問與答覆之間慢慢地摸索出功能的邊界限制,也更有利於作出一個趨近於完全符合客戶需求的東西。

小題大作地完成別人話中隱含的需求是這種幽默方式的重點。更進階的此種幽默,是讓找出來的結論不管是做或不做都有笑點;要達成的要件是原先的需求應該是要恰好的中庸,但是建議結論裡的做與不做卻是太少與太多。

2008年12月10日 星期三

S10 簡單的幽默(1)──相同表面相異意義

在生活中除了達成目標的成就喜悅外,好笑的事同樣也可以帶來歡笑。工程人員通常給人的印象都是孤僻且沉悶的,但是運用Interface的基本思維卻是可以造就一些幽默出來。雖然Inteface型的幽默有時會很冷,不過出人意表的聯想也能夠有令人擊掌叫好的產出。

當一句話由旁人口中說出時,就可以開始快速檢視其中的字詞有沒有可以抽出成介面,然後把那個字詞換成介面相同但意義迥異的另一個字詞。最典型的代表就是同音異義字,常看綜藝節目的人應該可以從主持人與來賓的對話裡發現很多這種用法。

再往上一層可以針對一個句子作聯想,把第一句的語意抽取出來,然後承接語意與句型卻在下一段展現出乎意料的轉變以製造笑料。這裡有幾個範例:“跟網友見面時要小心,以免對方因為你太醜而把你揍得半死”、“半夜不要照鏡子,否則會嚇到自己”、“慎防吃到不潔的東西搞壞腸胃,尤其不要吃自己煮的菜”。

雖說這種幽默需要快速的聯想力找出許多待置換的內容再選擇最好玩的,但是在文字學習方面也有很多這樣的考題,像是一個句子裡某個字寫上注音要求填上國字 (字音)、或是在一段話裡找出錯別字訂正(字形),這些都是在小學國語考試時經常出現的題型。心裡對於那個注音或字形(Interface)能列出多少單字(Class),關係著是否能夠解答那個問題。

以上是用字詞的抽換與句型的接續的基本型幽默。(現在很多腦筋急轉彎都是運用這個方式)

2008年4月15日 星期二

N15 如何學好地理與歷史

地理與歷史雖然被分為兩門功課,但是兩者之間的關聯是非常密切的。地理描述了地殼的特質,包括了地形、礦產、種植、畜牧、城市等等;歷史描述的是人類在地球上生活時發生的重大事件,包括產生的原因、事件的內容與日後的影響。

從系統的角度來看,地形、氣候與礦產是位於最下方的靜態層次,城市、畜牧與種植是人類決定在此處生活後才有的中間層產出,最上層則是種族與戰爭、遷徙等歷史事件的發生。人類受地形影響決定在哪裡建造城市、在哪裡種植與畜牧,但人類的歷史同時也改變這些;人類可以改變小部分的地形,地形變化在人類歷史中雖很少發生,卻會改變該地大部分的人類(例如龐貝城)。

這兩門功課在求學階段裡都是硬背硬記度過的,主要是因為課目被切分為本國地理、世界地理、本國歷史與世界歷史,每位老師都很認真地教他們負責的科目而忽略了說明彼此間的影響,連帶地讓我沒法去融會貫通世界的平衡。

前陣子在觀看介紹圓明園的DVD時,裡面帶到建造圓明園時與乾隆死後的幾十年間,歐洲各國發生了什麼樣的事情(工業革命、法國大革命等),相較之下才更明白在某段時間裡各國的演變與之後發生事件的關聯。相信唯有明白在每塊地形上的人類在同一個時間點時各發生了些什麼事,才能對接下來的世界局勢走向有更清楚的掌控。

註:高中時選讀的是自然組,國中與高一的地理、歷史都是在課本上硬畫重點強記而及格的,因此以上僅純屬個人推測的結論。如有人看後嘗試不同的讀法而導致死當的話,本人概不負責!

2007年12月25日 星期二

I09 如何學好英文

說起來,語言的使用也與程式設計扯上很大的關係,因為語言的使用同樣可以分為文法(Controller)與單字(Action),適用程式設計的思維。

首先我們可以把文法的句型視作為Controller,每一種句型都可以對應到一個想表達的想法(功能需求)。所以心裡在有某種念頭時,要能夠立即選用出對應的文法句型來;這個前提是心裡必須要存放所有文法句型以供需要時挑選。

再來是單字(Action)的挑選,單字的詞性可視作為Interface,整個句型的組成就變為只要挑選同樣詞性且符合心裡意義的單字即可。如此逐一把挑選的單字放入句型,完成後迅速在心裡從頭到尾檢查(測試)一遍,改掉有問題的單字並重新檢查直到沒有問題後就表達出來給對方知道。挑選單字時,當然心裡要有足夠的單字庫可查詢,否則你能表達的英文永遠只有那幾個字,所以背誦單字且明白詞性是一定要下的苦功。

要用英文表達時也切忌先用中文造句後再轉換為英文,應該在心裡組成“句子的意思”後直接成為英文;因為先組成中文於再轉換為英文,會造成先有中文變為意思再對應成英文的轉換時間差,同時會有使用英文卻得連中文都一起綁住,使得句型與句意的使用受到另一種語言的影響。想法直接組成英文句子是最理想的方式。

註:師長與同事一致認為我的英文實在不怎麼樣,如有人受本文影響改變學習英文的方式卻未見進步,本人恕不負責!

2007年12月24日 星期一

I08 廚師改行設計程式應是好主意

廚師是利用各式各樣的食材組成佳餚的重要角色,一名出色的廚師必須先知道要做的菜是什麼,還要明白每道食材的意義與可能造成的影響,才能選擇出最適當的食材並參考其影響來制訂出最理想的步驟以完成該道美食。

現在暫時把要做的菜視為需求、把烹煮的流程控管視為Controller、把烹煮的步驟視為Action、食材視為Component,我們可以改寫第一段的最後一個句子:一名出色的廚師必須先知道要做的菜(功能需求)是什麼,還要明白每道食材(Component)的意義與可能造成的影響,才能選擇出最適當的食材(Component)並參考其影響來制訂出最理想的步驟(Controller & Action)以完成該道美食(功能需求)。

在調理的時候,廚師還要視臨場狀況來決定是否增減某種食材或調味料,或者些微調整作法等等,就等同於系統設計時的狀況判斷與例外處理。由以上的觀察可以推知廚師除了重視需求的達成外,還會注意到使用元件的效果與影響,進而研擬出正確的進行步驟與方法;相信對具有程式設計思維的廚師加以基礎的訓練後,可以適用於開發系統的工作。反之,程式設計師也適合去當廚師。

雖然有位同事同樣具有烹調美食的能力,但是如果有人在專案缺人時找一群廚師加以訓練後就開始開發,我絕對不會擔負任何責任的;反之,如果聚會時直接把食譜與食材丟給程式設計師,最後搞到大家沒東西可吃時,我也同樣不會擔負任何責任喔。

2007年8月14日 星期二

D03 你會是什麼樣的神?

曾有人比喻說,設計系統的感覺有如創造世界的神一般,可以全憑個人的想法決定這個世界的模樣。現在想像你真的是一個萬能的神,第一個任務是任意佈置四尺魚缸,最低需求是要能有20條熱帶魚活在裡面。手邊有許多種類的水草、裝飾與魚類可以任意取用,這時你會怎麼決定這個水中世界呢?

“系統是滿足客戶需求的最小設計。“如果你的心裡響起了這句話,那麼這個魚缸裡就只會有20條顏色亂配的魚與產生足夠氧氣的雜亂水草被丟在裡面。用心的人會去規劃要有哪些種類、哪些顏色的魚,也會選用適當的細砂與裝飾,另外還會佈置水草的層次,說不定還會另外放入一些貝殼小蝦之類原先不在需求裡的項目。一切多出的投入都只為了讓這個魚缸的外觀與運作更加美好。

創造的世界要更好必然會有更多的工作項目必須去完成,每一個工作項目無可避免地需要時間與資源投入。特別做出的項目未必其他人察覺得到,但是那些項目卻經過計算而使得那個世界變得更不易出問題且好用。不管是神還是人,應該都會為自己即將做的一切想好未來所有的可能吧?

同樣的想法也對應到系統的設計上:你會把程式井井有條地規畫好並使之正常運作,甚至提供更多樣化的選項功能,還是把全部程式塞進一個大黑箱裡只負責功能正常就好?這正是你的抉擇!

2007年7月23日 星期一

C11 小朋友的親屬稱謂表

低年級的小朋友前陣子在苦背親屬稱謂表,一大堆叔、伯、姑、嫂、公、婆之類的名稱一下就讓小朋友頭昏腦脹,更何況還得去記得“爸爸的爸爸是爺爺“,”媽媽的姐姐是阿姨“等等這樣的人物關係。

教了幾種關係後,發現小朋友已經無法再多記,同時也感覺這樣的記法實在太耗費腦力;轉念一想,這個問題好像可以用OO的理念來解決耶。“人”肯定是獨立的個體,“稱謂”不正是從自己看出去後人與人之間關係總計後的結果嗎?只要定義好“人”這個類別,同時適當地決定與其他“人的關聯,那麼從關係求得”稱謂“是順理成章的。

“人”都有一位父親與一位母親(在這裡不討論例外情形)的長輩關係,同時有兄、弟、姐、妹四種同輩集合、子與女兩種晚輩集合、以及一位配偶關係。接下來從自己開始擺好課本所教的層數再拉上與人的對應關係,往長輩一層叫“父母層”、兩層是“公婆層”;父親的兄弟姐妹層的展開是伯、叔與姑姑,他們的配偶稱為伯母、叔母與姑丈;母親的兄弟姐妹層展開是舅與姨,他們的配偶稱為舅母與姨丈,依此類推……。

原先只能硬背的親屬關係在適當地切割獨立元件後,成為有條理可依循的關係圖表,相形之下學習者的可接受度與理解能力大幅地提升了。明明是相同的東西,經過設計與規畫再加以適量的說明,就可以把整個觀念傳遞給原先不清楚的人,這也是我們應該努力達成的方向。