軟體研發之道——有關軟體的思考

turingbooks發表於2020-04-07
    軟體是一種智慧財產權,軟體生產主要是一種智力活動。磁碟或光碟上的資料體現了軟體產品開發團隊的集體智慧。磁碟上體現的智力水平越高,創造的智慧財產權就越多,產品的價值也就越高。有了價值更高的產品,就可以賺更多的錢,獲得更多客戶,也可以讓智力活動影響到更廣泛的人群,併為開發者和他人帶來更多利益。

  如果你特別關注將人的智慧轉移為磁碟上的資料,把這作為軟體開發團隊的中心活動,那麼恭喜你,你有了一個正確的觀點,可以據此來監控和領導軟體開發。大多數軟體開發經理或領導者並沒有站在全域性角度來看待所承擔的任務,他們認為自己的工作要麼是設計,要麼是編碼,要麼是測試,要麼是寫文件,要麼是營銷軟體,要麼是以某種方式管理軟體開發過程。

  這種誤解的常見結果是延誤。在軟體開發過程中抱有無論什麼錯誤思想,結果幾乎總是造成延誤。通常延誤的時間相當長,遠遠超過最初的估計日期。是的,這種錯誤估計往往演變為所謂霧件(vaporware的滑稽笑柄,如果不是付出了沉重的代價——希望的破滅、金錢和人力的浪費,社會生產力下降等,霧件這個詞可以說是很幽默的。

  如果想要按時交付優秀軟體,每個人的大腦都必須融入到專案中。

  軟體開發管理的真正任務是調動儘可能多的智力,將它們投入到產品建立的活動中。智力的形式可以是抽象的人員素質,例如創造力、聰明才智、理性、效率和雅緻。智力還具有其他一些非物質的特性,例如適時上市以及滿足客戶需求。關鍵是,為了建立智慧財產權,必須有創造者的智力參與,而這種參與在任何軟體開發工作中都是最難完全落實的事情。雖然按時交付軟體並不簡單,但無論對於個人還是集體來說,這都是一項直截了當的要求。要創造優秀軟體則需要富有集體智慧的團隊,而且只有他們才能辦得到。

  假設企業有足夠的財力作為後盾,那麼剩下的真正至關重要的因素就是團隊是否凝聚了集體智慧。本書中的所有概念和經驗法則對於善於思考的人們來說都是顯而易見的。實際上,這些都是常識。它們大體上只講了三項當務之急的事情:讓人們開始思考、人們應該思考些什麼,以及如何讓人們更有效地思考。如果讀者曾經在富有集體智慧的軟體開發團隊中工作過,恐怕自己也能總結出不少這樣的原則。

  那麼,問題何在?如果按時交付優秀的軟體只是取決於一些常識,又為何如此罕見呢?

  考慮一下人類工作的主流模式。在大多數企業中,人們主要把資源投入到兩個領域中,一個是智力活動,另一個是常規機械工作。我們可以把這兩個領域看做設計和生產,或者工程設計和施工。就目前來看,企業資源(人員和資金)的最大部分通常被投入到機械工作中。汽車、建築或高速路等工作固然包含智力內容,但工程設計上的投資在總投資中所佔比例是微不足道的,儘管這部分投資具有至關重要的意義。

  現在思考一下,你會如何組織一家主要從事機械工作的企業?機械工作最大的價值源於效率,因此所有元素的組織都要從效率出發。裝配線是20世紀的主要工業流程,亨利·福特作為裝配線的發明者確立了他的歷史地位。裝配線在一端進料,在另一端產出有形產品,它的特點是千篇一律,而且單調乏味,但具有極高的效率。裝配線的進料和管理採用等級組織方式,企業中的每個人只承擔一個很小且狹窄的職責。

  軟體開發的組織方式就完全不是這麼回事了。軟體開發的目標產品是智慧財產權,而不是有形產品,因此機械工作部分所佔比例很少。

  運營一家生產套裝軟體的工廠當然並不簡單,但可能不比運營一家生產其他稍顯複雜的消費品(例如面向大眾市場的相機)的工廠更復雜。運營套裝軟體工廠的真正複雜性無疑來自主版本可用性的不確定性,主版本是指已完成的、等待複製的軟體。完成智力內容(即已完成的軟體)以後,事情的進展就相當順利了。

  軟體生產的不確定性和複雜性嚴重依賴於智力活動。企業的重心要從機械工作領域轉移到智力活動劇增的陌生而坎坷的世界,傳統的組織結構和習慣無力應對這種轉變。

  複雜縝密的思想是智力產品的原材料,但大部分商業企業實際上並不鼓勵思考。我們必須對企業進行一些重塑,或者用現代商業說法是改造它。我們必須找出人們為什麼不思考的所有原因,並消除它們,不是開除人,而是清除那些原因。

  本書將嘗試展現成功軟體企業的組織形式,這種形式無法被整齊地拆分為不同的職能單元。進度具有不確定性,產品經理必須掌握管理這種不確定性的種種要點,同樣重要的是,開發人員也必須完全理解這些不確定性的重要性。而且,除非每個團隊成員都有一個整體遠景,否則其貢獻必然會侷限於僅僅執行經理或巨集程式設計師為其分派的任務。這對人員潛力是一種浪費。如果想要按時交付優秀的軟體,那麼每個人的大腦都必須融入到專案中。讓每個人的大腦融入專案並一直保持專注,這是經理的主要職責,也是貫穿本書的主題。 

 

相關文章