之前猶豫要不要在公眾號(hào)的文章里去說一些系統(tǒng)設(shè)計(jì)的內(nèi)容。擔(dān)心自己能不能把一些概念說得深入淺出是其次,更大的阻礙在于閱讀碎片化越發(fā)嚴(yán)重的當(dāng)下,受眾普遍難以接受高度概念化和相對(duì)有深度的內(nèi)容。最后決定開坑的原因也很簡(jiǎn)單,就是我寫的東西根本沒人看!所以以上這些擔(dān)心都是多余的:)
這個(gè)系(da)列(keng)主要有以下的目的:
- 將信息系統(tǒng)里的一些概念通過簡(jiǎn)單易懂的方式介紹給不是這個(gè)領(lǐng)域的朋友們
- 通過這些概念、設(shè)計(jì)和模式揭示出一些跨領(lǐng)域通用的邏輯和思維方法
- 鼓勵(lì)大家從偏重演繹法(deduction)的思維方式過渡到演繹、歸納(induction)并重的思維方式
內(nèi)容會(huì)主要集中于如何對(duì)特定領(lǐng)域(domain)做出合理抽象。我非常同意一句話,“The hardest part of writing a specification is choosing the proper abstraction”。不管是對(duì)于系統(tǒng)設(shè)計(jì)是這樣,對(duì)于所有的其他實(shí)際問題也是一樣的。在我們從小經(jīng)歷的教育過程中會(huì)被要求做很多習(xí)題。這些習(xí)題都有嚴(yán)格和確定的領(lǐng)域設(shè)計(jì),以及明確的解決方法。這種教育更多的是教會(huì)我們?nèi)ズ侠淼挠锰囟ǖ姆椒ê凸ぞ邅斫鉀Q問題,但缺失了對(duì)定義和識(shí)別問題能力的培養(yǎng)。這就是為什么大多數(shù)人的思維方式會(huì)不自覺的偏向于使用演繹,而不善于歸納。
缺乏歸納能力的直接結(jié)果是不能找出一件事物在特定條件下的普遍規(guī)律,或者說是主要矛盾。其表現(xiàn)就是:各種腦殘要求,各種無效工作造成的返工和加班,各種鉆牛角尖和不能相互理解造成的溝通障礙等等等等。不能說一個(gè)好的思維方式一定能解決以上的諸多問題(其實(shí)我自己也時(shí)常對(duì)這些問題處理得很差),但相信還是能有效減少這種問題發(fā)生的概率。
對(duì)特定領(lǐng)域做出合理抽象是非常困難的。在絕大多數(shù)情況下甚至不可能有最優(yōu)解,僅僅只能夠挑選一個(gè)不那么糟糕的。最為困難的一步在于找到一個(gè)開始的思路。這個(gè)時(shí)候人們往往依賴于一種叫“經(jīng)驗(yàn)”的東西。實(shí)際上“經(jīng)驗(yàn)”這個(gè)概念就是對(duì)用于做出特定領(lǐng)域合理抽象的各種模式(pattern)的一種模糊化敘述。在人類工程史上,無數(shù)杰出的工程師和科學(xué)家總結(jié)出了繁多的適用于各種領(lǐng)域的合理抽象和模式。其中很大一部分是可以跨領(lǐng)域適用的。但礙于專業(yè)的限制,這種跨領(lǐng)域的模式歸納變得非常困難。有幸的是,計(jì)算機(jī)和程序在現(xiàn)代社會(huì)已經(jīng)滲透到了各行各業(yè),這些跨領(lǐng)域的知識(shí)都能夠在信息系統(tǒng)中聚集和實(shí)現(xiàn)。這使得信息系統(tǒng)不經(jīng)意中成為了歸納各種跨領(lǐng)域抽象和模式的最佳試驗(yàn)場(chǎng)。從《人月神話》,到Unix&Linux系統(tǒng)的設(shè)計(jì)哲學(xué),再到各種(程序)設(shè)計(jì)模式,軟件架構(gòu)演進(jìn),這些工程實(shí)踐中的瑰寶帶給我們的啟示遠(yuǎn)遠(yuǎn)超過了這些工程問題本身。希望在之后的內(nèi)容中也能帶給大家同樣的啟示。