作者在文章中提出了三個因素,用以解釋軟體的特性,並對軟體開發中遇到的困難進行了深入的思考。
以下是文章的主要內容概述:
三個因素(Triad)
1、軟體處於邊緣狀態(Liminal State):
軟體介於物理世界的限制和完全自由的幻想世界之間:
- 硬體對軟體施加了一些硬性約束(如有限的記憶體和CPU速度),
- 而軟體則受到較少的硬性約束。
然而,如果我們嘗試讓軟體處理每一種可能性,它可能會過於複雜且充滿錯誤。因此,我們對軟體施加了許多軟性約束以簡化開發和使用過程。
2、迴圈規範問題(Circular Specification Problem):
確切地知道我們要構建的軟體需要完全規範它。但是,一個完整的抽象規範通常至少與建立軟體本身一樣工作量巨大,甚至更多。
因此,軟體開發幾乎總是規範的行為:我們必須建立軟體才能規範它。
這意味著:
- 我們幾乎不能在構建之前或構建過程中真正知道我們正在構建的軟體是什麼。
- 這導致了個人之間以及個人與他人之間關於應該構建什麼的軟體的誤解和溝通障礙。
3、觀察者效應(Observer Effect):
觀察軟體執行會改變我們對軟體應該如何的看法。
隨著軟體的構建,我們發現了挑戰和機遇,通常兩者一樣多:
- 我們經常覺得有必要將我們對世界的改變了的觀點納入到軟體的建立中。
- 然而,建立軟體的人通常不是觀察者。
當我們建立軟體時:
- 我們通常有一個非常具體的用例。
- 當其他人看到軟體時,他們會提出我們未曾考慮的其他可能的用例,其中一些需要對軟體進行更改。
作者認為這三個因素雖然不能告訴我們關於軟體的所有事情,但提供了很多有用的資訊。這些因素之間的相互作用特別有趣,例如觀察者效應常常是迴圈規範問題的起因;迴圈規範問題為觀察者效應提供了大量機會。
舉三個不同的例子來讓您體會一下:
1、透過了解軟體處於幻想與現實之間的邊緣狀態,我發現有可能在腦海中澄清哪些是硬約束,哪些是軟約束。這在兩個方面都很有幫助。有時,我讓人們相信,看似硬約束(例如,從根本上說似乎是單執行緒的軟體)其實不僅是軟約束,而且可以相對容易地消除。有時,我不得不指出,一些 "明顯 "的軟約束(通常是從其他軟體繼承下來的約束,但並不總是這樣)是很難去除的。
2、迴圈規範問題和觀察者效應都意味著軟體開發中某種程度的迭代是不可避免的。一旦人們接受了這一邏輯,就必須接受軟體開發過程中會出現摩擦(即意想不到的低效率)的事實。當我為一個軟體規劃未來時,我預計會遇到持續不斷的摩擦,而且我會盡量考慮到這一點。讓我感到驚訝的是,很多組織都認為可以嚴格遵循軟體的總體規劃。
3、我曾經接待過一個組織,他們發現自己的軟體存在嚴重的效能問題。他們正在實施一項技術複雜、成本高昂的效能修復方案,並希望得到建議。
我深入研究了技術細節,但發現我並不確定所建議的效能修復方案能起到多大作用。我懷疑觀察者效應被忽視了,但我與使用者的第一次談話毫無結果,因為他們已經被告知並相信,建議的修復方案會讓他們的生活變得更好。
最終我意識到,我需要與使用者坐下來,看看他們當下是如何使用軟體的,而不管提出的修復方案如何。
很快我就發現,他們面臨的真正問題並不是建議的修復方案所要解決的,於是我提出了一個更簡單、更便宜的修復方案。
觀察者效應是真實存在的,儘管組織忽視了它,觀察者自己也曲解了它!
歸根結底,我希望透過命名這些因素,並盡我所能解釋我對它們的理解,可以幫助那些試圖應對建立軟體過程中諸多挑戰的善意的人們在未來進行對話。即使你不同意這些觀點,有一些具體的東西可以提出異議也是有益的!
致謝:感謝 Dan Luu 和 Hillel Wayne 的評論。