在上篇文章,即《反思軟件開發:知識流動(上)》中,我激情昂揚地陳述了日常工作中常會遇到的比較惱人的幾個問題,並從常規視角簡單説明了問題所在,本文將會從知識的角度指出它們產生的原因為何。
基本原理
在分析並解決問題之前所必須瞭解的一些事情。
知識定義
在《客觀的現實世界》中講「DIKW」(即「data」、「information」、「knowledge」和「wisdom」)時,我簡單地解釋了「知識」是什麼——
通過「數據」和「信息」只能瞭解到「實體」的表面呈現,這些是不可靠的,對人的活動基本沒有指導意義,人們需要的是能夠儘可能正確地反映「實體」的「性質」與「邏輯」的「知識」。
「知識」可以通過建模的方式獲取,即將「信息」分門別類後抽取相同特徵並簡化為「模型」。「知識」不一定是真的,人永遠也無法確切地知道其到底是不是真的,只能通過不斷的驗證使其無限接近於真。
歐雷《客觀的現實世界》
為了方便闡述和理解,本文將默認不嚴格區分「數據」、「信息」與「知識」這幾個概念,可以臨時把它們看作是一回事——都是「知識」。
這樣一來,在本文的語境中,職業、專業、業務等領域知識是「知識」,語言、文字、圖形、代碼等符號系統也是「知識」。
將「知識」根據是否被符號系統外化分類的話,已外化顯現並記錄下來的叫它「顯性知識」,未經外化仍存在於某個人的意識中的稱為「隱性知識」。
基於「萬物皆可描述」的理念,任何「隱性知識」都可被適當的形式描述出來,即便會有一定程度的失真,這就是「隱性知識顯性化」——同時也是讓知識流動起來的基本前提。
知識封裝
簡單來説,「封裝」就是用一個符號去壓縮或者説包裝一些有所關聯的知識,就像打包好的快遞包裹一樣。這樣做的目的是為了方便知識的組合與傳遞,提高其流轉效率。
日常生活和工作中有很多知識封裝的例子,如:語言、文字中各種類型的詞彙;軟件開發時定義的常量、變量、函數、類等。
既然要封裝,就不應該出現一個海納百川的符號——如果它什麼都是,那它就什麼都不是,實際不會起到任何真正有價值的正向作用。因此,要控制符號語義的邊界,儘量恰到好處。
控制邊界就是限制符號所封裝的知識的複雜度以及傳播途徑——
遵循關注點分離、單一職責等原則提高符號的內聚性,如:軟件的模塊拆分、分層架構;工作崗位的橫向、縱向職責劃分——專人專事,別給某個崗位的人提不相關的要求,且拿那些不合理要求作為考核指標。
最少化輸入/輸出(I/O)通道以限制符號間的通信,降低並抑制混沌產生的概率——軟件程序單元的 API 和參數要儘可能地少;某個小組或部門只讓儘可能少的人(最好是隻有一個)成為「必須知道(幾乎)全部細節的人」。
這裏有個可能比較容易疑惑的地方——人怎麼就是「符號」了?
這是一個涉及到哲學、社會學、心理學的問題,就不在這裏嚴肅認真地討論了,簡單説明就是——
一個人在認知他人時,會不可避免地根據對方表現出的特徵、狀態等進行標籤化,進而聚合形成一個自己所認為的那個人的符號化形象。
並且,在與他人協作時,一個人的身份更大程度上不是他自己,而是他所處的包含且代表他的專業知識與技能、部門職責的工作崗位,這更加是符號了——某個職業、某個專業、某個部門、某個崗位等都是封裝了特定知識的符號。
知識傳播
假設知識被恰如其分地封裝,以此為前提,大膽地掏出奧卡姆的剃刀——
用盡量精確且簡單的符號去表達知識——「精確」是為了避免歧義,「簡單」是為了易於理解,從而減少認知偏差,讓協作的人之間在腦中所想象出的是同一個事物;在軟件開發方面,則會縮減代碼量,節省資源開銷。
用盡量短的路徑抵達終端——路徑越長,到達終端的時間就越長,損耗失真得就越多,對時效性、完整性要求高的話會對終端產生很大影響。
知識維護
基於「唯一可信來源」(英文為「Single Source of Truth」,下文簡稱「SSOT」)思想對知識進行維護,其核心就是隻認可某一個來源的知識,尊其為權威,不接受並無視其他來源,有種一神教的感覺。
這需要結合一定的強制性措施保障其能夠執行到位,以杜絕同一知識出現多個版本;建立某種反饋控制機制,令所有消費了知識的環節都能在源頭變了時響應式更新,並反向促進知識源頭時刻保持最新。
若不遵從「SSOT」,定會出現同一知識有多個版本存在的情況——在協作時不僅會增加理解和溝通成本,促成拉鋸扯皮甚至是爭吵謾罵的狀況;還會提高知識同步時的修正成本和維護成本,讓人逐漸失去更新知識的動力。
遵從「SSOT」的知識是羣體智慧的結晶,相對來説會提高知識的正確性和有效性。就算錯,也是一錯到底,要追責的話,不是某(幾)個人的責任,而是知識維護的所有參與者的責任。
除了上述特點,遵從「SSOT」的知識總體上是採用中心化的管理方式,並能減少甚至避免顯性知識分散與隱性知識丟失的狀況,從而提高知識的完整性、可觀測性。
問題分析
下面將用上文闡述的關於知識的基本原理去從知識的角度分析並解釋在上篇文章中描述的那幾個日常工作中的常見問題——
業務支持、崗位職責和跨部門協作中的問題主要是知識封裝得不好,並且未被有效、順暢地傳播;測試左移的問題則在於知識維護上,在跨部門協作中也存在此類問題。
小結
本文總結了關於知識的幾個基本原理,並基於它們從知識的角度解釋了日常工作常見問題的原因。在下篇文章中,我將在本文所述的基本原理之上暢想解決那些常見問題的方案。
本文其他閲讀地址:個人網站|微信公眾號