jim yeh on 九月 16th, 2007

在〈放諸四海皆準的開發方法嗎?〉的讀者回應中,有讀者提到:

議題本身下的定義就不適當,如使用"A"開發方法可能適用於不同國家相同企業組織型態之公司,而"A"開發發法不可能適用於所有組織型態之公司。所以會有不同理論基礎之開發方法讓專案經理去思考用運用於不同專案。

同人認為這位讀者的意思,大概是指開發方法可以適用在不同區域或文化下的相同類型的組織,但對類型不同的組織卻無法一體適用。但實在不知道他為何會認為在相同型態的組織可以適用同一種開發方式,同人的軟體開發經驗所顯示的現象卻不是如此。

例如,過去在開發銀行付款系統的時候,對不同銀行同樣的系統,我們的開發方法卻會有很大的不同,雖然在銀行領域的企業組織型態都是一樣的,但不同的企業實體卻會對軟體本身有不同的目標與期望,所以開發方法必須跟著做調整,國內的銀行是如此,國外的那就更不用說了,所以同人實在無法苟同這位讀者的觀點。

另外也有人回應,開發者要有足夠的專業能力與經驗,如果在專業能力與經驗不足情況下,解決問題的時候就只好什麼情況都考慮進來;同時他認為在有時間限制或是競爭壓力的情況下,用「放諸四海皆準的方法」慢慢摸索也不見得是好方法。

這個意見表面上看來理所當然,但仔細進一步思考卻發現其觀點卻是不完整的。在專案一開始,開發者往往並不知道他們的能力及經驗是有所不足的;在專案規劃過程中,他們往往會受限於資訊的有限及個人認知的偏頗而對問題有錯誤的解讀,所以他們不可能把所有狀況都考慮進來。

因此,謹慎的開發者,他們不會太相信問題就是自己所知道的,而是會去進一步地探索自己所不知道的真正問題,這樣做才能找到可以解決問題的有效方法。

所以,如果對專案問題了解不夠徹底,摸索其實是必要的,但這並不是「放諸四海皆準的開發方法」。為什麼呢?因為,專案的問題都還沒清楚及完整地呈現在我們眼前,何來開發方法可言?摸索問題是一種過程,它可視做是一種方法,但它不是開發方法,而是在專案可行性分析或規劃開發方法的方法。

同人在之前文章中,以系統發展生命週期的軟體開發模式為例,說明開發方法無法放諸四海皆準。但實際上,軟體開發方法與軟體開發模式在層面上是有所不同的,以軟體開發模式來解釋軟體開發方法無法適用於所有的專案,只是為了方便說明的一種簡化說法。軟體開發方法其實是軟體開發模式的一種實現,同時它牽涉到範圍會比程式發展的範圍更廣,包括溝通、團隊及各種管理的其它議題。

專案實際上會碰到的問題很複雜,專案開發者及管理者要考量的往往會比想像的還要多。通常在專案規劃過程中,專案團隊很難會看到「所有」的問題,同時也無法完全靠預測來找到所有問題。因此,這也就是專案現實生活中,必須解決突如其來的問題,這是不可能用放諸四法皆準的方法來因應的主要原因。

然而,那位留言者又進一步提出了,所謂的模式與方法的差別只是看問題的尺度不同而已。他認為我文章中對因時因地制宜的敍述,正代表它是一種放諸四海皆準的開發方法或模式。

這個觀點是很有問題的,這個留言者執著於文字上的巧辯,而忽略了我文章的實質內涵,然而他的觀點經由我們深入的思辨,發現其在邏輯上是自相矛盾,自打嘴巴的。

思辨者:因時因地制宜是放諸四海皆準的開發方法嗎?

巧辯者:是的。

思辨者:如果因時因地制宜是放諸四海皆準的開發方法,那麼在不同的專案中,可以找到一致均可適用的開發方法嗎?

巧辯者:可以的,就是因時因地制宜。

思辨者:好極了,那麼因時因地制宜是什麼意思呢?

巧辯者:就是因時因地而有不同的做法。

思辨者:那麼採用因時因地制宜的方法就代表在不同的專案中會採用不同的做法嘍。

巧辯者:是的。

思辨者:那麼這樣的話,不就正代表了不同的專案會採用不同的方法來開發系統,所以這樣看來,不就正代表了沒有放諸四海皆準的開發方法嗎?

巧辯者:(啞口無言)。

思辨者:所以您是錯的嘍,沒有放諸四海皆準的開發方法,而是要因時因地制宜,因應專案問題的不同而採用不同的開發方法。

巧辯者:……。

由上的思辨可知,看問題尺度的不同只是用來掩飾觀點上自我矛盾的一種說辭。對於專案問題,如果對瞭解問題的資訊不足,再加上又不能洞悉個人所知的侷限性,不管我們把不適用的開發方法切多細,都還是不能解決問題的,此時,我們所缺乏的不是看問題的尺度而是維度。

因此,開發方法除了技術觀點的深入外,如果缺乏對問題其他面向的開濶思維,終究還是無法達成專案目標的,軟體開發過程中,最怕的就是開發者陷在自己思想的洞穴之中而無法自拔呀。



     

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">