第三章 有心智的機器

這個章節(jié)很多部分像是一部小說,一部機器人科幻小說。在快速閱讀的過程中,又不時冒出能讓我渾身起雞皮疙瘩的共鳴。
當一個系統(tǒng)能夠正常運轉(zhuǎn)時,不要打擾它;要以它為基層來構(gòu)建。
必須從簡單的局部控制中衍生出分布式控制,必須從已有且運作良好的簡單系統(tǒng)上衍生出復雜系統(tǒng)。
眾愚成智
@ 先做簡單的事。
@ 學會準確無誤地做簡單的事。
@ 在簡單任務的成果上添加新的活動層級。
@ 不要改變簡單事物。
@ 讓新層級像簡單層級那樣準確無誤地工作。
@ 重復以上步驟,無限類推。
以上是布魯克斯的移動機器人實驗室開發(fā)出來的一套普適分布式控制方法。他在講機器人的控制方法,我腦海中浮現(xiàn)的是我們軟件的開發(fā)構(gòu)建方式。想一想我們開發(fā)軟件的過程中,一開始的功能應該是簡單的,隨著時間的推移,需求不斷的加入,原本簡單的功能變得不再簡單。稍不留神地一個改變,原本還是工作的功能居然產(chǎn)生了不可思議的“禮物”。這個場景我們應該不陌生。對于這樣的結(jié)果,原因一定不在時間上面,也不在不斷加入的需求上面(假設需求都是合理的),那原因在哪里呢?聰明的讀者如你,應該已經(jīng)把眼神聚焦到上面那段普適機器人分布式控制方法上了。
我們對照著這個控制方法一起來掰扯掰扯軟件開發(fā)?!跋茸龊唵蔚氖隆?。這一條讀起來很簡單,但真正做起來就不那么簡單了。首先,我們要認清什么是“簡單的事”??赡躊M或BA拋過來的需求一開始就不簡單。作為開發(fā)者在接這個需求的時候就要考慮這個需求背后是要滿足什么?所謂真正的需求。針對這個需求應該進行功能拆解,找出原子化的操作功能,也就是簡單的事。對于這些原子化的操作功能,我們可以編寫足夠覆蓋率的單元測試來保證它的準確無誤。這些原子操作應該是穩(wěn)定的,是相對獨立的。在這個基礎上,我們將這些原子操作進行組合來完成更高階的需求。同樣,我們對這一新組合出來的層級加以測試覆蓋來確保它的準確無誤。面向?qū)ο箝_發(fā)原則SOLID中的SRP(單一職責原則,Single Responsibility Principle)也是在講識別和維護好“簡單的事“。在這邊我想澄清一下,原子化或單一職責并不等同于簡單。但是我相信您一定會同意如果不這樣一定會更加不簡單:)
寫到這里,腦海中又浮現(xiàn)出樂高積木。這些“簡單的事”就好比樂高那些制作精良的基礎積木。通過這些基礎積木巧妙組合,我們可以搭建出形形色色的造型,可以是飛機,可以是坦克,甚至是帝國大廈。