Jon Jagger

軟體的不可見性#

軟體中許多**不可見(invisibility)**的面向被正確地奉為原則——機制透明性(mechanism transparency)和資訊隱藏(information hiding)就是其中之二。但軟體與其開發過程,套用 Douglas Adams 的話來說,大多是不可見的

  • 原始碼沒有固有的存在、沒有固有的行為、不遵守物理定律。打開編輯器就看得到,關上編輯器就消失了。想太久就會開始懷疑它是否存在
  • 運行中的應用程式有存在和行為,但不會透露任何關於建構它的原始碼的資訊。Google 的首頁看起來極其簡潔,但背後的運作肯定極為龐大
  • 除錯是浪費:如果你完成了 90% 卻在除錯最後 10% 上無止境地掙扎,那你並沒有完成 90%。讓浪費變得更可見,好讓你看到它的真面目,並開始思考如何一開始就避免製造它
  • 隱藏的延遲:如果你的專案看起來按計劃進行,一週後卻突然延遲了六個月——那些問題其中最大的可能不是延遲六個月本身,而是不可見的力場強大到能隱藏六個月的延遲。缺乏可見的進度等同於缺乏進度

如何讓不可見的變得可見#

不可見性是危險的。當你有具體的東西來固定你的思維時,你會思考得更清楚。當你可以看到事物並看到它們不斷變化時,你能更好地管理:

  • 撰寫單元測試提供了關於程式碼單元有多容易進行單元測試的證據,有助於揭示你希望程式碼展現的開發品質(如低耦合和高內聚)的存在(或缺失)
  • 執行單元測試提供了關於程式碼行為的證據,有助於揭示你希望應用程式展現的運行品質(如健壯性和正確性)的存在(或缺失)
  • 使用看板(bulletin boards)和卡片讓進度變得可見且具體。任務可以被標示為 Not StartedIn ProgressDone,不需要去追蹤隱藏的專案管理工具或程式設計師的虛構狀態報告
  • **增量開發(incremental development)**透過增加開發證據的頻率來提高開發進度(或缺乏進度)的可見性。完成可發佈的軟體能揭示現實,估算則做不到

最好的做法是以大量的、定期的可見證據來開發軟體。可見性帶來信心——確信進度是真實的而非幻覺、是刻意的而非無心的、是可重複的而非偶然的。