你的每行代码值多少钱?

我知道,“line of code”(LoC)是一种非常愚蠢的计量方式。不要急着喷我,请大家先听我讲讲我最近参与的两个项目,看一下一些非常有意思的数字。

项目#1:传统的同地协作

第一个项目是由一组程序员通过传统的同地协作来执行的。人数为20(不包括项目经理、分析人员、产品负责人、SCRUM大师等等)。该项目是一个大流量的网络拍卖网站(每天有超过200万的页面访问量)。

代码库的大小约为20万行,其中15万是PHP,3万5是JavaScript,其余则是CSS、XML以及Ruby等。这20万行只包括使用cloc.pl的非空和非注释行代码.

这是一个商业项目,所以具体名字我不便透露。

大家在欧洲的同一个办公室里,每个人都“朝九晚五”地工作。我们可以一起开会、吃饭、面对面聊天以及通过其他多种非正式方式沟通。所有的任务都使用了JIRA跟踪。

项目#2:分布式

第二个项目是一个开源的Java产品,通过一个约15人的分布式团队开发。我们没有任何的交流也不做任何非正式的沟通。我们都是在Github上讨论问题。代码库明显要小很多只有大约3万行,其中约90%Java,其余则是XML。

成熟的开发

这两个项目都是托管在Github上的代码库。

两个团队都使用了自动化构建、持续集成、静态分析和代码审查。这表明这两支项目团队都已经比较成熟。

这两个项目都满足了用户的需求。我提这一点是想强调,这两个项目的代码,都是有价值的。没有废物,也几乎没有重复的代码。

看看项目回报

在这两个项目中,我的角色是首席架构师。除此之外,我还有权限访问两者的Git代码库。所以我可以知道在某段时间内,比如说三个月时间里,代码库中新添加(或者改动)了多少行代码。

现在,让我们来看看这些数字。

第一个项目一个优秀的开发人员每年可以拿到大约50,000欧元,也就是约5600美元每月或35美元每小时。第二个项目则只需要对于已完成的任务支付20-35美元每小时。

第一个项目,在三个月内,写了59000行新的代码,并在改变主分支时删除了29000行,那么总计就是88000行代码。此过程历时约10000个工时(20程序员,三个月,每月170个小时)——相当于约35000美元。因此,每行代码的价格为

3.98美元

第二个项目,在同样三个月时间里,新代码产生了45000行,删除了9000行,也就是54000行。为了完成这项工作,根据XDSD原则,我们只花了7000美元(约用了350个工时完成了650个任务)。因此,该项目一行代码的成本仅仅是:

13美分

$35000 VS$7000,3.98美元VS0.13美元,你有何感想呢?

结论

我将这些数据公诸于众是为了告诉大家,分布式编程比传统的同地协作团队更为高效,也更节约资金。你看,0.13美元与3.98美元,相差30倍呢!

怎么做?

当然,你说你为了达到分布式合作的目的,决定让你的程序员在家工作而不必来办公室的话,那我就该笑你只会硬搬硬套了。可以实行XDSD这个严格的质量原则,整个团队都应该遵守的原则。

如果这些原则都能应用到位的话——那么你所需要付出的资金将会减少30倍。

顺便透露给大家以下这些项目的成本:

$12-103:crazyontap.com

$15-40:betterembsw.blogspot.nl

超过$5:joelonsoftware.com

如果大家有不同意见,欢迎指教。

作者:程序人生

来源:51CTO

时间: 2024-09-18 07:29:12

你的每行代码值多少钱?的相关文章

Jqgrid设置全选及获取选择行的值示例代码

 本篇文章主要介绍了Jqgrid设置全选(选择)及获取选择行的值示例代码.需要的朋友可以过来参考下,希望对大家有所帮助 1.添加multiselect: true   2.获取选择行的值   代码如下: var rowData = jQuery('#List').jqGrid('getGridParam','selarrrow');     if(rowData.length)      {         for(var i=0;i<rowData.length;i++)         {

Jqgrid设置全选(选择)及获取选择行的值示例代码_jquery

1.添加multiselect: true 2.获取选择行的值 复制代码 代码如下: var rowData = jQuery('#List').jqGrid('getGridParam','selarrrow');    if(rowData.length)     {        for(var i=0;i<rowData.length;i++)        {           var name= jQuery('#List').jqGrid('getCell',rowData[i]

可以少写1000行代码的正则表达式_正则表达式

熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码: var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/; var r = fieldValue.match(reg); if(r==null)alert('Date format error!'); 下面是在前端开发中经常使用到的20个正则表达式: 1 . 校验密码强度密码的强度必须

几行代码搞定一棵漂亮的树

程序名:JTree(树状控件)结合了XML的长处,使您只需几行代码就可以拥有像Windows的资源管理器一样的Treeview了. 之前,本人曾写过一个Treeview,但是,不够美观,这一版本,在外观上做了很大的改进,很漂亮.运行速度很快. 详细功能请见示例示例打包下载 JTree在onclick时,有两个值可以用: var myTree=new JTree("showTree","vogueType.xml");myTree.setPicPath("i

Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

目前,我相信,没有任何 Android 开发者不知道材料设计的,因为它的设计在过去的一年震惊了世界,正式的变成了一个设计理念. 令人惊讶的是,在 Android 应用中材料设计是不容易实现的,因为材料设计的 UI 组件 如: Floating Action Button (FAB) 在低于 Android L 系统上是不可用的.我们只能选择使用由独立开发者公布出来的第三方库. 来了一个好消息,上周(2015.5.29)在谷歌2015 I/O 大会时,谷歌宣布了一个今年最让人兴奋的支持库,名叫 A

12行代码的浏览器DoS攻击分析及防御

有一段12行的JavaScript代码,可以让firefox.chrome.safari浏览器崩溃,而且还能让iphone重启.安卓闪退,本文作者对于该12行代码进行了分析解读并且提出了相应的防御办法,欢迎大家一同探讨. ajax与pjax AJAX(阿贾克斯),这里说的可不是阿贾克斯俱乐部哦! AJAX(阿贾克斯)即"Asynchronous Javascript And XML"(异步JavaScript和XML),是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交

不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)

生成对抗网络(Generative Adversarial Networks,GAN)最早由 Ian Goodfellow 在 2014 年提出,是目前深度学习领域最具潜力的研究成果之一.它的核心思想是:同时训练两个相互协作.同时又相互竞争的深度神经网络(一个称为生成器 Generator,另一个称为判别器 Discriminator)来处理无监督学习的相关问题.在训练过程中,两个网络最终都要学习如何处理任务. 通常,我们会用下面这个例子来说明 GAN 的原理:将警察视为判别器,制造假币的犯罪分

手把手,74行代码实现手写数字识别

1. 引言:不要站在岸上学游泳 "机器学习"是一个很实践的过程.就像刚开始学游泳,你在只在岸上比划一堆规定动作还不如先跳到水里熟悉水性学习来得快.以我们学习"机器学习"的经验来看,很多高大上的概念刚开始不懂也没关系,先写个东西来跑跑,有个感觉了之后再学习那些概念和理论就快多了.如果别人已经做好了轮子,直接拿过来用则更快.因此,本文直接用Michael Nielsen先生的代码(github地址: https://github.com/mnielsen/neural-

只需 130 行代码,用 GAN 生成二维样本的小例子

50行GAN代码的问题 Dev Nag 写的 50 行代码的 GAN,大概是网上流传最广的,关于GAN最简单的小例子.这是一份用一维均匀样本作为特征空间(latent space)样本,经过生成网络变换后,生成高斯分布样本的代码.结构非常清晰,却有一个奇怪的问题,就是判别器(Discriminator)的输入不是2维样本,而是把整个mini-batch整体作为一个维度是batch size(代码中batch size等于cardinality)那么大的样本.也就是说判别网络要判别的不是一个一维的