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