最初的問題
上周,在SCNA(北美2010軟件技術(shù)大會(huì))的一個(gè)專題小組討論會(huì)上,Chad Fowler (@chadfowler)問道,“有多少項(xiàng)目是因?yàn)槌绦虻脑蚴〉??”。按?dāng)時(shí)的情形,我想他的觀點(diǎn)是,項(xiàng)目的失敗歸咎于業(yè)務(wù)問題,而非程序。會(huì)議室里很安靜??梢钥闯?,全體成員認(rèn)為他說的是有道理的。我相信大家是都同意Chad的觀點(diǎn)的。項(xiàng)目的失敗,罪不在于程序,在于業(yè)務(wù)問題。
后續(xù)調(diào)查
Uncle Bob (@unclebobmartin)后來做了一次簡單的微博調(diào)查,我和其他很多人都參與了。調(diào)查的結(jié)果是,贊成項(xiàng)目失敗的責(zé)任主要?dú)w咎于業(yè)務(wù)問題、而非技術(shù)問題的占了絕大多數(shù)。Bob感到這么多人選擇這樣的觀點(diǎn)表明了從長遠(yuǎn)角度看,程序不是那么的重要,因此,技術(shù)人員也一樣顯的不那么重要。
Bob認(rèn)真了提出了一些很好的論據(jù)來說明為什么程序很重要,來說明事實(shí)上,程序不僅能使項(xiàng)目失敗,而且會(huì)使整個(gè)公司倒閉。我在這里不做更多的復(fù)述,我強(qiáng)烈推薦你們?nèi)プx一下Bob的這篇文章, “The Cost of Code?” (外刊IT評(píng)論網(wǎng)提供了這篇文章的中文全文翻譯),Bob在這篇文章里的大部分觀點(diǎn)我都贊同。程序的成本很大。但我不認(rèn)為所有的項(xiàng)目的失敗都?xì)w咎于程序,但他用來說明這個(gè)觀點(diǎn)的例子都很有價(jià)值。
原因和責(zé)任
證據(jù)確鑿
一個(gè)人死了,一顆子彈擊中了他的胸膛。一個(gè)項(xiàng)目失敗了,只剩下一堆沒有的程序碼。對(duì)于我們來說也許事實(shí)很清楚,一顆子彈殺死了這個(gè)人。對(duì)于我們來說也許事實(shí)很清楚,糟糕的程序殺死了這個(gè)項(xiàng)目。在沒有舉出其它可能的論證、在現(xiàn)有缺少證據(jù)的情況下,我承認(rèn)這兩種認(rèn)定。人被一顆子彈殺死,項(xiàng)目被糟糕的程序害死。
是的,從技術(shù)上講,項(xiàng)目的失敗歸咎于程序。
扣動(dòng)扳機(jī)的人
我們的悲劇并沒有結(jié)束。我們不能夠用消滅子彈來阻止謀殺,我們更不能用禁止對(duì)程序代碼的依賴來挽救項(xiàng)目。雖然子彈和程序是原因,但它們都只是表象。
是有人扣動(dòng)了扳機(jī)。
在大型項(xiàng)目中,要想找到一個(gè)受譴責(zé)的對(duì)象,你不能不提及那些自以為是的人。在大型項(xiàng)目中,通常都是眾多的人為因素要對(duì)失敗負(fù)責(zé)。如果我們要對(duì)大多數(shù)失敗的項(xiàng)目進(jìn)行考古發(fā)掘,我可以自信的說,我們會(huì)發(fā)現(xiàn)失敗的原因都在人身上。我可以自信的說,我們會(huì)發(fā)現(xiàn)這些都是交流不暢的失敗。這不是一種失敗,是成百上千種的,大的或小的失敗。缺乏遠(yuǎn)見,缺乏透明度。
由于缺乏遠(yuǎn)見和透明度而導(dǎo)致的缺乏凝聚力。缺乏清楚的預(yù)期。責(zé)任不清。當(dāng)不同意時(shí)緘口不言。以非建設(shè)性的方式發(fā)表反對(duì)。討論起來像打仗。用煽動(dòng)性的語言制造分裂。避而不談失誤。用發(fā)郵件來替代打電話。用打電話來代替面對(duì)面交流。過度強(qiáng)調(diào)交貨日期。對(duì)時(shí)間和速度的認(rèn)識(shí)截然相反。不重視周邊工作。沒熱情 … 這個(gè)清單還有很多。
對(duì)于軟件項(xiàng)目,程序是關(guān)鍵。你不可能制作一個(gè)沒有代碼的軟件項(xiàng)目。程序代碼越糟,項(xiàng)目的風(fēng)險(xiǎn)越大。當(dāng)糟到一定程度,項(xiàng)目就會(huì)失敗。更嚴(yán)重的是,公司也可能會(huì)因?yàn)檫@個(gè)項(xiàng)目而倒閉。
但我不會(huì)忘記,是我們寫了這些程序。
是我們扣動(dòng)了扳機(jī)。