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






