任何一個(gè)組織都無法全部擁有這些新技術(shù)。因此作為大連無人值守停車場(chǎng)計(jì)費(fèi)軟件開發(fā)從業(yè)者,需要不斷地保持對(duì)技術(shù)社區(qū)的關(guān)注。閉門造車只能加速架構(gòu)的腐化——特別是自己的這些發(fā)明在開源社區(qū)早已有成熟方案的時(shí)候。在那些貌似光鮮的產(chǎn)品背后,實(shí)際上有著無數(shù)的失敗的案例和成功的經(jīng)驗(yàn)在支撐。
我們?cè)?jīng)有一個(gè)大連無人值守停車場(chǎng)計(jì)費(fèi)軟件開發(fā)項(xiàng)目。在意識(shí)到需求可能轉(zhuǎn)向類似于key-value的文檔數(shù)據(jù)庫(kù)之后,團(tuán)隊(duì)大膽地嘗試采用SQLServer 2008 的XML 能力,在SQL Server 內(nèi)部實(shí)現(xiàn)了類似于No-SQL 的數(shù)據(jù)庫(kù)。這是一個(gè)新的發(fā)明,創(chuàng)造者初期很興奮,覺得終于有機(jī)會(huì)做不同的事情了。然而隨著項(xiàng)目的進(jìn)行,越來越多的需求出現(xiàn)了:Migration的支持、監(jiān)控、管理工具的支持、文檔、性能等。隨著項(xiàng)目的進(jìn)展,最終發(fā)現(xiàn)這些能力與時(shí)下流行的 MongoDB 是如此的相似——MongoDB已經(jīng)解決了大多數(shù)的問題。這個(gè)時(shí)候,代碼庫(kù)已經(jīng)有相當(dāng)?shù)囊?guī)模了——而這部分代碼,讓許多團(tuán)隊(duì)成員費(fèi)解;在一年之后,大約只有兩個(gè)人能夠了解其實(shí)現(xiàn)過程。如果在早期采用MongoDB,團(tuán)隊(duì)本來有機(jī)會(huì)摒棄大部分相關(guān)的工作。
致遠(yuǎn)服軟認(rèn)為:http://www.soft8.com.cn/高傲的開發(fā)者往往對(duì)新技術(shù)不夠耐心,或者說對(duì)新技術(shù)的能力或局限缺乏足夠耐心去了解。每一個(gè)大連無人值守停車場(chǎng)計(jì)費(fèi)軟件開發(fā)項(xiàng)目都有其針對(duì)的問題域,對(duì)于問題域之外,新技術(shù)往往沒有成熟到能夠應(yīng)對(duì)的地步。開發(fā)者需要不斷地閱讀、思考、參與,來驗(yàn)證自己的問題域是否與其匹配。淺嘗輒止不是好的態(tài)度,也阻礙了新技術(shù)在團(tuán)隊(duì)內(nèi)的推廣。
新技術(shù)的選型往往發(fā)生在項(xiàng)目/產(chǎn)品特定的時(shí)期,如開始階段,某個(gè)特定的痛點(diǎn)時(shí)期。日常階段,開發(fā)者仍然需要保持對(duì)代碼庫(kù)的關(guān)注。下一條,重構(gòu)到物理隔離的組件則是對(duì)不斷增大的代碼庫(kù)的另一種解決方案。
顯而易見的趨勢(shì)是,對(duì)于同一個(gè)產(chǎn)品而言,需求總是不斷增多的。去年有 100 個(gè)功能,今年可能就有200個(gè);去年有10萬行代碼,今年也許就有20萬行;去年2G內(nèi)存的機(jī)器能夠正常開發(fā),今年似乎得加倍才行;去年有15個(gè)開發(fā)人員,今年可能就到30個(gè)了;去年構(gòu)建一次最多15–20分鐘,今年就得1個(gè)小時(shí)了,還得整個(gè)分布式的。
有人會(huì)注意到股票大盤分析軟件開發(fā)代碼的設(shè)計(jì)問題,孜孜不倦地進(jìn)行著重構(gòu);有人會(huì)注意到構(gòu)建變慢的問題,不懈地改進(jìn)著構(gòu)建時(shí)間。然而很少有人注意到代碼庫(kù)的變大才是問題的根源。很多常規(guī)的策略往往是針對(duì)組織的,例如將代碼庫(kù)按照功能模塊劃分(例如ABC功能之類)或者按層次劃分(例如持久層、表現(xiàn)層),但這些拆分之后的項(xiàng)目依然存在于開發(fā)人員的工作空間中。無論項(xiàng)目如何組織,開發(fā)者都需要打開所有的項(xiàng)目才能完成編譯和運(yùn)行過程。我曾經(jīng)見到一個(gè)團(tuán)隊(duì)需要在Visual Studio 中打開120 個(gè)項(xiàng)目;我自己也經(jīng)歷過需要在Eclipse 中打開72 個(gè)項(xiàng)目才能完成編譯的情況。