如果像軟件開發(fā)那樣去造飛機(jī)
經(jīng)常會聽到某某領(lǐng)導(dǎo)一拍桌子說,“干不完就加人、加班。”這話聽起來似乎理直氣壯,但如果是軟件公司的領(lǐng)導(dǎo),這就大錯特錯了,這說明這人根本不懂軟件。軟件開發(fā)就如同女人生孩子,10月懷胎,加再多的人也不能讓她提前分娩。
不是我們程序員太矯情,軟件開發(fā)不比其他行業(yè)。軟件工程雖然也叫工程,但跟土木工程無法相提并論。軟件工程師雖然也是工程師,但跟建筑工程師干法完全不同。引用《軟件工程的變遷》里的話,你能明顯軟件工程的不同之處:
當(dāng)一個(gè)土木工程師去修建一座跨河大橋來連接河兩邊的道路時(shí),工程師會非常清楚的知道道路跨河的精確地理坐標(biāo)位置。行駛的車輛在數(shù)年里也不會發(fā)生重大的改變。橋梁工程師只需要按照之前已經(jīng)被上千次的驗(yàn)證過的建筑工藝把河兩邊的路連接到一起。
對于軟件系統(tǒng),因?yàn)榧夹g(shù)或業(yè)務(wù)發(fā)生了變化,在建設(shè)過程中(在所有需求和設(shè)計(jì)文檔完全完成后)需求需要做重大修改的情況并不罕見。如果把這種情況放到修橋的事情上,相當(dāng)于當(dāng)橋的地基打好后,再把橋的搭建位置往河的下游移6公里。
不僅如此,軟件開發(fā)里還有一些讓其他行業(yè)里人無法理解的現(xiàn)象。比如程序員夜貓子的習(xí)慣,想想如果建筑工人也是晝伏夜出會是什么景象?比如“結(jié)對編程”,如果建筑工人結(jié)對砌磚會是什么效果,不僅不會提高速度和質(zhì)量,而且很有可能會被開除。特別是“持續(xù)交付(Continuous delivery,開發(fā)一塊,給用戶交付一塊)”,如果蓋房子也“持續(xù)交付”,沒有屋頂?shù)姆孔右欢〞┯?。但如果換成造飛機(jī)時(shí)也邊造邊運(yùn)營,這就是奇跡了。大家想看奇跡嗎,那就看看下面這個(gè)視頻吧,看看如果像軟件開發(fā)那樣去造飛機(jī),會是一個(gè)什么樣的壯舉。