軟體工程從上世紀70年代提出這個概念以來,經曆了許多次的重生和迭代,發展到今天已經有許許多多的工程方法,讓我們再回頭看看軟體開發的過程,這些方法真的很有效嗎?這些方法真的是放之四海皆準嗎?沒有!不是!到現在為止,可以肯定地說沒有一個工程化的方法能讓我們滿意, 我們還在探索的路上。
軟體工程化是人們在軟體開發過程中試圖用工程的方法來解決碰到的問題,工程化的本質就是可控,成本可控,結果可控,生產周期可供,所有的東西都可控,但我們忽略了軟體的本質是人的思維活動,科學技術發展到如今的地步,我們還是無法複製人的思維活動或者說最不能仿造的就是人的大腦,因為它太複雜,複雜得不能用目前的知識去解釋,試問如何用一個或一套簡單的方法去管理人的如此複雜的思維活動,如何用一套所謂的工程方法去管理由思維活動組成的軟體開發?難道軟體開發就無法管理了嗎?不,複雜的問題其實有簡單的解決方案,就是按他的本質去尋找解決方案。我們不可否認的是,軟體的管理確實與工程的管理有某些相似的地方,我們需要對軟體項目進行預算,就像開發房地產一樣,必須要在動工前算一算做這個項目如何花錢,如何掙錢。但這些管理都是軟體開發的環境管理,而不是軟體開發的管理。我們是不是都在納悶過?為什麼公司在創業初期的時候,我們幾個人在很短時間就可以開發一套可用的軟體,但公司發展壯大了,我們幾十人,甚至上百人,卻還是拿不出一個像樣的東西交付使用?如果從工程的角度說,投入的人越多,產出應該相應增加,為什麼恰恰相反?那讓我告訴你,那是管理者太迷信了軟體工程管理的方法!我們需要反省的是:我們用一套好無用處的經驗公式評估我們的工作量,花上項目的絕大部分時間去產生大量的沒有意義的文檔,把大量的寶貴時間花在沒有意義的會議上,花在沒有成型的簡單的評估系統上。
人才是最重要的因素。我們沒有考慮到人的因素,沒有考慮到人的潛能,沒有發揮我們人的主觀能動性,而是用一些粗暴的管理方式,推動著一群麻木的木偶去敲打鍵盤,去生產代碼,這能出好的成果嗎?我們都知道日本人的產品品質是全世界最好的(無論我們對日本國有什麼樣的情緒,但事實就是這樣),為什麼其他的國家不行,唯獨日本可以做到,內在的因素就是日本人的文化,日本人是真正的把榮譽看得高於生命,同樣把這種思想用到生產中的,他們要讓世界知道,日本人的產品就是最好的,這關係到他們的榮譽,關係到他們民族的榮譽。也是這樣,他們擁有了世界上無人能學到的本領,因為你們的文化不一樣,這就是我要說的軟體開發中人的因素。人的因素與文化不可分離。文化是無法簡單模仿的,這需要時間去沉澱,文化沒有優劣,文化只有不同。我們要用合適我們的文化去管理軟體的開發,而不是泛工程化的方式去照搬別人一套東西,每個公司有每個公司的文化,每個人有每個人的文化,軟體工程化的方式可以用於軟體開發的各個階段,但它只是工具,而不是我們的方法論和價值觀。工具是被人來使用的,我們要按照我們文化的方式,去激勵我們的員工奮發努力,去發掘他們的潛力,去讓他們感受到產品的品質攸關他的榮辱,用革命的精神,用不怕艱難的毅力,完成自己的任務。我們常說最好的軟體開發方式就是一個人去開發,這樣效率是最好的,但風險是最大。效率的提升是沒有浪費有限時間在與人溝通問題,風險最大是領導者無法可控這個資源,他會有滅失和能力問題的可能,所以我們需要加入更多人來參與軟體開發的活動,如何才能規避我們的風險的同時,提升我們效率,如何才能讓更多人的像一個人一樣?這就需要文化或者說是企業文化,用文化作紐帶,用文化做溶劑,讓更多的人融合到一起,去共同完成一個一個富有挑戰的項目。
軟體開發中,人的因素才是最重要的,工程化只是一個工具而已,特別是迷信工程化的方式,尤其不可取,誠然好的工程化的方法(如敏捷開發)可以讓我們做得更好,但不能保證我們一定做得好,不能讓工程化過程犧牲了我們的主觀能動性,這就要求管理者在管理的過程中,不能簡單用公式去去量化一個人的成果,一個富有創意的設計,一條有經驗的建議,可能對軟體產品產生不可估量的作用,這就是軟體的管理的複雜之處,也是他的美妙之處。管理的最初境界應該是用現成的管理方法去大聲吆喝著,最高的管理境界應該是人的自我管理,是沒有管理的管理。