企業(yè)定制軟件開發(fā)不是計(jì)算機(jī)科學(xué)。有什么需要解決的不是編譯原理或組合數(shù)學(xué)。那么,什么是企業(yè)定制軟件開發(fā)的核心問題?
我越來越覺得,在一個(gè)領(lǐng)域從事不需要有特別深刻的理解,但至少知道需要什么核心問題,在這一領(lǐng)域需要解決。例如,在C的發(fā)展/ S結(jié)構(gòu)軟件,狀態(tài)同步(C?。。拥臓顟B(tài)同步和窗口之間的狀態(tài)同步)是核心問題之一,而B的發(fā)展/?。咏Y(jié)構(gòu)軟件,狀態(tài)同步是沒有這樣的核心問題。如果事先知道需要考慮這些核心問題,您可以與具體事務(wù)遵循打交道時(shí),提高解決問題的水平,以更宏觀的層面。
目前,我個(gè)人覺得有企業(yè)定制軟件開發(fā)兩個(gè)核心問題:
1.如何確保所有參與者的通信強(qiáng)度(研發(fā)團(tuán)隊(duì),包括客戶和最終用戶),使他們能夠滿足完成發(fā)展目標(biāo)的需要
2.如何管理自己的企業(yè)定制所帶來的軟件固有的高復(fù)雜度,從而使復(fù)雜不會(huì)超過球隊(duì)的維修能力
在介紹了該組織以前的博客,我談了第一個(gè)核心問題,通信強(qiáng)度的問題。至于球隊(duì)而言,以消除個(gè)人能力,最重要的是人與人之間的溝通。如果沒有良好的溝通,即使球隊(duì)的個(gè)人能力是超強(qiáng)的,它們不能形成合力。但是,只要有良好的溝通,至少人們可以讓他們物盡其用。假設(shè)一個(gè)標(biāo)準(zhǔn)的人的生產(chǎn)力是1次/天。一些特別強(qiáng)的人可以達(dá)到3 /天。但是,如果你需要實(shí)現(xiàn)10?。斓纳a(chǎn)能力,完成由市場(chǎng)允許的時(shí)間內(nèi)的項(xiàng)目,那么你不能用一個(gè)人來完成任務(wù)臨時(shí),所以會(huì)有需要一個(gè)團(tuán)隊(duì)。但是有兩個(gè)標(biāo)準(zhǔn)的人,也不會(huì)達(dá)到1 +?。薄。健。病。斓纳a(chǎn)能力。它可能只是1.5。有三個(gè)標(biāo)準(zhǔn)的人,他們不會(huì)達(dá)到1?。。薄。。薄。健。场。斓纳a(chǎn)能力,這是很容易有1.8。那么是什么限制了團(tuán)隊(duì)的整體生產(chǎn)力,那就是溝通。當(dāng)兩個(gè)相關(guān)的任務(wù)A和B是由一個(gè)人來完成,關(guān)于任務(wù)A的知識(shí)存在于左腦,以及有關(guān)任務(wù)B知識(shí)右腦存在。然后組合的兩個(gè)任務(wù)知識(shí)來組裝它的通信效率是大腦內(nèi)的電信號(hào)的速度。但是,如何任務(wù)A通過開發(fā)一個(gè)完成,任務(wù)B被開發(fā)完成若B完成,整合這兩個(gè)任務(wù)的效率是由人類口腔的振動(dòng)頻率,通過表達(dá)能力上的限制約束,并通過理解能力上的限制。有人研究過,即使兩個(gè)人互相面對(duì),數(shù)據(jù)傳輸?shù)谋忍芈时茸钤绲膿芴?hào)Modem低。更何況,有時(shí)開發(fā)團(tuán)隊(duì)是分布式的。我看不到面部表情,身體語(yǔ)言,不能共享白板,只能聽到越洋電話的聲音,其中一人是不工作小時(shí)。在這種情況下,1 +?。睅缀跏遣豢赡苓_(dá)到的1 /天的生產(chǎn)力。什么是高效的團(tuán)隊(duì)是一個(gè)團(tuán)隊(duì),可以使1?。。钡闹当M可能大。如何成為高效,讓溝通更有效。如何使通信效率和強(qiáng)烈?這是核心問題,我們必須處理。
第一個(gè)問題可以適用于所有的人的團(tuán)隊(duì)行為。只要人們聚集在團(tuán)體,會(huì)有溝通問題。所謂,那里有個(gè)人,也有河流和湖泊。第二個(gè)問題是針對(duì)企業(yè)定制軟件開發(fā)。對(duì)于互聯(lián)應(yīng)用的發(fā)展,也許是復(fù)雜的管理是第二,最重要的事情是下了大量用戶的可擴(kuò)展性。但對(duì)于企業(yè)軟件定制開發(fā),在定制軟件的復(fù)雜性是由于業(yè)務(wù)本身的復(fù)雜性。尤其是企業(yè)的合并,導(dǎo)致組合的復(fù)雜性。假設(shè)在理想的情況下,系統(tǒng)可以被分解成模塊A,B,和C中,所有具有的復(fù)雜性2.在良好復(fù)雜性管理的情況下,這些模塊被分得很清楚。要了解一個(gè),你只需要注意A,B和C之間的相互作用少量也許理解復(fù)雜僅為2?。。埃?。但是,當(dāng)復(fù)雜性沒有被管理,所有的“邏輯”(即,復(fù)雜度)被隨機(jī)放置。那么有沒有辦法保證的閱讀邏輯只需要注意一個(gè),甚至是這方面的一個(gè)不存在。你看到的知識(shí)是包括A,B和C,這是一個(gè)完整的片的功能的系統(tǒng)。要真正理解這個(gè)系統(tǒng)在這個(gè)時(shí)間的行為,可能需要很大的代價(jià)的2?。。病。。病。健。?,隨著模塊的增加(變量,方法,類,包,模塊,包),我們需要的東西同時(shí)了解也在增加。這是不可能的管理復(fù)雜性。這是非常可能的,我們需要了解的功能,我們需要閱讀所有的代碼。換句話說,一個(gè)方法是改變,使整個(gè)項(xiàng)目需要再進(jìn)行測(cè)試,因?yàn)闆]有值得信任的地方。如何管理復(fù)雜性?這是核心問題,我們必須處理。有趣的是,這兩個(gè)核心問題重疊。想想人角色的類和接口抽象為點(diǎn)。懂溝通人與人之間的連接問題。其復(fù)雜性也被理解為類之間的依賴性問題。那么通信問題和復(fù)雜的管理問題是如何把這些點(diǎn)連接線上,形成一個(gè)高效的圖形。這張照片是“依賴”的圖片。人與人之間的關(guān)系,類和包之間的依賴之間的依賴關(guān)系。對(duì)于依賴的另一個(gè)名字是耦合。而我們追求的是凝聚力。這兩個(gè)詞耦合(Coupling)的美容/接應(yīng)(凝聚力)是人們誰(shuí)了解,根據(jù)自己的經(jīng)驗(yàn),一眼點(diǎn)頭。誰(shuí)不明白,因?yàn)樗麄儾痪邆湎鄳?yīng)的經(jīng)驗(yàn),不管他們?nèi)绾谓忉屗娜?,他們很困惑。正是因?yàn)槠洹懊睢钡男再|(zhì),我可以說,這兩個(gè)詞回答所有問題(你無法反駁的話)。但至少我們可以知道,企業(yè)定制軟件開發(fā)的核心問題實(shí)際上是一個(gè):它是管理人員和包之間的依賴之間的依賴關(guān)系,使信息可以迅速高度依賴人與人之間(重點(diǎn)轉(zhuǎn)移信息的效率通過耦合帶來遞送),和理解可以被限制在高內(nèi)聚模塊(強(qiáng)調(diào)通過凝聚帶來的維護(hù)的便利性),但在同一時(shí)間,有人不能由被過度勞累依賴和過度勞累。你越依賴,更好的體能。這同樣適用于包裝凝聚力如此。高內(nèi)聚性是最小的編譯單元(類?),這將導(dǎo)致過小的封裝粒度,使包裝龐大的數(shù)量,失去維修的便利性。我們需要做的是根據(jù)依賴或不依賴現(xiàn)場(chǎng)做出選擇。
因此,在抽象的術(shù)語(yǔ),無論是為了解決通信問題或復(fù)雜問題,可以歸納為:
1.設(shè)置目標(biāo)指標(biāo)
2.測(cè)量現(xiàn)有的指標(biāo)和觀察現(xiàn)有的依賴關(guān)系圖
3.依賴于圖的調(diào)整計(jì)劃并執(zhí)行
4.觀察在指標(biāo)的變化
5.重復(fù)步驟3和4,直到達(dá)到目標(biāo)
但問題是:
1.如何衡量指標(biāo)?溝通的效率?代碼的質(zhì)量?他們都是可測(cè)量的。
2.如何遵守現(xiàn)有的依賴關(guān)系圖?軟件包的依賴關(guān)系仍然可以觀察到,但團(tuán)隊(duì)協(xié)作更難以觀察。
3.如何調(diào)整依賴圖?重構(gòu)?變更代理?人是不容易改變的代碼。
4.如果指標(biāo)不是簡(jiǎn)單的數(shù)字,如何比較?你怎么知道該指標(biāo)朝著目標(biāo)變更?
這四個(gè)問題都幾乎沒有確鑿的科學(xué)問題。管理復(fù)雜系統(tǒng)的復(fù)雜性,可能是硬科學(xué)。然而,定制軟件,為企業(yè)的發(fā)展與人的因素不能是硬科學(xué)。那么,數(shù)學(xué)公式是不回答這些問題。所以,在哪個(gè)方向,我們應(yīng)該努力?