用新的技術(shù)。而這一切走向極端就會(huì)讓研發(fā)陷入不可控制的地步。在我做物流和教育平臺(tái)產(chǎn)品的時(shí)候,都遇到了這樣的問(wèn)題。架構(gòu)師希望產(chǎn)品做得更大,滿(mǎn)足更多的業(yè)務(wù)需求,同時(shí)又希望幾乎每個(gè)業(yè)務(wù)模塊組件化,具有更多的通用性,采用盡可能新的技術(shù)。最終造成計(jì)劃的一拖再拖,讓公司領(lǐng)導(dǎo)層喪失信心。第二種情況在一些規(guī)模較小的產(chǎn)品研發(fā)中也很常見(jiàn)。技術(shù)領(lǐng)導(dǎo)人在時(shí)間、資金或PM的壓力下基本上放棄了軟件品質(zhì)的追求。他們只希望在規(guī)定的時(shí)間內(nèi)盡快做出一個(gè)東西就行。他們基本上不太考慮組件性、擴(kuò)展性等等。這樣做出來(lái)的產(chǎn)品和項(xiàng)目也就差不多了,因?yàn)樗耐ㄓ眯?、擴(kuò)充性太差??梢钥闯觯@兩種情況都可能導(dǎo)致產(chǎn)品的失敗。第一種總是想一口吃成一個(gè)胖子,他們忽略了軟件開(kāi)發(fā)的跌代性,軟件總是在不斷的跌代、更新中,螺旋式上升發(fā)展的。而第二種則是技術(shù)人員的悲哀,他們沒(méi)有條件去追求軟件的品質(zhì),只能寄希望于產(chǎn)品的下一個(gè)版本。事實(shí)上,沒(méi)有前一個(gè)版本良好的框架,新的版本要想做好,幾乎是重新開(kāi)發(fā)。所以一個(gè)優(yōu)秀的架構(gòu)師,既要不放棄心中的完美主義的理想,又要對(duì)現(xiàn)實(shí)做一定程度的妥協(xié),在這種平衡中,領(lǐng)導(dǎo)團(tuán)隊(duì)進(jìn)行技術(shù)開(kāi)發(fā)。事實(shí)上,在中國(guó)軟件產(chǎn)業(yè)的現(xiàn)階段,急功近利的公司太多了,他們不會(huì)提供更多的條件、更多的空間讓架構(gòu)師去實(shí)現(xiàn)一個(gè)優(yōu)秀的產(chǎn)品。這是我們所有做軟件技術(shù)人員的悲哀,這是所有想走向、或正在架構(gòu)師崗位上的人員的悲哀。
在軟件產(chǎn)品開(kāi)發(fā)的這一階段,除了以上的情況,還有許多問(wèn)題同樣會(huì)導(dǎo)致產(chǎn)品的失敗。例如公司對(duì)軟件工程的理解和掌握。軟件工程強(qiáng)調(diào)使用過(guò)程來(lái)保證項(xiàng)目的成功,一般都會(huì)提出一整套的理論,如一些核心流程、步驟、方法、規(guī)則等等,例如RUP,XP。有很多項(xiàng)目經(jīng)理、架構(gòu)師和軟件公司的高層都希望去使用這些方法,以保證項(xiàng)目、產(chǎn)品的成功。特別是公司的上層領(lǐng)導(dǎo),他們只能通過(guò)這種方法來(lái)保證對(duì)項(xiàng)目的控制,所以特別熱衷于實(shí)施這些方法。然而事實(shí)上呢?。大家都常有這樣的經(jīng)歷:
為了文檔而寫(xiě)文檔,寫(xiě)出來(lái)的文檔基本上可以扔進(jìn)垃圾箱,沒(méi)有任何作用了。我這樣說(shuō),并不認(rèn)為軟件工程有什么不好,關(guān)鍵在于你怎么去使用它。軟件工程是一門(mén)實(shí)踐性很強(qiáng)的學(xué)科,需要我們根據(jù)不同的現(xiàn)實(shí)情況不斷的調(diào)整、實(shí)施,而不是照本宣科的一些教條。最怕遇到這種情況:
一些領(lǐng)導(dǎo)或項(xiàng)目經(jīng)理讀了幾本軟件工程的書(shū),自以為找到了靈丹妙藥,就開(kāi)始在項(xiàng)目中強(qiáng)力實(shí)施。比如制訂一些步驟、計(jì)劃,在什么什么時(shí)間,達(dá)到什么什么成果,要寫(xiě)什么什么樣的文檔等等。在我以前做教育軟件產(chǎn)品中就充滿(mǎn)了這種傾向。了在某為一時(shí)間交出架構(gòu)設(shè)計(jì)文檔,我們大部分時(shí)間不是去考慮、驗(yàn)證架構(gòu),而是為了寫(xiě)出這份文檔。結(jié)果是,到我們要去實(shí)現(xiàn)時(shí),發(fā)現(xiàn)根本行不通,整個(gè)架構(gòu)存在嚴(yán)重的問(wèn)題,到這個(gè)時(shí)候再回頭重做設(shè)計(jì),代價(jià)太大了。個(gè)人感覺(jué)是,要合理的使用一些軟件工程理論,需要項(xiàng)目經(jīng)理、架構(gòu)師有豐富的實(shí)踐經(jīng)驗(yàn),能夠根據(jù)不同的產(chǎn)品研發(fā)情況,制訂自己的一些確實(shí)可行的方法。軟件工程是一些通用的理論,從來(lái)而且應(yīng)該是可以靈活裁減的。四、其他步驟 如果說(shuō)上面的步驟都很好的做到了,那產(chǎn)品應(yīng)該說(shuō)基本上成功了。有了一個(gè)合理的的架構(gòu)設(shè)計(jì),那么詳細(xì)設(shè)計(jì)和編碼應(yīng)該不是一個(gè)問(wèn)題,這只需要我們的軟件工程師的努力就可以了。當(dāng)然測(cè)試是很重要的,但基本上不會(huì)導(dǎo)致產(chǎn)品的研發(fā)失敗。