你的代碼值多少錢 ?你算過嗎
老板雇傭程序員來寫代碼,程序員的薪水是成本,產生的有效代碼是產品。或者說老板從程序員那里買代碼。程序員每寫一行代碼究竟能賺多少錢?不妨來推導一下。
我們規定程序員書寫、重構、改bug產生的變化行數都算做生產行(Line),把所有生產行分為三個等級:框架(structure)、功能(feature)、邏輯(logic);將程序員在單位時間內寫的三類生產行分別設為Ls、Lf、Ll;每種生產行的權值分別為Ws、Wf、Wl。生產行失效率為P(0到1之間),失效的生產行指在老代碼運行過若干次后被重構成了新的代碼(在開發階段快速迭代重構只計算最終的生產行不算失效)或者被驗證有bug后改正的代碼。則該程序員在單位時間內寫的代碼的價值為Vt = (Ls×Ws+Lf×Wf+Ll×Wl);有效代碼價值Ve = Vt×(1-P)。設該程序員單位時間內的薪水為S,進一步可以得到該程序員的性價比C = Ve / S。
公式只有這些,接下來隨便假設一些數值代入公式做下計算。設有兩個程序員:a(高級)、b(初級),假定a月薪5000,日代碼價值50,(按22工作日計算,下同)月代碼價值Vt(a) = 50×22 = 1100,則a的性價比為C(a) = Vt(a)×(1-P(a)) / S(a) = 1100×(1-P(a)) / 5000。同理可得b的性價比C(b) = Vt(b)×(1-P(b)) / S(b)。考慮理想情況,a、b的代碼失效率都為0即P(a) = P(b) = 0,若要a、b程序員的性價比相同則有C(a) = 1100 / 5000 = Vt(b) / S(b) = C(b);如果b的日有效代碼價值25,月有效代碼價值25×22 = 550,月薪2500,則剛好C(a) = C(b),公司的薪資結構是平衡的。下面說一些你們可能有的問題和一些引申想法。
“我看到一些公司拿錢多職位高的寫的代碼量很少,貢獻代碼最多的是一些新人,性價比怎么會平衡?”代碼行數不直接代表代碼價值,這也是三種代碼權值W存在的意義,寫框架性的代碼靠深厚的功底。框架、功能、邏輯的權值是依次遞減的即Ws > Wf > Wl。項目初期高級程序員基本全部精力都在寫底層框架而幾乎不寫上層應用,往往是每天想4個小時寫2個小時再花2個小時重構,項目中后期在框架實在無事可做時高級程序員又往往在寫功能、邏輯時貢獻的代碼量又是最多的。每天框架代碼的生產量可能是很低的但是含金量很高,是整個項目存活與維持的基礎。
“高級與初級程序員的性價比真的很理想化的相等嗎?”不。理想化的性價比比在實驗室里創建高溫超導體還困難重重。原因在于很多不確定和隨機因素。任何程序員都不可能一輩子一直寫出滴水不漏不需要返工的高質量代碼。上面的計算已經是把代碼失效率當成理想的0來算的了,如果高級程序員更了解代碼中的陷阱與欺騙從而能更好的避開,那就能寫出失效率更低的代碼,也就是說出錯率高的新人要寫更多的代碼才能像高級程序員一樣劃算。
“行業薪資標準該怎么算?”在求職、入職與人事部門談論薪資待遇時他們都會說:按掌握的行業統計數據給你的薪資為XXXX。這句話表面意思我非常理解,即行業薪資標準的建立需要大量統計數據。但我不知道各個公司是怎么統計與處理數據的。我想這么算一下:需要統計兩樣數據,程序員有效代碼價值Ve,薪資數目S,這兩樣數據計算得到的就是上面推導過的性價比C = Ve / S。當有大量數據時我們可以得到性價比的一個行業平均值Cavg(如需做其它分析還要得到***值、最小值、方差等)。在對一個程序員筆試面試過后可對其生產有效代碼價值的能力做個初步評估,在此基礎上可以給出該程序員的薪水,如果老板開給公司里大多數程序員的薪水過低,性價比高于Cavg則可能發生頻繁跳槽與被挖角現象;如果開的薪水很高性價比過低,那也許能籠絡到大量人才,但是那老板真有錢,還很闊綽。想穩穩當當就構建和Cavg持平的性價比即可。
“那身為老板,我為什么不全都雇傭性價比***的高級程序員?”不可能也沒好處。從業人員不可能每個人都有很到位的技術火候。如果老板雇到的全是最***的程序大師卻又安排不好這些人員那溝通與管理成本就會上升很多。一個高級程序員帶隊幾個溝通順暢的人(不管高級還是初級)那么做起事來會很有效率,如果是幾個固執的高級程序員聚在一起吵來吵去那么生產效率還不如兩個平庸的程序員加一個好的指導思想。此文只說和上面的公式相關的問題,公司內部的管理平衡本文不談。
“怎樣節省成本?”我一向吹噓的兩個程序開發原則是復雜度隔離和代碼復用。降低了復雜度,代碼閱讀修改會變容易,擴展維護成本會變低;書寫并使用能充分復用的代碼也會減少repeat yourself的機會。發展與使用開源軟件也是個好的方法。如果一個管理者成天摧程序團隊把某某某功能做出來,那真的該反思一下這種只要盡快看到短期結果不求深謀遠慮的施壓造成的是什么情況:程序員趕工,效果是快速出來了,但代碼經過推敲的時間少了,復雜性可能高了,潛藏的bug可能多了,以后復用的機會非常渺茫了……長遠來講,不如平心靜氣鼓勵程序員寫出高質量的可復用代碼,使用、參與、投入幾個開源項目,甚至鼓勵程序員用一定自由時間做自己想寫的程序(Google有此一招,每周一天,其若干商業項目起源于員工個人項目),這樣公司的成本更低。假設一套代碼(自己員工寫的可復用代碼或現成開源項目)有10萬有效代碼價值,還是按一個高級程序員1100月代碼價值來算,在不出錯的理想情況下這套代碼可能為老板節省100000 / 1100 = 90.91人月的成本,5個高級程序員也要干18.19個月才能做出來,而老板能節省99.91×5000 = 45.45萬元的金錢成本,又省時又省錢,何樂而不為?為什么不拿使用開源項目節省下來的開支給員工多加一些人性化的福利待遇?良好的企業文化不就這么出來了。我想大多數商業游戲引擎都出自國外的原因也就是因為他們不求短期山寨出能騙錢的游戲而是想安下心給程序員一定自由做出非常酷的程序出來,長遠來講,這些公司***了行業標準,賣引擎就賺翻了。你還會一味盲目壓進度嗎。
“看你擺了這么一套,我很有收獲或啟發。我很認真!”認真你就輸了!僅靠這種簡單粗暴的公式就能量化出價值的程序員都不是將才!任何工程,說白了管理的不是項目而是人。而一個程序員最獨特有力的價值可能不在實現某個功能寫一篇代碼上面,在于很多很雜,比如:能給團隊帶來什么樣的提升,能在眾人就某一問題困苦時靈感一現提出創造性的建議,人品***能協調好程序團隊內外事務……
“身為程序員,我該怎樣提高自我價值?”讓自己寫的代碼不容易出錯,讓自己能從只會寫簡單代碼的初級程序員上升為火候更到位的高級程序員……今天累了,改天再談。


2015-02-05 09:24:48
2020-12-17 18:59:55
2012-04-01 10:47:47




