軟件開發的天然屬性

什麼是軟件的生產製造過程?需求收集,分析,設計,開發,測試,打包,發佈;這些是軟件的生產製造過程嗎?程序員

看上去好像沒有問題,這不就是將軟件從無到有製造出來的過程嗎?好吧,那讓咱們用下面這張圖來比較一下:一輛汽車的生產製造過程和一個軟件的生產製造過程有什麼區別。微信

nature-of-software

汽車上到生產線,工人按照既定的程序不停「重複」的生產着一樣規格的產品,對於汽車來講,生產線上同一批次的汽車必定是同樣的;對於軟件來講,若是是一樣的軟件,生產的過程能夠被簡化爲「複製」和「粘貼」。而咱們所理解的所謂軟件的生產製造過程其實對應的是「原型車」的設計過程,由於每次經歷這整個過程的軟件都再也不是統一批次(版本)。運維

從這個角度來講,軟件開發其實一直處於「設計」過程,而歷來不會進入和傳統制造業相似的「生產」過程。傳統的瀑布模式的軟件項目管理思路其實就是在用管理不停重複」生產「過程的方法來管理一個不斷變化的「設計」過程,註定是不適合的。測試

yuan_befb91c29c0712b9c840b64f61431624

也許你們對汽車生產線仍是不夠熟悉,那咱們來舉個作菜的例子。你要作一道西紅柿炒雞蛋,正常的工序是:炒蛋,拿出,放油,放蔥,放西紅柿,放糖,放入炒好的蛋,放鹽,出鍋。沒毛病,這就是一盤正常的西紅柿炒蛋,按照這個工序,任何通過簡單培訓的人均可以很容易的快速複製這道菜。可是,假設你已經完成了放糖的步驟,這時候客人說他有糖尿病,怎麼辦?你只能倒掉西紅柿歷來,還好炒好蛋還能夠用。又或者,客人點了西紅柿炒蛋,上了桌客人說這個不對,我要的是黃瓜炒蛋 … … 做爲大廚的你是否會提刀見客?好吧,其實軟件開發的過程遠比這個複雜,推倒重來算好的,蓋好了大樓再拆掉地下室這種事在軟件行業也是屢見不鮮,用戶搞不清西紅柿和黃瓜算好的,至少他認可搞不清,不少用戶會要求你把黃瓜作成西紅柿的味道。如今你理解爲何會有程序員暴打產品經理的事情出現了吧?編碼

這就是軟件開發的天然屬性,它不是一門科學,更不是一門工程;由於科學和工程都是把已經解決的問題做爲經驗/定理,供你們重複使用;而軟件開發更像是炒菜,就算是最有經驗的大廚,每次的菜也都要重作,再詳細菜譜也沒法保證炒出同樣的味道;環境,時間,材料甚至大廚心情的都會對味道有影響。更糟糕的是,至少作菜的材料和過程是可見的,軟件開發的過程是不可見的,你看到的只是設計人員寫了一堆菜譜,程序員不停的把代碼仍到鍋裏,而這些好像和最後那道菜都沒啥關係。設計

牢記這一點,這纔是軟件開發的本質,任何但願用既定的計劃去約束這個過程,任何但願用代碼工人和管理流程代替開發人員的自主性和創造性的努力都將失敗;軟件開發永遠在設計,就像陸遠說的:每一個廚子都是一名設計師。code

101809373

我要說的是:不會作菜的程序員不是好設計師 … … 但至少咱們都是設計師,不是編碼工人。項目管理


 

請關注微信公衆號 【devopshub】,獲取更多關於DevOps研發運維一體化的信息開發

qrcode_for_gh_b7c158df1fd1_430

相關文章
相關標籤/搜索