什么是系統(tǒng)論
系統(tǒng)論是研究系統(tǒng)的結(jié)構(gòu)隆檀、特點摇天、行為、動態(tài)刚操、原則闸翅、規(guī)律以及系統(tǒng)間的聯(lián)系再芋,并對其功能進行數(shù)學(xué)描述的新興學(xué)科菊霜。系統(tǒng)論的基本思想是把研究和處理的對象看作一個整體系統(tǒng)來對待。系統(tǒng)論的主要任務(wù)就是以系統(tǒng)為對象济赎,從整體出發(fā)來研究系統(tǒng)整體和組成系統(tǒng)整體各要素的相互關(guān)系鉴逞,從本質(zhì)上說明其結(jié)構(gòu)、功能司训、行為和動態(tài)构捡,以把握系統(tǒng)整體,達(dá)到最優(yōu)的目標(biāo)壳猜。
如果說勾徽,還原論是拆解,那么系統(tǒng)論统扳,就是組裝喘帚。稍微對哲學(xué)有一點了解的人,看到我說“程序員都是還原論者”都不會覺得“還原論者都是只見局部咒钟,不見整體的”吹由。比如科學(xué)家,一生只研究一個很小的題目朱嘴,比如研究細(xì)胞內(nèi)連線粒體的科學(xué)家倾鲫、氣象研究中只研究閃電的、粒子物理中研究夸克的學(xué)家萍嬉。因為有他們研究了局部的乌昔、邊緣的,才有了我們得以應(yīng)用壤追、得以造福人類的科學(xué)玫荣。
因此,合格的程序員大诸,不一定要你有多少工作年限捅厂、多少項目經(jīng)驗贯卦,但你必須要有系統(tǒng)論的思維模式。類和對象如何劃分焙贷?你傳入給我什么撵割?我怎樣處理?我反饋給你什么辙芍?很熟悉吧啡彬,這不就是面向?qū)ο髥幔浚?/p>
這個思維模式又容易帶來什么影響呢故硅?
一:準(zhǔn)確的描述
只要是系統(tǒng)庶灿,都會有bug、有誤差吃衅,有可能造成嚴(yán)重的后果往踢,但是你要對每個模塊做到可控,出現(xiàn)bug也不怕的那種徘层。但是如果你的描述遺漏了什么峻呕,傳入系統(tǒng)的參數(shù)就無法解析甚至引起不可預(yù)見的后果。如果你添加了一些多余的描述趣效,不僅對系統(tǒng)的運行是無用的瘦癌,還會降低效率,引發(fā)故障跷敬。因此準(zhǔn)確的描述讯私,可以避免、減少重大異常問題的出現(xiàn)
二:真正的根源
新手程序員西傀,興高采烈的解決了一個BUG后斤寇,總是被老程序員靈魂拷問:“你確定你找到BUG的根源了嗎?”池凄,解決BUG抡驼,一定要從根源解決,因為軟件肿仑、項目是一個系統(tǒng)致盟,任何BUG或者錯誤的描述,都會造成連鎖反應(yīng)尤慰,然后造成更詭異的BUG馏锡。你修改了越多表層無關(guān)的東西,就越是破壞了系統(tǒng)的完整性伟端。有還原論的程序員杯道,再面對問題的時候,會把更多的精力投入再尋找“真正的根源”责蝠,而不是党巾,頭痛醫(yī)頭萎庭、腳痛醫(yī)腳。
三:隔離
基于追蹤根源齿拂、控制錯誤泛濫的思想驳规,程序員會自覺主動的隔離問題。只有將問題隔離了署海,才可以盡量在接近根源處解決問題吗购。解決根源,才可以避免錯誤四處擴散到處破壞砸狞,免得把問題搞得越來越嚴(yán)重越來越不可解決捻勉。因此,當(dāng)討論模塊A的時候,他們不愿意討論任何與模塊A有沒關(guān)系的BCDEFG,把模塊A單獨拿出來棘幸,只關(guān)注輸入與輸出,只有每個模塊都“健康”了禽捆,整個系統(tǒng)才能健康
四:混沌
稍有經(jīng)驗的程序員都知道笙什,只要系統(tǒng)不是很簡單飘哨,混沌就是常態(tài)。不要以為一個項目的進度可以用簡單的幾個人琐凭、多少月就能做完衡量芽隆,增加人手,未必完成的快统屈。一個人三個月能完成的胚吁,三個人一個月未必能搞定。需求階段愁憔,如果一個程序員看不出其中的復(fù)雜性腕扶,那么他一定沒有做過有一定規(guī)模的系統(tǒng)。要應(yīng)付混沌問題吨掌,你做的是穩(wěn)不是多半抱。
五:控制論
面對復(fù)雜的系統(tǒng),普通程序員會覺得一團亂麻膜宋。但是窿侈,很多時候,控制論就可以大顯身手秋茫,快刀斬亂麻:再復(fù)雜歸根結(jié)底也不過是一個“請求史简、處理、響應(yīng)”的問題肛著。把大問題拆解圆兵,小問題還原本質(zhì)跺讯,最終再合并⊙撑“控制論”已經(jīng)被很多學(xué)者用到了歷史研究等方面抬吟,它的確是一個極為犀利的武器。