天天看點

《程式員的修煉——從優秀到卓越》一一1.9 博伊德疊代法則

本節書摘來自異步社群出版社《程式員的修煉——從優秀到卓越》一書中的第1章,第1.9節,作者:【美】jeff atwood,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

程式員的修煉——從優秀到卓越

scott stanfield曾經轉發給我一篇roger session的文章,題為“a better path to enterprise architectures”(通向企業架構更好的一條路)。盡管文章的标題帶了“企業”這個很泛濫的詞,但出乎我的意料,這篇文章寫得挺好!

我特别喜歡roger在文中獨辟蹊徑,使用一組類比來闡明了軟體開發中疊代和遞歸方法的差別。他首先展示了colonel john boyd對于20世紀50年代的噴氣式戰鬥機在操控過程中的獨特性能的研究。

colonel john boyd對任何空戰都很感興趣,而對于mig-15和f-86之間的較量尤為關注。作為一名資深飛行員和飛機設計師,boyd對于這兩種飛機都非常熟悉。他知道mig-15的性能比f-86更加優異:爬升速度更快,轉彎速度更快,可視距離也更遠。

f-86也有兩個優點。首先,它擁有較寬的視野,相比于mig-15的飛行員可以看到前方更遠的地方,f-86的飛行員可以看到飛機側面的更多情況。其次,f-86擁有液壓飛行控制系統,而mig-15的飛行控制系統是手動的。

一般飛機設計師普遍認為,飛機的可操作性是赢得空戰的關鍵因素。毫無疑問,擁有更快的轉彎速度和爬升性能的mig-15可以完勝f-86。

但問題在于,盡管mig-15被飛機設計師們認為是優勝者,但飛行員們卻更願意駕駛f-86。原因很簡單,在與mig-15的一對一的較量中,10次中有9次是f-86勝出。

一種配置稍遜的飛機如何能持續擊敗另一種配置優良的飛機?作為史上最優秀的空戰飛行員之一,boyd有他自己的一套理論。

boyd認為,空戰中取勝的主要決定因素不是觀察、定向、計劃以及更好地操作,而是觀察、定向、計劃以及更快地操作。換句話說,能不能取勝就看飛行員能夠多快地執行疊代。boyd暗示,疊代的速度勝過疊代的品質。

接下來,boyd提出了另外一個問題:為什麼f-86可以更快地疊代?他總結的原因是,f-86裝備了液壓飛行操縱杆而mig-15隻裝備了手動操縱杆——在此之前,沒人覺得飛行操縱杆有這麼重要。

沒有液壓裝備,移動mig-15的飛行操縱杆會比f-86稍微多費一些體力。一旦mig-15的飛行員移動操縱杆,盡管mig-15可以更快轉彎(或者爬得更高),但飛行員會消耗更多的體力。

每完成一次疊代,mig-15的飛行員都會比f-86的飛行員更加疲乏一點。随着疲勞的累積,mig-15的飛行員會需要更長的時間才能完成一次oopa疊代——observe(觀察)、orient(定向)、plan(計劃)、act(操作)。mig-15的飛行員輸就輸在oopa的速度上。

《程式員的修煉——從優秀到卓越》一一1.9 博伊德疊代法則

這就引出了“博伊德疊代法則”:疊代的速度勝過疊代的品質。

于是你不難發現,在現代軟體工程的方方面面都有異曲同工之妙:

單元測試必須要小而快,以便每次編譯時都能運作這些測試。

可用性測試這麼做最有效:以兩周為一個周期來做一些小改動,并且快速抛棄那些不好的部分。

大多數靈活開發方法都建議,疊代周期不能超過4周。

軟體測試就是(在将軟體釋出之前)讓它提早失敗,經常失敗。

功能規範書最好能簡明扼要,并且持續改進。

請記住:疑惑之時,唯有快速疊代方能突圍!

繼續閱讀