程序員的工作不能用“生產(chǎn)效率”這個(gè)詞來(lái)衡量
通過(guò)反復(fù)的交談,Bill Caputo最終說(shuō)服了我,讓我相信了一些不可思議的事情。這些事情改變了我整個(gè)看問(wèn)題的方式,也讓我重新思考如何更好的工作。
軟件開(kāi)發(fā)中沒(méi)有“生產(chǎn)效率”。
幾乎正如10年前 Martin Fowler 發(fā)現(xiàn)的, 用生產(chǎn)效率來(lái)衡量軟件開(kāi)發(fā)工作沒(méi)有任何意義。原因就在于,它們不屬于同一范疇。換句話說(shuō),生產(chǎn)效率不具有作為衡量軟件開(kāi)發(fā)工作的適用性。“今天創(chuàng)造了多少 代碼/軟件?”這是一個(gè)沒(méi)有意義的問(wèn)題。即使可以這樣測(cè)量,軟件開(kāi)發(fā)工作上的生產(chǎn)效率也不能以任何有意義的方式估計(jì)出它的商業(yè)價(jià)值。
這是因?yàn)椋浖_(kāi)發(fā)這種工作并不一定非要生產(chǎn)出 什么東西。讓我來(lái)舉個(gè)例子:比如說(shuō),碰巧有兩個(gè)程序員分別在開(kāi)發(fā)兩個(gè)完全一樣的項(xiàng)目,他們?cè)谕惶毂环峙淞讼嗤娜蝿?wù)。***個(gè)人,弗蘭克,回到電腦前,寫(xiě) 出了一個(gè)有1000行代碼的框架,***的解決了問(wèn)題。代碼規(guī)范書(shū)寫(xiě),全面測(cè)試,有詳細(xì)的文檔描述部署和操作的流程。第二個(gè)程序員,皮特,轉(zhuǎn)身去了公園,在 哪里,他一邊喂鴿子一邊思考問(wèn)題。大概在下午4:45分,皮特溜達(dá)回辦公室,刪掉了200行代碼,并部署了他的修改…問(wèn)題就這樣解決了。
這兩個(gè)程序員,今天的“生產(chǎn)效率”誰(shuí)的更高?答案是:這無(wú)關(guān)緊要。緊要的是,皮特解決了問(wèn)題,同時(shí)為團(tuán)隊(duì)消減了長(zhǎng)期維護(hù)的成本。弗蘭克同時(shí)也解決了問(wèn)題,但他因?yàn)?em>生產(chǎn)了代碼,提高了維護(hù)成本,所以,(在其它方面完全等效的情況下)他的方案差一些。而把皮特稱作更有“生產(chǎn)效率”,則完全從實(shí)效性上扭曲了這個(gè)比喻。
我認(rèn)為,優(yōu)秀的程序員,他所做的事情應(yīng)該是去除問(wèn)題。而相對(duì)的則是生產(chǎn)出什么。所以,技術(shù)上的生產(chǎn)產(chǎn)物,例代碼,文檔,數(shù)據(jù)等,對(duì)于實(shí)現(xiàn)“去除問(wèn)題”的目標(biāo)來(lái)說(shuō),都是必要但有害的。這就是為什么有時(shí)候,這最有效的解決方案是5分鐘的交流溝通。
對(duì) 這種思考模式最有力的支持:當(dāng)你用這種思維去看待軟件開(kāi)發(fā)后,很多棘手的、能看得到但無(wú)法測(cè)量的問(wèn)題突然間變得很容易理解。例如,為什么當(dāng)程序員和他們的 客戶隔離開(kāi)時(shí)會(huì)顯得缺乏效率。難道讓他們避免打攪不會(huì)提高工作效率嗎?答案是不會(huì),按常理這會(huì)使他們更有效率…但也會(huì)造成他們更沒(méi)效率。因?yàn)樗麄兊墓ぷ魇? 為客戶解決問(wèn)題,與客戶的隔絕導(dǎo)致他們無(wú)法找到問(wèn)題,確定問(wèn)題。相反,跟有問(wèn)題的人保持溝通能更有效的解決問(wèn)題,甚至有時(shí)候你一天8小時(shí)手指根本不需要碰 鍵盤(pán)。
這將我們引向了另外一個(gè)問(wèn)題:為什么軟件開(kāi)發(fā)中維護(hù)成本相比起其它方面的成本顯得很難接受?為什么我們永遠(yuǎn)無(wú)法在***次做出“正確”的東西?一種解釋就是,軟件是一個(gè)對(duì)可能變化的問(wèn)題的固定解決方案。 當(dāng)問(wèn)題發(fā)生變化時(shí)(或我們對(duì)它的理解發(fā)生變化時(shí)),問(wèn)題和解決方案之間就出現(xiàn)了裂痕。這種隨著問(wèn)題的演變而不停的修補(bǔ)產(chǎn)生的縫隙的活動(dòng)代價(jià)高昂。這也解釋 了為什么相對(duì)于其它軟件項(xiàng)目,視頻游戲通常的維護(hù)成本較低。這是因?yàn)樗鼈冃枰鉀Q的問(wèn)題(讓人們?nèi)ベI這個(gè)游戲,玩這個(gè)游戲)基本上是根據(jù)人類心理學(xué),而這 是不常變化的。
好的程序員和壞的程序員之間10倍之差的“生產(chǎn)效率”又是從何說(shuō)起?每個(gè)人都說(shuō)這是事實(shí),但事實(shí)上沒(méi)有人能直接的測(cè)評(píng)。我們 的理論同樣能解釋這個(gè)問(wèn)題。相比起工作效率來(lái)說(shuō),“解決問(wèn)題”是一種更容易“調(diào)控”(金融詞匯)的東西,使得產(chǎn)生一個(gè)數(shù)量級(jí)差別的效果很容易實(shí)現(xiàn)。解決問(wèn) 題需要的是信息和洞察力。你要么有,要么沒(méi)有。不需要原材料,沒(méi)有生產(chǎn)能力限制。并不是差的程序員打字速度慢。并不是如果他們努力就能做得更好。他們是缺 乏這種高效解決問(wèn)題的眼界和必要的信息。也許無(wú)法測(cè)量好程序員和差程序員在生產(chǎn)效率上的差別的原因就在于沒(méi)有東西可測(cè)量。
還有很多現(xiàn)象都可以用這個(gè)理論來(lái)解釋。如果你去找,一定能發(fā)現(xiàn)一些。最近我一直在搜羅這方面的案例….試一試,看看這個(gè)理論是否也體現(xiàn)在你的工作中。每當(dāng)發(fā)現(xiàn)自己在說(shuō)提高“生產(chǎn)效率/工作效率”時(shí),問(wèn)問(wèn)自己是否是在用正確的方式解決問(wèn)題。銘記在心:如果不通過(guò)生產(chǎn)任何東西就能解決問(wèn)題,那生產(chǎn)出的任何東西都是一種浪費(fèi)。
原文鏈接:http://www.oschina.net/news/42509/theres-no-such-thing-as-software-productivity
譯文鏈接:http://www.aqee.net/theres-no-such-thing-as-software-productivity/