你應該了解這一軟件開發(fā)的自然屬性
什么是軟件的生產制造過程?需求收集,分析,設計,開發(fā),測試,打包,發(fā)布;這些是軟件的生產制造過程嗎?
看上去好像沒有問題,這不就是將軟件從無到有制造出來的過程嗎?好吧,那讓我們用下面這張圖來比較一下:一輛汽車的生產制造過程和一個軟件的生產制造過程有什么區(qū)別。
汽車上到生產線,工人按照既定的程序不停“重復”的生產著同樣規(guī)格的產品,對于汽車來說,生產線上同一批次的汽車一定是一樣的;對于軟件來說,如果是同樣的軟件,生產的過程可以被簡化為“復制”和“粘貼”。而我們所理解的所謂軟件的生產制造過程其實對應的是“原型車”的設計過程,因為每次經歷這整個過程的軟件都不再是統(tǒng)一批次(版本)。
從這個角度來說,軟件開發(fā)其實一直處于“設計”過程,而從來不會進入和傳統(tǒng)制造業(yè)類似的“生產”過程。傳統(tǒng)的瀑布模式的軟件項目管理思路其實就是在用管理不停重復”生產“過程的方法來管理一個不斷變化的“設計”過程,注定是不適合的。
也許大家對汽車生產線還是不夠熟悉,那我們來舉個做菜的例子。你要做一道西紅柿炒雞蛋,正常的工序是:炒蛋,拿出,放油,放蔥,放西紅柿,放糖,放入炒好的蛋,放鹽,出鍋。沒毛病,這就是一盤正常的西紅柿炒蛋,按照這個工序,任何經過簡單培訓的人都可以很容易的快速復制這道菜。但是,假設你已經完成了放糖的步驟,這時候客人說他有糖尿病,怎么辦?你只能倒掉西紅柿從來,還好炒好蛋還可以用。又或者,客人點了西紅柿炒蛋,上了桌客人說這個不對,我要的是黃瓜炒蛋 … … 作為大廚的你是否會提刀見客?好吧,其實軟件開發(fā)的過程遠比這個復雜,推倒重來算好的,蓋好了大樓再拆掉地下室這種事在軟件行業(yè)也是家常便飯,用戶搞不清西紅柿和黃瓜算好的,至少他承認搞不清,很多用戶會要求你把黃瓜做成西紅柿的味道?,F在你理解為什么會有程序員暴打產品經理的事情出現了吧?
這就是軟件開發(fā)的自然屬性,它不是一門科學,更不是一門工程;因為科學和工程都是把已經解決的問題作為經驗/定理,供大家重復使用;而軟件開發(fā)更像是炒菜,就算是最有經驗的大廚,每次的菜也都要重做,再詳細菜譜也無法保證炒出一樣的味道;環(huán)境,時間,材料甚至大廚心情的都會對味道有影響。更糟糕的是,至少做菜的材料和過程是可見的,軟件開發(fā)的過程是不可見的,你看到的只是設計人員寫了一堆菜譜,程序員不停的把代碼扔到鍋里,而這些好像和***那道菜都沒啥關系。
牢記這一點,這才是軟件開發(fā)的本質,任何希望用既定的計劃去約束這個過程,任何希望用代碼工人和管理流程代替開發(fā)人員的自主性和創(chuàng)造性的努力都將失敗;軟件開發(fā)永遠在設計,就像陸遠說的:每個廚子都是一名設計師。
我要說的是:不會做菜的程序員不是好設計師 … … 但至少我們都是設計師,不是編碼工人。
【本文為51CTO專欄作者“徐磊”的原創(chuàng)稿件,轉載請通過作者微信公眾號devopshub獲取授權】