2008年6月16日 星期一
RecordSet參數整理
rs.open的參數整理
當我們在撰寫asp的時候,結合資料庫難免會用的ADO的RecordSet物件
常常寫著rs.open sql,conn,3,3
但是那些數字代表什麼意義呢....整理如下
語法
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open Source, ActiveConnection, CursorType, LockType, Options
參數
Source 選擇性參數:
此 Variant 是為一個有效的 Command 物件變數名稱、SQL 陳述式、資料表名稱、已存的程序呼
叫,或是一個保存的 Recordset 的檔名。
ActiveConnection 選擇性參數:
不是 Variant 得到一個有效的 Connection 物件變數名稱,就是 String 包含
ConnectionString 參數。
CursorType 選擇性參數:
此 CursorTypeEnum 值決定提供者在開啟 Recordset 時應使用的指標類型。其可以是下列其中
一種常數。
常數說明
adOpenForwardOnly(0):開啟一個只支援向下捲動的RecordSet。(預設)
AdOpenKeyset(1):支援向上與向下捲動;可看到其他使用者對資料進行變動。
AdOpenDynamic(2):開啟一個動態資料指標,支援向上與向下捲動;可看見其他使用者修改、刪除、
新增的資料。
AdOpenStatic(3):開啟一個靜態資料指標,支援向上與向下捲動;看不見其他使用者對資料進行變
動(較適合asp使用)。
LockType 選擇性參數:
此 LockTypeEnum 值決定提供者在開啟 Recordset 時應使用何種鎖定 (同時性)。其可以是下列
其中一種常數。
常數說明
adLockReadOnly(1):唯讀,資料無法變更。(預設)
AdLockPessimistic(2):悲觀鎖定,提供者會進行必要的動作以確保能順利編輯資料錄,其方法通常
是在編輯時立即在資料源處鎖定資料錄。
AdLockOptimistic(3):樂觀鎖定,提供者使用樂觀性鎖定,當您呼叫 Update 方法時,僅鎖定資料
錄。
AdLockBatchOptimistic(4):樂觀批次更新,此為批次更新模式所需,與即時更新模式相反。
Options 選擇性參數:
一個 Long 值,表示提供者在 Source 引數代表 Command 物件以外的東西時應如何評估它,否
則 Recordset 應從前次儲存的檔案還原。它可以是下列其中一種常數。
adCmdText:提供者會將 Source 評估為指令的文字定義。
AdCmdTable:ADO 會產生一個 SQL 查詢,從 Source 中指定的資料表傳回所有資料列。
AdCmdTableDirect:提供者會從 Source 中指定的資料表傳回所有資料列。
AdCmdStoredProc:提供者會將 Source 評估為一個預存程序。
AdCmdUnknown:Source 引數中未知的指令類型。
AdCommandFile:保留的 (已儲存的) Recordset 會從 Source 中指定的檔案還原。
AdExecuteAsync:Source 作非同步執行。
AdFetchAsync:表示在 CacheSize 屬性中指定的初始數量被抓取後,剩下的資料列就會被非同
步地抓取。
2008年6月10日 星期二
聰明說話35招
http://mag.udn.com/mag/newsstand/printpage.jsp?f_ART_ID=129999
職場的應對進退要小心,以下歸納出35項國內外溝通專家的建議,幫助你學會說對話,贏得好人緣,
拉抬職場身價。
【文/吳凱琳;插圖/50cc】
讚美時,你該說……
1.讚美行為而非個人。
舉例來說,如果對方是廚師,千萬不要說:「你真是了不起的廚師。」他心裡知道有更多廚師比他還
優秀。但如果你告訴他,你一星期有一半的時間會到他的餐廳吃飯,這就是非常高明的恭維。
2.透過第三者表達讚美。
如果對方是經由他人間接聽到你的稱讚,比你直接告訴本人更多了一份驚喜。相反地,如果是批評對
方,千萬不要透過第三者告訴當事人,避免加油添醋。
3.客套話也要說得恰到好處。
客氣話是表示你的恭敬和感激,所以要適可而止。有人替你做了一點點小事,你只要說「謝謝。」、
「對不起,這件事麻煩你了。」至於「才疏學淺,請閣下多多指教。」這種缺乏感情的客套話,就可
以免了。
4.面對別人的稱讚,說聲謝謝就好。
一般人被稱讚時,多半會回答「還好!」或是以笑容帶過。與其這樣,不如坦率接受並直接跟對方說
謝謝。有時候對方稱讚我們的服飾或某樣東西,如果你說:「這只是便宜貨!」反而會讓對方尷尬。
5.有欣賞競爭對手的雅量。
當你的對手或討厭的人被稱讚時,不要急著說:「可是……」,就算你不認同對方,表面上還是要說
:「是啊,他很努力。」顯示自己的雅量。
批評時,絕不要……
6.批評也要看關係。
忠言未必逆耳,即便你是好意,對方也未必會領情,甚至誤解你的好意。除非你和對方有一定的交情
或信任基礎,否則不要隨意提出批評。
7.批評也可以很悅耳。
比較容易讓人接受的說法是:「關於你的……,我有些想法,或許你可以聽聽看。」
8.時間點很重要。
千萬不要在星期一早上,幾乎多數人都會有「星期一憂鬱」的症狀。另外也不要在星期五下班前,以
免破壞對方週末休假的心情。
9.注意場合。
不要當著外人的面批評自己的朋友或同事,這些話私底下關起門來說就好。
10.同時提出建議。
提出批評之外,還應該提供正面的改進建議,才可以讓你的批評更有說服力。
回話時,要小心……
11.避免不該說出口的回答。
像是:「不對吧,應該是……」這種話顯得你故意在找碴。另外,我們也常說:「聽說……」,感覺
就像是你道聽塗說得來的消息,有失得體。
12.別回答「果然沒錯!」
這是很糟的說法,當對方聽到這種回應時,心中難免會想:「你是不是明知故問啊?」所以只要附和
說:「是的!」
13.改掉一無是處的口頭禪。
每個人說話都有習慣的口頭禪,但會容易讓人產生反感。例如:「你懂我的意思嗎?」、「你清楚嗎
?」、「基本上……」、「老實說……」。
14.去除不必要的「雜音」。
有些人每一句話最後習慣加上「啊」等語助詞,像是「就是說啊」、「當然啦」,在比較正式的場合
,就會顯得不夠莊重穩重。
15.別問對方「你的公司是做什麼的?」
你在一場活動遇到某個人,他自我介紹時說自己在某家公司工作。千萬別問:「你公司是做什麼的?
」這項活動也許正是他們公司舉辦的,你要是不知道就尷尬了。也不要說:「聽說你們做得很好!」
因為對方可能這季業績掉了3成。你應該說:「你在公司擔任什麼職務?」如果不知道對方的職業就
別問,因為有可能他沒工作。
16.別問不熟的人「為什麼?」
如果彼此交情不夠,問對方「為什麼?」有時會有責問、探人隱私的意味。例如,「你為什麼那樣做
?」、「你為什麼做這個決定?」這些問題都要避免。
做面子,給別人……
17.別以為每個人都認識你。
碰到曾經見過面,但認識不深的人時,絕不要說:「你還記得我嗎?」萬一對方想不起來,就尷尬了
。最好的方法還是先自我介紹:「你好,我是×××,真高興又見面了。」
18.拒絕也可以不失禮。
用餐時,若主人推薦你吃某樣你不想吃的東西,可以說:「對不起,我沒辦法吃這道菜,不過我會多
吃一點××。」讓對方感受到你是真心喜歡並感謝他們準備的食物。如果吃飽了,可以說:「這些菜真
好吃,要不是吃飽了,真想再多吃一點。」
19.不要表現出自己比對方厲害。
在社交場合交談時,如果有人說他剛剛去了紐約1星期,就不要說上次你去了1個月,這樣會破壞對方
談話的興致。還不如順著對方的話,分享你對紐約的感覺和喜愛。
20.不要糾正別人的錯誤。
不要過於雞婆地糾正別人的發音、文法或事實,不僅會讓對方覺得不好意思,同時也顯得你很愛表現
。
21.不懂不要裝懂。
如果你對談話的主題不了解,就坦白地說:「這問題我不清楚。」別人也不會繼續為難你。如果不懂
還要裝懂,更容易說錯話。
看臉色,別衝動……
22.掌握1秒鐘原則。
聽完別人的談話時,在回答之前,先停頓1秒鐘,代表你剛剛有在仔細聆聽,若是隨即回話,會讓人
感覺你好像早就等著隨時打斷對方。
23.聽到沒有說出口的。
當你在傾聽某人說話時,聽到的只是對方知道、並且願意告訴你的。除了傾聽,我們還必須「觀察」
。他的行為舉止如何?從事什麼工作?如何分配時間與金錢?
24.時間點對了,什麼都對。
當你有事要找同事或主管討論時,應該根據自己問題的重要與否,選擇對的時機。假若是為個人瑣事
,就不要在他正埋頭思考時打擾。如果不知道對方何時有空,不妨先寫信給他。
去尷尬,有方法……
25.微笑拒絕回答私人問題。
如果被人問到不想回答的私人問題或讓你不舒服的問題,可以微笑地跟對方說:「這個問題我沒辦法
回答。」既不會給對方難堪,又能守住你的底線。
26.拐彎抹角回絕。
許多社交場合,喝酒總是無法避免。不要直接說:「我不喝酒。」掃大家的興。不如幽默地說:「我
比較擅長為大家倒酒。」
27.先報上自己大名。
忘記對方的名字,就當作是正式場合,向對方介紹自己的名字或拿出名片,對方也會順勢報上自己的
大名和名片,免除了叫不出對方姓名的窘境。
28.不當八卦傳聲筒。
當一群人聊起某人的八卦或傳言時,不要隨便應聲附和,因為只要說出口的話,必定會傳到當事人耳
中。最好的方法就是不表明自己的立場,只要說:「你說的部份我不太清楚。」
29.下達「送客令」。
如果你覺得時間差不多該結束談話或送客,但對方似乎完全沒有要起身離開的意思,可以說:「不好
意思,我得打通電話,時間可能有點久……」,或是:「今天真的很謝謝你來……」。你也可以不經
意地看看自己的手錶,讓對方知道該走了。
30.讓對方覺得他很重要。
如果向前輩請求幫忙,可以說:「因為我很信任你,所以想找你商量……」讓對方感到自己備受尊敬
。
評部屬,要恰當……
主管如何和部屬溝通,才能說得恰到好處又不傷關係?資誠企業管理顧問公司進行內部教育訓練時,
教導新手主管5項溝通守則。
31.直接描述現狀。
和部屬意見不同時,不要直接批評,而要說明不同點在哪。
32.尋求解決。
如果部屬績效不佳,應該要詢問他可以如何解決,不要採取威脅態度。
33.主動表達幫忙。
如果一時之間無法解決部屬的問題,不要說「這種事先不要來煩我」,而是告訴他「我知道有誰可以
幫忙」。
34.說話語氣要平等。
主管切忌說「我有十幾年的經驗,聽我的就對了。」比較好的說法是:「這方法我用過,而且很有效
,你要不要試試看?」
35.彈性接納部屬意見。
即使你心有定見,也不要對部屬說:「這些建議都考慮過了,不必再多說。」還是應該給部屬機會,
對他說:「關於這個問題,我已有了腹案,不過仍想聽聽你的看法。」
【2008年6月Cheers雜誌 會做事也要會說話】
2008年5月25日 星期日
如何自學程式設計 How do I learing programming in C++
引用自 http://kiwi.csie.chu.edu.tw/blog/archives/83#more-83
最近為了幫助學弟們學習C++,我整理了一些東西在這
現在已經要2007了,雖然說書還是要K,不過網路可以變成一種方便補助學習
根據C++的學習路徑,而分類幾個主題來列出相關網路資源
學習程式設計
必要條件:
* 自我學習
* 記住正確的詞彙
* 善用搜尋
* 分享及討論
* 學好英文
學習程式設計大概會遵照這個流程,從12開始之後因為所有的語言都一樣,所以只要學一次。接著你就會從1~11學習各種不同的語言:
1. 資料型態(Data Type):該語言能宣告什麼樣的變數於程式中使用?如int, float。Script語言如PHP通常只會學到純量(var),array,hash的用法。
2. 基本輸出入(Standard I/O):如何從鍵盤讀取?如何從螢幕輸出?STDIO的觀念。
3. 流程/迴圈控制(Branch/Loop Control):if…else/switch…case, for/while
如果有特殊的語法(syntax)也通常在此會學到
4. 函式(Function):function要怎樣宣告?呼叫?傳遞參數?
5. 特殊用法:如C++通常會學習到指標,Template。而PHP通常會學習到HTML或Javascript
6. 函式庫(Library):C/C++你應該學習Standard Template Library(STL)
7. 到這一階段你已經可以撰寫基本的演算法,如此你便能夠進行結構化程式設計(Structural Programming)
8. 類別(Class):學習宣告類別並初始化物件,和物件的存取子(accessor)
9. 例外處理(Exception handling):程式一定會出錯,可是如何去拯救?
10. 視窗程式設計:利用視窗元件重新撰寫以前的程式,並學習IDE的使用
11. 到這一階段你已經可以撰寫物件程式,如此你便能夠進行以物件為基礎的程式設計(Object-based Programming)
12. 繼承(Inheritance):繼承的觀念,以及如何利用繼承來設計及減少你的程式碼
13. 多型(Polymorphism):如何利用多型在多個類別/物件之間讓他們互動,也會提到一點設計樣式
14. 到這一階段你已經可以撰寫小型的應用程式,學校作業大多都沒問題,如此你便能進行物件導向程式設計(Object Oriented Programming)。到這裡你應該已經有可以打工的水準。
15. 資料庫系統(Database):你會學習如何使用資料庫儲存你的應用程式資料
16. 軟體工程(Software Enginnering):軟體設計的巨觀,從大的流程瞭解一套「軟體系統」是如何完成的,而程式的實做只是其一小部分。在此你會學習到UML等軟體設計中相關的文字,圖形,及術語。你也會學到傳統的Waterfall Model,有這些主題:
* 需求分析(Requirement Analysis):如何瞭解一個軟體他究竟要完成什麼,並確實地的記錄它
* 軟體架構(Software Architecture):在進行實做之前,先要進行設計
* 專案管理(Project Management):一套軟體要如期完成要有很好的時程控管,也會學到利用工具來管理你的軟體狀態(SCM)。
* 軟體測試及品質:這裡你會學到利用單元測試等方法來保障你的軟體品質
17. 設計樣式(Design Pattern):軟體設計的微觀,是前人將經常出現的軟體實做方式集合起來成為一個個「樣式」,讓你知道如何利用OOP來有規劃地撰寫你的程式。
18. 領域相關(Domain Specific):有許多不同的領域需要不同的知識,才能撰寫出不同的程式,你想要走哪個方向?目前熱門的有,
* OpenSource(開放原碼,需要瞭解社群精神,也需要熟悉Linux,C++)
* Web(要熟悉HTML,CSS,JS…以及多種Script語言)
* Microsoft(熟悉撰寫.Net並瞭解微軟產品架構及商業模式)
* 韌體/硬體相關(熟悉C及x86組合語言)
* 學術研究/升學(通常開放原碼的領域都會接觸,Java是主流。多練習ACM題目也有幫助)
19. 至此你可以有能力開發一套完整的軟體,如果你累積了許多程式實做經驗,畢業後就可以去找該領域的軟體工程師職位了。
幾個你總是得思考的問題:
* 我在哪裡?
* 我想要往哪去?
C/C++語言核心
什麼是C/C++?
C++是Bjarne Stroustrup於1983年於貝爾實驗室發明的 ,雖然是高階語言,確有低階語言的特性,所以也有人稱作他是中階語言。(參考C++)
書籍
http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html
http://squall.cs.ntou.edu.tw/cpp/index.html
http://www.books.com.tw/exep/prod/booksfile.php?item=0010178918
http://www.books.com.tw/exep/prod/booksfile.php?item=0010226566
http://www.books.com.tw/exep/prod/booksfile.php?item=0010264537
http://www.books.com.tw/exep/prod/booksfile.php?item=0010264536
參考
http://www.cplusplus.com/
http://www.cppreference.com/
http://www.msoe.edu/eecs/ce/courseinfo/stl/index.htm
物件導向程式設計(OOP)
什麼是Object Oriented Programming?
物件導向的觀念約在1960年發明,大概在1990年代成為主流。目的是以系統設計的角度或是真實情境來對應到程式設計上,幫助人去思考及撰寫。相關主題是UML。
http://www.books.com.tw/exep/prod/booksfile.php?item=0010189568
http://www.books.com.tw/exep/prod/booksfile.php?item=0010331221
視窗程式設計
目前視窗程式的作法有三種:
* 使用原生或衍生視窗函示庫撰寫。MS Windows上是Win32API, MFC。Linux上有Xlib, Qt, Gtk+。
* 使用Java或是.Net撰寫,這些是類似VM的作法(跨平台)
* 使用連結至tk的函示庫撰寫:PHP-Gtk,Perl-tk等,很多script語言都有支援(部分跨平台)
Java Swing:
http://www.oreilly.com.tw/product_java.php?id=a099
.Net(C#):
http://msdn.microsoft.com/library/cht/
2008年5月14日 星期三
Ford-Scorpio-2.0-16V-136HP-17.9kgm
2.0升16V車型而言,其最大馬力與最大扭力分別為136hp/6300rpm與17.9kgm/4200rpm,
引擎怠速為穩定的750rpm,斷油轉速則在 6100rpm,
還好我們家的 Scorpio 有「雪地模式」,
才能不上雪鍊也能輕鬆過關。突然間,更愛惜我們這台骨董車了!
講了這麼多,其實只是想介紹一下 Scorpio 這輛車,
這是在網路上找到的「僅存」車評文章,是從google「庫頁存檔」中挖出來的,因此沒有來源連結。
其實,當天也不確定雪地模式有沒有作用,只是知道有個按鈕有「雪鍊」的圖樣,
想說應該跟雪地有關,於是把它按下試試,才意外發現這個實用的功能。
於是回家之後便想了解一下甚麼是雪地模式。
目前以2.0/2.3升車型為主力/原廠另有2.9升性能車型
與舊型的Scorpio車系相同,新型Scorpio亦有2.0升及2.9升兩種設定,
隨著改型而來的新款引擎也較舊引擎來得更為先進,以 2.0升引擎為例,舊引擎為8氣門設定,輸出為115hp與17.3kgm,
新引擎則為16氣門設定,輸出則上升為136hp與17.9kgm,
2.9升的6缸引擎的引擎輸出更從舊有的145hp上升到207hp,
當然啦﹗氣門數也從12變為24,以本文所試駕的Scorpio
2.0升16V車型而言,其最大馬力與最大扭力分別為136hp/6300rpm與17.9kgm/4200rpm,
引擎怠速為穩定的750rpm,斷油轉速則在 6100rpm,
以平均水準來看,這具引擎在噪音及振動的控制較舊款引擎精良許多,
在良好的車室隔音之下,引擎的運轉尚稱平順,引擎的精致度被刻意的加強,
據了解,在Ford New Scorpio上所使用的2.0升16氣門引擎,與Mondeo 2.0所使用的引擎款式為相同的設定,
不過 Mondeo將這具引擎設計為橫式排列,而Scorpio則將這具引擎「直」的擺放在引擎室內,為何會有這種差異,
因為Scorpio為後輪傳動設計(注 ︰目前在德製的中、大型房車上仍採用後輪傳動的車輛並不多,
BMW新五系列、M-Benz新E-Class、及Ford New Scorpio皆為前置引擎後輪傳動設計),
嚴格上來說,以136hp與17.9kgm的動力輸出來推展重達1450kg的諾大車身,可想而知的,
動力性能並不是Ford New Scorpio所擅長的地方。
但Scorpio這具引擎卻使用了可變進氣系統(原廠稱為︰VI System),
從技術資料顯示,藉由這套系統可以改善低速時的扭力回應。
三模式四速變速箱/日常使用綽綽有余
Ford Scorpio所使用的電子式四前速自動變箱為GM所研發之系統,
它具有三種模式可供選擇,分別為雪地、經濟與跑車模式,
在雪地模式中、變速箱將以二檔起步,以防止胎環因輸出的扭力過大而打滑,
其餘的經濟與跑車模式,我想也不用再多加解釋,也由於馬力重量比的緣故,起步加速並非 Scorpio所專長,
但隨著油門開啟幅度的大小,變速箱非常稱職地將動力完整地分發到每一個檔位之中,在每一個檔位的銜接上,
筆者刻意地觀察其換檔振動,經過來回的反覆試車,這具變速箱對於換檔震動的抑制相當成功,
在每一個換檔過程中,變速箱電腦會將換檔信號告知引擎監理系統,
同時,引擎的點火正時在變速箱換檔時將被瞬間落後,此舉的最大目的在於減少換檔時所造成的振動,
當然啦,油壓設計的引擎支柱及新設計的扭力轉換器都居功不少,
以本地對於自排的需求來看,Ford Scorpio的變速箱確實綽綽有余﹗
對抗坑洞能力一流/轉向特性略帶過度
Ford New Scorpio的前懸吊為麥弗遜式支柱,後則為多連杆架構,
在軸距近2800mm的余威之下,Ford New Scorpio擁有極為優異的乘坐舒適性及高速穩定柱,
整體的懸吊設定為典型的舒適取向,話雖如此,New Scorpio的底盤卻擁有極為優異的韌性,
減震筒總能在最短的時間內,抓住彈簧所產生的彈跳,
在優良的底盤隔音之下,Ford Scorpio擁有絕佳的避震能力,不知道這種特質是否為許多德系中、大型房車所共同擁有,
Ford New Scorpio處理坑洞的能力若與奔馳新E-Class相較,兩者絕對可以相提並論,
在操控性與轉向特質上, Ford New Scorpio是一輛標準的「舒適車」,
她絕對不適合山區彎道中的劇烈操駕,雖然Ford New Scorpio因為後驅帶來些許的轉向過度,
但在車行速度控制良好的前提之下,轉向過度並不容易出現,
簡而言之,Ford New Scorpio的底盤穩定而安全,這點讀者不可不知。
車室空間極為寬廣/組裝品性頗為精良
若說起Ford New Scorpio的乘坐空間,那可就值得大書特書了,
在良好的車室設計概念及長軸距的雙重輔助之下,Ford Scorpio的車室空間,堪稱空前絕後,簡單的說就是夠寬的啦﹗
前後座如果同時塞下壯碩男子,車室空間依舊寬裕,在組裝品性上,Ford New Scorpio仍然保有日耳曼民族應有的組裝水準,
在深色系的內裝色調處理下,仿桃木紋飾的出現,為冷調的日耳曼風格帶來些許暖意,
各式零組件的嵌裝與間隙控制均相當精良,在良好隔音及避震的雙重防護之下,
Ford New Scorpio並沒有明顯的車身及內裝異音,這也是它的另一個值得稱揚之處。
試車短評
車壇發展至今,同質化的問題一直困擾各大車廠的車身外型設計師,
各車廠的設計師無不絞盡腦汁努力地將流線與車廠道統合而為一,並試圖表現下旗下每一款新車之上,但成功的又有多少?
一部78年份的Alfa GTV為何至今仍為車迷內所津津樂道,
其緣由在此,光看Ford New Scorpio的外型,就可以讓人足足站立三分鐘,因為Ford大膽地將「概念車」的理念使用在量產車之上,
Ford New Scorpio讓人印象深刻的程度絕對遠超過一般日系車種,這絕對是無庸置疑的。
Ford New Scorpio的齊全配備(雙Airbag、ABS、紅外線防盜…),與超人一等的乘坐空間足以彌補略顯不足的動力性能,
氣派的尺碼與先進的型式與其他歐系同級車相較亦不遑多讓,
對於一部德製的後驅的大型房車而言,價格將是另一個影響消費的原素,
如果你(你)是一個理性的消費者,Ford New Scorpio將是一款不錯購車選擇。
2008年5月7日 星期三
持續讓程式碼保持進步的能力
| |
| 從預先做的設計準備及未來成本,選出最佳平衡,因為最適合未來的,不一定最適合當下。隨著環境動態地演化,才能保持在最佳狀態。 | |
| | |
| 需求的擴充及變化,幾乎是軟體開發中不變的現象。面對這樣的狀況,設計者若是嘗試著預見未來,提前做好相關的因應措施,一次便將滿足需求的設計到位,便很容易落入過度工程化(over-engineering)的陷阱當中。 試著一次到位的心態,是產生了問題,然而,面對許多設計者所不願處理的需求擴充及變化,我們還曾經給過以下的建議:「讓你的軟體架構,具有好的體質,足以 快速的反應。具有彈性,又不會過度擴張彈性。」,「初期只有基礎的彈性,每次變化後,都再加強一個等級的彈性,使得它足以通過下一次變化的考驗。」,其 實,這樣的建議想表達的,便是讓你的程式碼持續保持演化的能力。 真實世界中的生物,必須面對環境的變遷,進而持續演化。但是,沒有任何一種生物,能夠預知千萬年後世界的風貌,使得自己在最初的時候,就變成最適合未來的長相。因為,最適合未來的,不意謂著最適合當下。一直隨著環境動態地演化,才能保持在最適合當下的狀態。 最初的設計需適當地加以預估 程式碼所面對的需求變更,就好像生物所面對的環境的變化,只有持續演化,才能讓程式碼不斷保持在最合適的狀態。因此接下來,我想試著探討程式碼的演化之路。 程式碼的變化,基本上有幾大類:一、擴充;二、變異;三、萎縮。 擴充指的是為系統擴充新的功能,使得它具備更多的能力。變異指的則是修改系統現有功能的行為,使得它改變固有能力的展現方式。萎縮,指的則是將系統現有的功能予以廢棄,之後不再使用,這形同削減了系統的既有能力。 當我們遭遇到上述的三種變化時,我們應當如何因應呢? 在談如何因應這三種變化前,我們應當先來談談「如何做出最初版的設計」。最初版的設計,無疑地,必須符合最初的需求。 設計必須滿足需求,這是最基本的。但我們的設計還必須提供更多的可能性。許多設計者會在最初版的設計就遭遇到困難,因為他們的腦海裡,一心只想要 解決眼前的問題,也就是滿足自己所看到的這一份需求規格。運氣好的時候,需求不動如山,「能捉老鼠的就是好貓」,可以滿足需求的,就是好設計。但是,很少 會有這種運氣──不論專案或產品的開發,需求的變更,皆屬兵家常事,所以在做最初版的設計時,就必須先預測需求下一步會往哪裡變化。例如,在開發一個電子 商務網站時,雖然最初的需求規格,僅提到要連接某一個付款的閘道(payment gateway)。但是,從對專案的背景及氣氛,甚至是客戶的預告,有時可以嗅出未來必須支援其他付款閘道的可能性。 一名好的設計者,在做最初的設計時,雖然只會實作連接單一付款閘道的機制,但是,他會在設計中暗自埋下伏筆──預留擴充的空間。使得他日一旦連接其他付款閘道的新需求正式納入規格時,就可以輕易地加上另一臺付款閘道的連接機制,卻同時又對現有程式碼的影響很小。 如何辦到上述的設計呢?舉例來說,當你已經預知付款閘道,可能要同時支援多臺而不只是單臺時,你可以選擇用一個介面來表示付款閘道的功能,而以一 類別實作立即必須支援的付款閘道介面。假如要用這臺付款閘道,你可以有很多選擇,最簡單的方式是直接產生該類別的實例,但將它轉型成為介面後再使用。好 比: PaymentGateway pg = (PaymentGateway) new PaymentGatewayImpl1(); 你也可以考慮在此時,便引入一個Simple Factory Method的設計模式,直接讓程式碼與PaymentGatewayImpl1完全無關。 PaymentGateway pg = PaymentGatewayFactory.create(); 倘若採取第一種寫法︰當確定要加入第二個付款閘道的機制時,程式碼的變動就會比較多。因為你得逐一找出程式碼中,所有利用new去產生 PaymentGatewayImpl1的地方,然後改以泛工廠族系的設計模式,來產生具體的付款閘道實作。不過,有個優點是,所有使用 PaymentGateway介面的程式碼都不會影響到,而這正是先前在「類別物件的生成」一文中所提到的。 倘若採取第二種寫法︰確定要加入第二個付款閘道的機制時,程式碼的變動較少。因為只需要擴充PaymentGatewayFactory的內容,其餘程式碼毋需變動,變動的幅度因而更小了。 從已知的情境去推估,謹慎控制準備的規模 從這個例子,你可以觀察出來幾個要領。 首先,雖然要避免過度工程化,卻意謂著我們還是得預測未來,但並非全面的想像。我們在演化程式碼時,儘管不要求要精確的認知未來,卻需要試著從大 方向上去察覺趨勢。我們不確定會加入什麼付款閘道,甚至難以確定究竟客戶會不會真的想加入,所以,我們提前做了一些準備,可是這準備又沒有做足。 不立即做,是因為不想將力氣浪費在也許不可能發生的事情上,但我們仍舊要做一些準備,是因為必須考慮到這事會發生的可能性。 好比上例中的設計,我們沒有真的實作出所有的付款閘道機制,在第一種設計中,我們甚至連Simple Factory Method都省去了(雖然省去Simple Factory Method節省不了多少力氣,不過在此例中是為了突顯預先做準備,還是會產生投入程度的差異)。但是,這樣的準備,就足以讓我們確定一件事──要支援其 他付款閘道時,對自身的程式碼衝擊應該控制到最低的程度。這便是我所謂的「為下一次的變化做準備」。我們並不是直接就變成那樣,但是妥善地準備,盡可能將 節省額外再投入的力氣。 準備多寡與花在變更的力氣大小成反比 上例中,我們同樣是試著為下一次的變化做準備,方式卻有兩種不同等級的差異。有時,我們會選擇花較少的力氣、準備少一點,等到需求確實發生時,在變更上再多花一點力氣。有時,我們會選擇花比較多的力氣,多做準備,這麼一來,倘若需求確實發生時,花在變更的力氣就會少一些。 事實上,這中間或許存在多個不同的層次,如何選擇呢?這端視設計者對需求發生可能機率的評估。倘若設計者認為機率偏高,那麼就可以考慮多做準備。 反之,準備少一點也無妨。因為機率多半沒有任何量化的標準,設計者不妨選擇C/P比最高的準備方式,選擇初期投資(預先做的設計準備)以及未來成本(需求 變化造成的衝擊)的最佳平衡。或許這是一場設計者在開發過程中的賭局吧! 在每一階段,設計者都應該試著替下一個階段作打算,儲備變化的能量,盡量讓一個階段與下一個階段之間保持小幅度的調整,記住!不要一次引入過於巨大的變化,讓程式碼往正確的方向演化,做法上將更靈活,不必多走冤枉路。 作者簡介: 王建興 清華大學資訊工程系的博士研究生,研究興趣包括電腦網路、點對點網路、分散式網路管理、以及行動式代理人,專長則是Internet應用系統的開發。曾參與過的開發專案性質十分廣泛而且不同,從ERP、PC Game到P2P網路電話都在他的涉獵範圍之內。 |
2008年4月29日 星期二
分手的100個理由2008年 3月號 君子雜誌
| 分手的100個理由2008/03/13 | |
| ‧Esquire君子 | |
| 誰說男人分手很迅速,有時女人分手也很有狠勁,快閃到讓男人搞不清楚狀況,還沒喊痛,對方就人間蒸發了。 | |
| 【Text/鳥來伯;Illustration/Kris】
女人想分手,理由都很多,但絕不是一時間的,絕對是冰凍三尺,非一日之寒。這有分「預謀殺人」與「臨時起意」,前者是早就醞釀分手很久了,只是在等男人犯錯而後誅殺;後者是本來就沒這麼愛,食之無味、棄之無理,突然出現壓垮駱駝的最後一根稻草,於是什麼都不必說了,再見不聯絡,跑得跟見鬼一樣。
急驚風遇上慢郎中 有些女人很愛說教,一天到晚要男人做這做那,規範標準一牛車。男人剛開始因為愛她,就真的有在做,後來慢慢皮了也疲了,到最後是根本當放屁;這就犯了想掌握全局的女人大忌,搞到最後也不必改了,直接分手就對了。有些急性子的女人手腳很快,與情人去百貨公司的地下美食街很會「插隊」,但是一點完餐,回頭看到男人竟然不占位子,慢吞吞地東張西望就很火大,飯沒吃完就想說再見了。男人大概會想:「有這麼嚴重嗎?」但女生心裡早就千山萬水地開始內心戲幻想:「以後要是生孩子,難道要等你找到醫院嗎?」、「做愛等你勃起,人家都乾一半了!」男人大概會想,只不過吃飯手腳沒快一點,在那邊計較什麼? 但,這就是女人! 逛街最容易讓男女吵架。跟男友逛街時,發現男人對於品牌不懂裝懂,被店員推翻指正,還死鴨子嘴硬,常讓女人感到非常丟臉,要他平常多看男性雜誌也不聽,到底有幾張臉可以丟人現眼?女人拿起一件衣服東比西比,問身邊男友的意見,對方只會說「都可以」、「隨便」、「太貴就不要買」,讓人覺得很沒參與感,積極一點是會怎樣?但是男人意見太多也不行($#%^&,女人真的很難打發),如果對女人看上的東西品頭論足,東扯西扯,更會讓女人認為:「到底是誰在用啊?」約會時漫無目的地亂走,不能細心地體察女人眼神瞟過一間又一間櫥窗,到底是想還是不想駐足?也會讓女人氣結,認為男人一點都不了解她,「是不是要到分手才會了解?」只能說,只要是對男友不爽想分手,女人可是每一樣都可以挑毛病。
遜咖男友早分早超生 有時候,是個人的品質問題。 交往久了,女生漸漸發現男友並不是這麼可靠。例如發生事情時,只會手足無措地看著她,無三小路用的表情會讓女生很不安。女人基本上還是喜歡強者,喜歡被照顧與聆聽,那是一種生物本性,繁衍後代必須找強者。所以男人可以脆弱,但拜託不要一天到晚唱衰,會讓女生很害怕:「跟他到底有沒有將來?」有些男生很會找樓梯下,下得好就很有智慧,但是下不好就會讓女生內心摔倒,例如:沒種處理,還自圓其說扯半天,「不想惹事啊」、「事緩則圓啊」,比較衝動的女生就會抱怨:「不會就說不會,講半天屁話,我還需要你跟我說這些嗎?」 強者歸強者,態度太硬的男人也會讓女生搖頭(媽啊!女人好煩啊)。有些男生不會喝酒,但是硬是要喝,結果喝醉還讓女生送回家,實在很廢材;有些人去pub不會跳舞,但還是要下場去跳,結果跳得像土風舞,讓女友想問:「您哪位啊?」太瞧不起女性的男人,常常都是新時代女人的敵人,例如認為女人開車很遜、賺太多錢沒屁用、單獨旅行只是找死,也會讓女生打消跟他繼續「走下去」的念頭。比較有心眼的男人就更不用說了,有人會藏錢不實報,例如年終,其實女生才不想坑他的錢,財務畢竟是個人隱私,但就是不知道對方在掩飾什麼,好像沒把她當自己人,想到就歸藍波火。有些則是祕密與前女友見面,或是交往中還跟別的「有機會」的女人約會,一點誠意都沒有,好像自己還是單身漢,被發現也只是說:「喔,忘了跟妳說而已。」這種男人還能繼續下去嗎?
情人節分手快樂 有個朋友原本就要死不活的了,碰上情人節張燈結綵的氣氛使然,本想規劃節目,找回往日的激情,但沒料到已然刺激不了多年來的死氣沉沉,反而冷淡與厭惡的感覺更甚往日,兩人突然醒了,在當天勇敢地協議分手,雙方都鬆了一大口氣,「分手那刻,突然才有過節的快樂!」有的女人則是講了好多次分手,男友依舊當她在鬧脾氣,於是她鐵了心,憤而在重要節日切八斷以此明志,「老娘是玩真的~」有些人則是逆向操作,用情人節來當分手的籌碼,希望獲得男友更多關注,畢竟在這個「注重顏面」的節日裡,有情人都不願意孤孤單單地度過,對方為了「順利過節」,也只能傾盡心血挽留她,暫時消弭分手的戰火。 有的女生像糾察隊一樣,喜歡用雷達偵測男人的舉止,然後加分扣分,我個人覺得很無聊啦,但身邊的姊妹都很奉行「外在可以看透內在」這一點。當然最基本的,不能有腳臭、汗臭、狐臭,有的男人外表是世界一等一,但一擁抱就臭氣薰天,女生掙扎說:「不要~不要~」他還以為是欲擒故縱,這是要女人怎樣收驚才好?有的男人指甲總是藏垢,又不喜歡剪,總是用亂咬的,想到如果要跟他「指交」,就免了吧!最可怕的是小指留指甲的男人,好像「公公」一樣噁媚,不懂他到底是留什麼意思的?還有人喜歡摳摳耳朵,再挖挖鼻孔、玩玩鼻毛、彈彈鼻屎,最後把指縫裡的鼻屎屑擠出來吃掉,看得女友心驚膽跳,中飯都從胃裡嘔出來了。 跟男人吃飯也很刺激,可以發現分手之日不遠矣。有些男生吃飯後,喜歡拿牛排刀或叉子剔牙,看得高級餐廳服務生一楞一楞的。大家別以為喝湯不出聲,菜餚不沾身,是眾所周知的國民禮儀,還是有人會把西餐碗舉起來灌、吃完一道菜滴得滿桌都是油,沾得領帶花亮花亮的,都幾歲的人了?有的男生很可愛,菜單上面杏鮑「菇」唸成杏鮑「茹」,牛「丼」唸成牛「井」,好殺的鄉巴佬啊,真的天才到爆點。再不然就是開始批評女人、男人與同事,讓原本想介紹他給好姊妹認識的女友覺得丟臉;或是講話一直噴口水,在很近的距離內放臭屁,臭到一旁的朋友都聞到了;要不就是飯後當紳士搶付錢,回家後再跟女友算錢,更爛的是邊付邊講:「現在景氣真的很差,吃一頓飯就花了多少多少錢。」有夠帶不出場,讓同行的朋友很尷尬。
感情也要設停損點 第一次過夜,也能讓原本要好的情人看破手腳。有的女生發現男友用完乳液後會拍拍臉頰,一副很清爽的樣子,但卻太娘們了;驚覺對方上完廁所不洗手,再回來摸她的身體;要不就是尿完噴濕馬桶,講100次也不把馬桶蓋掀起來;早上赫然見到牙刷上居然有菜渣,或是發現牙刷居然是乾的──整晚都沒刷牙,衛生習慣讓人髮指!有的男生喜歡把襪子塞在鞋子裡,塞好幾天都不洗,周一到周五都是那一雙,晚上上床怎可能再讓他用穿5天同一雙襪子的腳磨蹭?有的男生很體貼,會幫女孩子掛衣服,但是大概是平常沒做家事,毛衣亂扯亂掛,一早起來要穿時,毛衣肩膀部位都變形了,這種被扣分也很可惜。 以上例子,皆是活生生血淋淋的真實故事。鳥來伯常覺得,女人真是小鼻子小眼睛小心眼,常常只會注意到小地方,然後小事化大,嚷著要分手。其實男人也沒這麼該死,或許在他們心中,不劈腿、努力賺錢、把女人當人看,就已經很夠意思了。有些男人則是認為能在心愛的女人面前表現真正的自己,這段感情才能長長久久,豈料把自己的私生活一絲不掛地攤在對方面前,竟然招致分手,搞得之後交女友都戰戰兢兢、哭笑不得,深怕一不小心就莫名其妙地出局了! 男女交往的節奏不對,要撐也是很辛苦。所以,如果真的碰上不分青紅皂白就喊停的情人,說真的,還是早早讓她走吧!留著也是毒瘤一顆,還要天天伺候,看主子臉色過日子,不如能捨能得,把分手的主控權要回來,瀟灑地跟她說:「不陪妳玩了,再會!」今天很殘酷,明天更殘酷,但你會發現後天世界很美好!
詳情請見http://www.masterstyle.com.tw
【2008年 3月號 君子雜誌】 |

