軟體開發的自然屬性

北京的201個藍天發表於2017-05-11

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

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

nature-of-software

汽車上到生產線,工人按照既定的程式不停“重複”的生產著同樣規格的產品,對於汽車來說,生產線上同一批次的汽車一定是一樣的;對於軟體來說,如果是同樣的軟體,生產的過程可以被簡化為“複製”和“貼上”。而我們所理解的所謂軟體的生產製造過程其實對應的是“原型車”的設計過程,因為每次經歷這整個過程的軟體都不再是統一批次(版本)。

從這個角度來說,軟體開發其實一直處於“設計”過程,而從來不會進入和傳統制造業類似的“生產”過程。傳統的瀑布模式的軟體專案管理思路其實就是在用管理不停重複”生產“過程的方法來管理一個不斷變化的“設計”過程,註定是不適合的。

yuan_befb91c29c0712b9c840b64f61431624

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

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

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

101809373

我要說的是:不會做菜的程式設計師不是好設計師 … … 但至少我們都是設計師,不是編碼工人。


 

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

qrcode_for_gh_b7c158df1fd1_430

相關文章