閑暇之日,捧起Pete McBreen的Software Craftsmanship讀了起來。剛翻上幾頁就依稀感覺作者與我在某些問題上的觀點出奇的相似。我不同意一些人對本書於軟體工程所謂“顛覆性”的評價,正如作者在“重新置放軟體工程”部分所表明的:“軟體工藝並非軟體工程的替代品,而是對軟體工程的補充...對於小型團隊來說,工藝學方法會更合適,因為我們可以相信優秀的開發人員能夠承擔起整個項目開發和維護的責任...如果一個項目需要50名以上的開發人員耗費2年以上的時間,那麼這個項目就應該採用軟體工程的方法。”
將軟體開發看作是一門手藝,或許更能讓軟體開發人員產生共鳴,歸根到底,參與軟體開發的是一群有血有肉的人,而不是機器。將軟體開發人員看作“人”,從人性的角度去看待軟體開發或許更貼切,只有將著眼點迴歸到人身上,那些軟體工程中所謂的原則才會被發現是如此可笑。書中講述了工匠為維護自己的聲譽而儘可能地向顧客交付高品質產品,這就是作者闡述為什麼從工藝學的角度進行軟體開發更能夠產生讓顧客滿意的產品的根本點。但是作者好像混淆了工匠和公司兩個不同的實體,任何人都知道,工匠是具體的個人,而公司是指一個集體或機構。從個人角度而言,每個人都很在乎自己的形象和別人對自己的評價。然而當許多人聚集到一起形成一個公司時,情況卻有所不同,好像所有人都被保護在“公司”這層外殼之內,所有的罵名都由公司擔著,只要從公司走出去的時候別被人瞧見就行。其實,人性中那種“希望得到別人認同”的觀念依舊根深蒂固,但是當有機會逃脫指責時,人性中的懶惰和僥倖心理又跳了出來。因此,有公司這層外殼作擋箭牌,人們便失掉了維護自己形象的動力,我想這才是人的因素影響軟體成敗的關鍵,也就是說責任心(不管是對自己聲譽,還是為那些更加高尚的事物)是軟體開發中“人”這一要素的關鍵。
我完全認同作者所描述的“學徒-技師-工匠”學習模式,畢竟軟體開發是一門手藝,經驗需要一代一代地傳承下去,才能避免一次又一次地重蹈覆轍。在工藝學中,工匠越老越值錢,這與軟體開發領域的觀念完全相反。如果我們只是從體力、精力來看待上了年紀的開發人員,他們的確不如年輕一代;然而從經驗來看,這些年長的工匠無疑是值得珍藏的寶貝,如果上這些老工匠們指點一二,恐怕你會少走很多彎路。
該書以工藝學作隱喻,迴歸軟體開發的主體——人,提升了開發人員的思維方式。作為一名軟體開發人員,不應該把自己當成一台機器中的一個齒輪,每天重複著機械式的“體力勞動”,而應該以創作者的身份來完成你的作品。軟體開發是一門手藝,它將藝術、科學和工程學巧妙地融合在一起,因而軟體開發理應有其樂趣,否則,開發過程就是錯的。