老板雇佣程序员来写代码,程序员的薪水是成本,产生的有效代码是产品。或者说老板从程序员那里买代码。程序员每写一行代码究竟能赚多少钱?不妨来推导一下。
我们规定程序员书写、重构、改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万元的金钱成本,又省时又省钱,何乐而不为?为什么不拿使用开源项目节省下来的开支给员工多加一些人性化的福利待遇?良好的企业文化不就这么出来了。我想大多数商业游戏引擎都出自国外的原因也就是因为他们不求短期山寨出能骗钱的游戏而是想安下心给程序员一定自由做出非常酷的程序出来,长远来讲,这些公司引领了行业标准,卖引擎就赚翻了。你还会一味盲目压进度吗。
“看你摆了这么一套,我很有收获或启发。我很认真!”认真你就输了!仅靠这种简单粗暴的公式就能量化出价值的程序员都不是将才!任何工程,说白了管理的不是项目而是人。而一个程序员最独特有力的价值可能不在实现某个功能写一篇代码上面,在于很多很杂,比如:能给团队带来什么样的提升,能在众人就某一问题困苦时灵感一现提出创造性的建议,人品极佳能协调好程序团队内外事务……
“身为程序员,我该怎样提高自我价值?”让自己写的代码不容易出错,让自己能从只会写简单代码的初级程序员上升为火候更到位的高级程序员……今天累了,改天再谈。
分享到:
相关推荐
此外,Linux的开放源代码也促进了创新,许多商业软件和服务都基于Linux开发,如云计算平台、大数据处理和物联网设备等。 在系统开发方面,Linux为程序员提供了一个理想的平台,学习和理解操作系统原理变得更为容易...
C++源代码项目,大约有好几万,基础到进阶
而账户余额提醒功能则是通过定期或实时查询账户余额,并在余额低于预设值时向客户发送通知。 源码开发方面,我们可以推断这个系统可能是用某种编程语言(如Java、C#或Python)编写的,使用了面向对象的设计原则来...
例如,使用`EXECUTE IMMEDIATE`时,应将动态SQL中的条件值替换为绑定变量。此外,批量绑定可以在一次执行中处理多条记录,减少循环带来的开销,提升效率。 6. **游标使用**:在定义游标时,应明确指定所需字段,而...
标题中的“程序,程序员培训班要多少钱,matlab源码 (1).rar”表明这是一个与编程教育和MATLAB编程相关的资源包。MATLAB是一种强大的数学计算软件,广泛应用于工程、科学和经济领域,常用于数值分析、算法开发、数据...
标题提到的“程序员培训班要多少钱”,表明了对提升编程技能的需求,MATLAB作为一门专业课程,其培训费用因地区、机构和课程内容的不同而有所差异,通常可能在几百到几千元不等。 BP(Back Propagation)神经网络是...
在本篇《Java代码实践12306售票算法(二)》中,我们将深入探讨如何用Java实现12306的售票逻辑。12306是中国铁路客户服务中心的在线订票系统,其售票算法是处理大量并发请求的关键。下面我们将详细解析文中提到的几个...
【标题】:“程序,程序员培训班要多少钱,C,C++” 【描述】:“STM32单片机读取DHT11温湿度传感器值,控制水泵浇水” 在这个项目中,我们涉及了几个关键的IT知识点,主要集中在嵌入式系统、硬件接口编程以及物联网...
"灰狼多少钱一包"这部分描述看起来像是一个拼接错误或者无关的输入,因为它与算法和编程没有直接关系,可能是输入时的误操作。在IT领域,我们主要关注的是算法、编程语言和相关技术,而不是商品价格。 综上所述,这...
全书全部重新执笔,代码全部重写,涵盖了基本C++编程方法的全部技术特征。 本书以C++标准为蓝本,从过程化编程的基本描述,到对象化编程的方法展开,乃至高级编程的实质揭示,形成一条自然流畅的主线,通俗易懂,...
此特效代码充分利用了jQuery的强大功能,为用户提供了一个直观的滑块组件,让用户可以选择一个价格区间,例如从多少钱到多少钱。这种控件通常包含两个滑块,分别代表价格区间的起点和终点,用户可以通过拖动滑块来...
1. **数据预处理**:首先,数据需要进行预处理,包括缺失值处理、异常值检测和标准化。这一步确保所有特征在同一尺度上,以避免某些特征对结果的过强影响。 2. **建立投影模型**:投影寻踪算法的核心在于构建一个低...
通过这样的代码,用户可以方便地了解每个星期需要存入多少资金,以及在年末时总的储蓄总额。 其次,分形树是一种展示自然界中复杂结构的数学模型,常用于艺术创作和科学可视化。Python中的matplotlib库或turtle模块...
6. **设计模式**:虽然系统没有GUI,但设计模式如单例模式(用于创建全局唯一的银行对象)、工厂模式(用于创建不同类型的账户)和策略模式(用于定义不同的交易策略)仍可以应用,以提高代码的可维护性和扩展性。...
代码使用了循环来实现斐波拉契数列的计算,通过变量a1和a2记录当前数列中的两个连续数值,每次迭代时计算新的值,并更新这两个变量的值。 ### 5. 各位数之和 这个程序用于计算输入数字的各个位上的数字之和。 ```...
孩子们将学习如何创建角色,调整背景,并通过拖拽积木式的代码块来实现简单的动作和交互,如移动、旋转和改变颜色。这一阶段旨在激发孩子们对编程的兴趣,培养他们的逻辑思维。 2. **控制结构**:第二阶段深入到...
其核心思想是:对于任意一个金额`m`,我们想要知道最少用多少枚硬币凑出这个金额。假设我们有`n`种不同面值的硬币,分别为`a[0], a[1], ..., a[n-1]`。那么,对于金额`m`,如果`m >= a[i]`,则最少硬币数为`f(m - a...
- **无向图连通度(割)**:计算无向图的连通度,即移除多少个顶点才能使得图不连通。可以使用多次 DFS 或 BFS 来完成。 - **最大团问题 DP + DFS**:通过动态规划结合深度优先搜索来解决寻找图中最大的完全子图(团)...