項目發(fā)展到一定程度,因?yàn)楣δ艿脑龆啵蜁兊迷絹碓接纺[,原來的架構(gòu),就會不能滿足現(xiàn)有的需求,因?yàn)槲覀冇泻芏嘧畛跻?guī)劃的時候沒有想到的事情,比如說在網(wǎng)站或者軟件規(guī)模小的時候,我們并沒有考慮到國際化,但隨著發(fā)展,我們走出亞洲奔向世界了,這個時候我們需要全世界的人來用我們的產(chǎn)品,這個時候就需要重構(gòu)了。
有人會問,既然這樣,為什么我們不在軟件最初架構(gòu)搭建的時候把這些東西都想進(jìn)去呢?因?yàn)槲覀冊诋a(chǎn)品的前期開發(fā)中,不會有這么多的人力財力投入進(jìn)去。而且產(chǎn)品是慢慢進(jìn)化的,不是一天想出來的,功能也會隨著增多。還有一個個重要的原因,是技術(shù)不在停的進(jìn)步,比如說原來沒有OOP的概念,原來沒有Web API的概念,原來沒有AJAX的概念,所以我們可能會用一些老舊的技術(shù)。
公司的發(fā)展也是一種重要的原因,在企業(yè)發(fā)展初期,公司往往是怎么快怎么來,前期主要是活下來,先生存再生活,一大早就想開個哈里法塔是不現(xiàn)實(shí)的,羅馬不是一天建成的。我記得曾經(jīng)有個這樣的老板,一個小小的創(chuàng)業(yè)型公司,就想著要把系統(tǒng)打造成日訪問量500萬獨(dú)立IP的系統(tǒng)(他當(dāng)時說的是并發(fā)500萬,呵呵,因?yàn)樗欢夹g(shù),我認(rèn)為他想的是日訪問量500萬),這明顯是不現(xiàn)實(shí)的,因?yàn)橐环矫妫愕膱F(tuán)隊沒有這個能力來蓋這么高的房子,迫其而為之,而你又不懂技術(shù),最終得到的只是欺騙。另一方面,我們退一步說,就算你真的有這樣的團(tuán)隊,也沒必要把資金浪費(fèi)在這種不靠邊的事上。除非你真的經(jīng)過沙盤推演,有足夠的信心和錢燒,讓訪問量很快達(dá)到這個水平,不過我覺得一個創(chuàng)業(yè)型公司達(dá)到500萬獨(dú)立IP不是一個很容易的事情。
很多公司基本上是這樣,在初創(chuàng)的時候,也沒有統(tǒng)一的規(guī)劃,找人是怎么便宜怎么來,結(jié)果可能是找一幫實(shí)習(xí)生來干的活,造成一個項目什么語言都有,完全沒有OO的概念,比如我曾經(jīng)在搜房呆過幾天,他們的代碼就是如此,Asp.Net的代碼完全寫在aspx的頁面里,一行代碼望不到頭,沒有文檔。軟通很多的項目也是如此。所以很多時候,你別看公司很大,其實(shí)他們的IT項目也不規(guī)范,因?yàn)檎嬲?guī)范起來的成本還是很高的,前期成本非常高。
扯了這么多,我們該說說重構(gòu)了,當(dāng)項目一而再再而三地修改的時候,大家都會很煩,新手可能習(xí)慣Ctrl+V和Ctrl+C,我是最痛恨這種行為的,我本身比較懶,只要是在兩個地方或者可能會在兩個地方出現(xiàn)的代碼,我就會提煉出來。面對著一團(tuán)亂麻的代碼,或者技術(shù)已經(jīng)相當(dāng)落后了的時候,我們就需要重構(gòu),重構(gòu)是需要勇氣的,我們需要去說服決策者,這很不容易,因?yàn)楹芏鄷r候決策者不懂技術(shù),你忽然說要重構(gòu)就意味著大筆的投入,而對于決策者來說,投入就意味著要產(chǎn)出,這個時候技術(shù)負(fù)責(zé)人會面臨著很大的壓力,很多技術(shù)負(fù)責(zé)人會卡在這里,停滯不前,或者是采用折中的辦法。
我們技術(shù)負(fù)責(zé)人應(yīng)該就決策者關(guān)心的事情和他談,就是投入與產(chǎn)出的問題,這個是決策者都最想知道的問題,如果你能清楚地告訴決策者,投入一千萬可以賺下(或者省下)五千萬,那么我想他會考慮這個事情,但技術(shù)負(fù)責(zé)人往往不擅長于談判,或者是說責(zé)任心不足。
或者我們可以這樣,把過去一年中,在IT中的投入列出,告訴決策都有哪些是通過重構(gòu)生避免的,同時把過去一年中的機(jī)會列出,告訴他如果我們重構(gòu)生哪些機(jī)會可以把握住。
然而,是所有的項目都需要重構(gòu)么?項目重構(gòu)都會成功么?未必!但是——我們需要有勇氣打破僵局,不破則不立,當(dāng)原有的系統(tǒng)已經(jīng)不能滿足現(xiàn)在的需要時,我們就打破它,建立一個新的規(guī)則。
來源:涂雅投稿,原文網(wǎng)址,轉(zhuǎn)載請保留此鏈接,否則視為侵權(quán)。
出處:月光博客 http://www.williamlong.info/