Archive for the ‘衝突’ Category

昨天寫的〈測試驅動開發要徹底重構〉,曾經提到 Steven 說到「如果像閣下文中說:『系統不斷演進及需求不斷改變之下,也可能會使架構或設計愈來愈複雜而變得難以維護』,我則認為是在進行 TDD 時候沒有徹底去重構系統。」,同人認為這段話有根本上的邏輯的繆誤,於是回應:

假如上面的話是成立的,那麼代表只要徹底重構系統就不會造成「系統不斷演進及需求不斷改變之下,也可能會使架構或設計愈來愈複雜而變得難以維護」嗎?如果是這樣,那 XP 根本就不需要 Refactoring 這個實務來改善程式的結構,因為你都徹底重構程式,程式結構變差的情況是根本不可能發生。

而且依照本人 20 年來軟體開發的經驗,我還不沒有看到有程式一開始就寫得很好,到後來可以不用改變架構而符合新需求的。倒是隨著對問題的更清楚,或是程式需求的變化,讓程式必須重構的現象時常履見不鮮!

所以如果自以為自己博覽群書,很懂得TDD的實務。也不要忘了用心思考,以免自己對TDD的最佳實務的認知,不小心犯了根本上的邏輯繆誤?

結果,後來同人在 Facebook 的 Scrum community in Taiwan 看到 Steven 做了以下的回應:

先說件簡單易明的事情,其實我很不喜歡閣下把 TDD 放到 『精神』 層次,卻忘記了基本步驟。

之前的討論根本連事實層次都被忽略,根本談不上是什麼多少年的經驗或者如何用心思考,連 TDD 的最基本步驟也忘記,TDD 的基本步,不是閣下做多少年工作就可以把人家的定義去改變的,我也不明白為何有 20 年工作經驗就可以把 『Refactoring』 說成 『並不必然是 TDD 的必要的步驟』,這不是邏輯問題,更不是有過什麼開發經驗然後用心思考就可以改變的事情,這是就算對軟體開發的認知不夠閣下那麼 『全面』 的都能看出的謬誤,如果閣下這樣就認為是因為說不過閣下就建議多看書本,本人深表遺憾。

我是來討論問題的,我沒有興趣去傷害閣下感情,好好閱讀書本,只是反映 TDD 三個步驟是什麼根本不存在爭議,更沒有 『好好閱讀什麼書或文章才能跟我討論』 的意思,我還未自大得要別人看過多少書才可以討論問題,亦正如討論問題我也不用跟別人說我有多少年工作經驗一樣,而且本人是衷心認為多讀書是有益的(不管是閣下還是什麼人),多讀書亦不是為上來辯論的,不過閣下如果感到有所不悅的,我就先行道歉,還是希望冷靜一點討論問題。

而簡單的例子也是思辦的過程的一部份,一方面是簡單易明地討論問題,另一方面是如果連簡單的例子也說不通,又怎麼能去談更複雜的問題呢?

上面提到:』那XP根本就不需要 refactoring 這個實務來改善程式的結構,因為你都徹底重構程式,程式結構變差的情況是根本不可能發生。』

不如冷靜一點再讀讀這句子,』XP 不需要 Refactoring 是因為徹式地進行 Refactoring』,我就看不明白這是什麼邏輯,一邊說不需要,另一邊說徹底地進行。

這裡的問題是軟件是會改變的,可能是新增功能,也可能發現有其他問題,每次帶來的變更其實都需要進行重構的。所以說 XP 不需要 Refactoring 也不正確。

世上的確沒有一寫就好的代碼,而且世界是會變的,Refactoring 就是避免以後的更改越來越困難。把 『徹底地進行重構』 理解成 『XP 不需要重構這實踐』 完全沒有邏輯可言。

我也沒有反對不用改變程式架構就能滿足新需求,亦沒有否定 Refactoring 的重要性,只不過我還是建議新的功能以 TDD 方式進行開發,有測試、有代碼、然後進行重構的。

在足夠測試覆蓋下進行重構是可使系統在不斷演進及需求不斷改變之下,使架構或設計仍然處於可以維護的狀態,相反我指出的是,如果程式架構和設計越來越難維護,是重構的力度不足夠。

前面還提到:』但重構的目的為何?就重構的定義在不改變功能的情況下改善程式結構,以增加程式碼的彈性以利未來增加或改變功能。因此如同那第三步所言,為了去掉重覆性而重構。』

如果重構只是為了去掉重覆性,那 TDD 的第三步不如叫 『Remove Duplication』 好了,無可否認代碼重覆是很常見的問題,但把這裡的重構限制成消除代碼其實會局限系統的將來發展,而且到了 TDD 的第三步,系統是應該有足夠的測試去覆蓋系統,重構的力度沒理由只局限於新增功能和現有程式的重覆。

我就相信閣下是 Refactoring 的專家,也應該會知道一些 Refactoring 的模式是完全相反的,例如 『Pull Up Method』 和 『Push Down Method』,更是需要觀察當時的情況來作決定,而沒有一面倒那個才是好的模式,我實在不明白為何要把 TDD 的 Refactoring 局限到只做 『去掉重覆性』。

這是實務上會發生的事情,消除代碼重覆以外的重構還是會發生的,如果只是單單只是 『消除重覆』,這會是另一個我認為進行重構不夠徹底的事情。

上面已經不單單是用心思考,而是由理論到實踐都可以看得到的事情。

跟討論 Refactoring 和 TDD 觀點以外的聲音,就引用 Chet Henderickson 的說法,全部都是我錯好了,現在可以解決問題嗎?

看了 Steven 的回應,同人當下的反應是不想浪費時間與心力與他周旋下去,但後來想到或許是因為 1/9 敏捷開發分享會我要分享實施 XP 的經驗與心得,也許這是一個巧妙的同步事件。我可以趁這個機會,導正對 XP 或是 Agile 的一些錯誤觀念。

例如敏捷開發並不是教條式的照本宣科,開發者要懂得變通最重要的是用心思考,而非把必要的思考都看成精神層面的問題,這並非適用於敏捷開發的心智模式。以下是同人在 Facebook 的 Scrum community in Taiwan 的回應,但一些詞句有略為做過一番修飾,以清楚表達我對測試驅動開發步驟的看法。 Read the rest of this entry »

23
十一月

名牌數位相機的維修服務

   Posted by: jim yeh   in 問題解決, 溝通, 生活感觸, 組織, 職場, 衝突

一個月前,同人買了一台新的數位照相機。當時我比較了幾種不同廠牌的機型,覺得 OLYMPUS 的 FE3000 看起來還不錯。在外觀、功能及價格上的比較上,似乎是比較經濟實惠的選擇。而且在印象中,OLYMPUS 是照相機中的世界知名品牌,品牌形象還不錯,所以最後就決定將它購買下來。

經過一個月來的使用,這台 FE3000 用起來還蠻順手,直到最近因為無法透過 USB 連接線輸出照片,才發現 USB 的連接埠故障。老婆到總代理元佑實業要求維修,才發現 OLYMPUS 這個世界名牌數位相機的維修服務,竟是如此糟糕而令人失望。 Read the rest of this entry »

22
九月

家族中的三角關係

   Posted by: jim yeh   in 問題解決, 學習, 心理, 新時代, 溝通, 衝突, 親子關係

最近在河道上看到噗友談論父母的感情糾葛與他的觀感,讓我想到家族中的三角關係;當孩子介入父母之間的糾紛,常會讓家族的問題變得相當複雜。這種親子之間三角關係的拉扯,通常會造成不為人知「家庭秘密」,並且在家族代間相傳,限制人的心靈自由,阻礙人的成熟發展。無形之間,我們的人生受此影響甚鉅。

同人曾經和老婆一起探索我們的家族圖,那是她在研究所「家族治療」課程的家庭作業。我協助她繪製出我們婚姻結合的家族圖,並且透過探索與討論,我們看到家族之間的三角關係是如何影響雙方的家庭,並且發現那些傷人的秘密其實是因為上一代關係的需求沒有被滿足,轉而將希望投注在下一代身上。而下一代就不知不覺地受到上一代的陰影所影響,甚至因此造成一些家庭悲劇。

那麼家族中的三角關係是如何形成的呢? Read the rest of this entry »

26
六月

關於認清意義

   Posted by: jim yeh   in 問題解決, 學習, 心理, 思考, 新時代, 生活感觸, 衝突, 閱讀

上周控制理論的研習課程列舉了一些學習控制理論的原因,提到為了真正擁有、學會享受、懂得欣賞、認清意義、讓生命更充實、以及更實際,所以應該聚焦學習控制理論的課程。其中同人對「認清意義」有一些想法,於是透過這篇文章來分享我的看法。

在生活中放下掌控是一件不太容易做到的事,因為掌控是讓我們做一些事情好讓我們感到對問題不用再焦慮。然而,當被我們控制的對象會因為受到掌控的焦慮而與我們關係緊張時,那將會產生我們更大的焦慮,而造成我們人生的憂鬱。如此我們將得不到屬於我們生命的意義,讓我們的生命感到快樂而充實。

為什麼我們無法感受到快樂而充實的生命呢?因為我們心目當中,所謂的「優質世界」圖像無法實現,無法和對和我們有關係的人一齊去做有趣的事情。但為什麼做不到呢?因為掌控拉開彼此的距離,更有甚者,關係惡化到必須改變我們優質世界的圖像,而這樣的結局又讓彼此都很痛苦,尤其是我們總是傷害我們心愛的人最深。

假如我們可以認清生命的意義,就可以放下掌控以實現我們優質世界的圖像。 Read the rest of this entry »

6
五月

以憤怒抗爭的命運

   Posted by: jim yeh   in 學習, 新時代, 生活感觸, 職場, 衝突

上禮拜六同人全家去擎天崗遊玩,在坐上國光客運的時候,老婆由於未諳悠遊卡的使用方式,隨口問司機是上車刷卡或是下車刷卡,結果卻被他責怪了一番。司機說:上下車都要刷卡,寫得那麼清楚自己難道不會看嗎?司機的不客氣,讓老婆在坐上位置的時候嘀咕了一下。後來,在下車前,由於我找不到下車鈴,於是提前跑到前面刷卡表示要下車,結果那位司機又說:下車應該先拉鈴。我反應找不到下車鈴,在司機回答在座位的上方時,我才發現我的語氣也有點對他不客氣。

我們在泰北高中站下車之候,老婆提到那位司機脾氣真大,我說大概是因為司機工作壓力大吧。這時老婆表示壓力抒解真的很重要,她還說她看到其他乘客對悠遊卡的使用也不清楚,但那位司機面對詢問甚至相應不理。同人認同老婆的看法,如果那位司機真的是壓力大而對乘客態度變差,或許只是無心之過。不過顯然這樣已經影響到他在工作上的專業表現,從命運的觀點來看,那位司機以憤怒對抗不滿,只會讓他創造出憤怒的人生,也著實足以令人心生警愓。 Read the rest of this entry »

最近某位開發者和同人討論需求規格的問題,但他的反應卻讓人感到困惑,不知是他的理解能力有問題,還是面對問題太過情緒化?以下是我們對話的內容。

開發者 D 君問同人:「規格好像沒有提到欄位空白該如何處理?」

同人回答:「沒特別說明就是代表將該欄位填入空白。」

D 君說:「為什麼不是未指定欄位內容呢?」

同人說:「如果是那樣,該欄位不應該在交易訊息中出現;但如果該欄位的內容是空白,那就應該不指定訊息欄位的值。」

D 君說:「不過,從交易訊息的定義來看,那個欄位是必要欄位,不可能不出現。」

同人說:「所以那個欄位是必要的,訊息中沒有指定值就代表欄位要填入空白。」

D 君說:「那規格應該交待這個細節?」

同人說:「不需要,規格文件不寫語法而只會記載語意,因為語法是屬於 common sense,沒必要詳盡記錄在規格文件中。不然,如果連 common sense 都要寫在文件上的話,那是否意味程式設計者也不需要懂程式語言了,反正文件上都會寫。」

D 君說:「我知道了,你的意思是說我沒有 common sense!」

同人說:「如果你覺得我那裡說你沒 common sense,請明說我可以向你道歉,否則你這種情緒化的言論,只會讓人感到不舒服!」

D 君:…

同人將這件事寫在噗浪上,有噗友認為這類的開發者能力不行,沒什麼產值卻會製造問題。不過,在此事我所看到的問題倒不是開發者能力,而是認為重點在開發者只看文件做事的心態。開發者傾向用詳盡的文件來取代個人的思考與互動的溝通,這才是我認為最可怕的事情。 Read the rest of this entry »

31
十二月

失望與干擾行為

   Posted by: jim yeh   in 問題解決, 溝通, 生活感觸, 系統思考, 衝突

前一陣子,看到朋友碰到人際關係的困擾,讓我很想寫一篇文章來探討失望與干擾行為之間的關係。在前幾天,同人也碰到與家人的意見分歧,發現自己其實也沒有處理得很好;雖然問題不大,但事後回想自己應該會有更有效的溝通方式,發現自己想要寫的文章正好可以用來檢視自己。加上這兩天,朋友似乎對他的困擾還是難以釋懷,於是驅使我動筆將這篇文章寫出來,希望能夠有助於解決他的問題。

人們對於周遭的人總是會抱持著一些期望,希望他們能夠按照我們的意思去做。然而,每個人對同一件事的想法不盡相同,當發現對方出現行為落差時,人們很容易因為感到失望而產生困擾,使他想要採取行動來解決他的困擾。

我們該如何解決失望所產生的困擾呢?一般人多半會採取行動來干擾對方的行為,以反制對方的行為來控制對方的行為。這樣做除了可以發洩不滿的情緒,使自己覺得好過一點之外、還可以讓對方感到恐懼而令他們改變。但實際上,對方真的會因為我們的干擾而改變他們的行為嗎?其實並不然,我們的干擾行為不但沒辦法令他們改變;而且還會對我們採取相對反制的行為,讓我們更加失望 Read the rest of this entry »

26
十二月

領導是信任關係

   Posted by: jim yeh   in 問題解決, 學習, 專案團隊, 思考, 溝通, 生活感觸, 職場, 衝突, 閱讀, 領導

領導的黃金法則的圖像最近正在閱讀《領導的黃金法則》這本書,在第 2 章〈自己才是最難領導的人〉中,同人讀到「領導是信任關係,而非權力關係」這句話。從過去在職場的工作經驗來看,我認為這句話還真是至理名言。

領導他人是發揮我們的影響力,讓別人去做我們希望他去做的事情。相信很多人會以為自己無法有效領導他人是因為權力太小與位階不夠,無法讓人聽從我們的指揮。但本書的作者麥斯威爾卻認為,領導最大的挑戰就是領導自己。

麥斯威爾認為無論領導者帶領什麼人、或成就什麼事,領導自己一直都是領導者遇到最大挑戰。他指出歷史上功業彪炳的領導者,總以為他們是天之矯子;但如果我們認真檢視他們的生命,不難發現他們自己總需要經過一番掙扎。這就是「自己才是最難領導的人」的原因所在。

麥斯威爾分享他對領導自己的親身體會,他認為領導者應該力行學習服從、培養自律精神、磨鍊堅忍精神、追求負責精神等行為來領導自己。特別是在追求負責精神方面,他指出「領導是信任關係,而非權力關係」,因此領導者必須比別人更早自我「校正」。

儘管絕不自我膨脹是艱難的課題,但無論如何,不管領導者位階多高、掌握多大權力都必須力求做得對。領導者除了為自己負責之外,更得為追隨受自己領導的人負責,這樣的領導才值得受到他人的信任。

看了麥斯威爾上面的觀點,同人想到過去看到那些運用位階或權威的領導者。表面上看起來好像他們是威風八面,但其所表現出來的行為卻是領導無方。 Read the rest of this entry »

19
十二月

從解約過程看專業與熱忱

   Posted by: jim yeh   in 問題解決, 學習, 思考, 溝通, 生活感觸, 職場, 衝突

禮拜一終於與賣方解除買賣約契,老婆由妻舅陪同至仲介公司辦理解約事宜,最後由仲介公司退回履約保證專戶的房屋價金,使得海砂屋陰影終於得以圓滿解決。

正如我們所預料的,在解約過程中,賣方與她所委託的仲介表現出不友善舉動。她們都用言語的指責來批評買方,而且表現得相當情緒化。雖然她們會有這樣的反應是人之常情,但這種不理性的舉動,卻看不到賣方仲介的專業與熱忱。

這不禁讓同人想到「態度決定一個人的成功,而非成功之後才改變態度」這句話,從賣方仲介表現出這樣的工作態度可知,她將很難在房屋仲介的行業中成功的。當然,她最後能否成功對同人來說並不重要,但倒是提供我們在工作上借鏡與反思的機會。 Read the rest of this entry »

5
十二月

藏拙

   Posted by: jim yeh   in 利害關係人, 學習, 專案團隊, 溝通, 生活感觸, 編程技巧, 衝突

黔之驢》的寓言故事告訴我們藏拙的智慧。如同故事中老虎先前不知驢子的虛有其表,以為牠的龐然大物而對產生敬畏之心。但當黔驢技窮的底細被老虎發現後,可憐的驢子便喪生於虎口之下,這都是因為那頭驢子不懂藏拙的智慧。

從事軟體開發的工作,同人常觀察到一些開發者不懂藏拙的智慧,意欲表現自己很有能力,但卻總是被人看到他們虛有其表的黔驢之技。通常這種人不懂得用虛心受教來充實能力,而只會把問題的責任推到他人身上。

我們當然很希望這樣的人,不要出現在工作經驗當中。但很不幸地,世事總是難以如我們的預期,如果不幸在工作碰到這樣的人,我們應該如何自處呢? Read the rest of this entry »