热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

敏捷开发一千零一问系列之三十三:每天编码多少行?

这是敏捷开发一千零一问系列的第三十三篇。(在这里提问,之一,之二,之三,问题总目录)原问题来自http:blog.csdn.netcheny_comarticledetails659450

这是敏捷开发一千零一问系列的第三十三篇。(在这里提问,之一,之二,之三,问题总目录)

原问题来自http://blog.csdn.net/cheny_com/article/details/6594507#comments六楼,经读者同意,摘录如下:


“一般而言,大致每天高手能编写100多行有效代码(按分号计数),新手会多一些但也不超过200(他们编写代码比较费)。” 从整年平均来说,这个数据是不是有点大?记得在你的哪篇博客里有提到,你说过你工作的4-5年间,仅写了2万行代码而已——平均一天不到20行啊。我以前一直认为日均100行大概是一个主流行情,我所经历的项目大概是这个水平,那是因为我们项目是从零做起,而且界面较多,编码难度不大(但业务难度较大)。最近我们的项目要产品化,修修补补了一年多,突然发现,即使对我们的软件,也肯定不到日均100行啊。大部分时间在调试;改BUG;因需求调整,而做一些修改(修改人可能和开发者不是同一个人了),这时对原来代码有一个重新学习的过程(就是捋一遍)。------- 这其实是代码质量差的表现之一。所以我越来越想在项目中引入结对编程,以此提高质量,减少返工和重新学习代码所需要的时间。

(结对编程)你觉得可行吗?

答(原答案有扩充)
原问题实际上分为两个部分,但都与编码速度有关。分别回答。

关于编码速度


大致的编码速度


“高手每天100行”是编码阶段的速度,也就是如果今天这个人在编码,那么差不多能出来100行。平均到全生命周期,比如每年,大约是40~50行(这个也偏高,等等说)。我个人在之前说的那个团队的工作中只有一半时间在编程,还有很多时间做别的。一个是数字电视的安全协议构建+IC卡外协之类的工作,另外一个是穿插到别的子团队帮别人做设计(这个可以说是松结对的来源)。

补充:我在2002年左右精确计数了一个项目的开发过程,是一个小瀑布模型,编码期27天日均编码108行,整个周期日均编码46行。两年前开始的火星人项目,编码时的日均编码速度也是100行左右。不过后来有了L型代码结构,编码速度明显下降了,一周可能只编写100~200行代码,多数时间用在界面设计上。这不是说“设计时间长了,编码时间短了”,而是说L型代码结构主要是代码装配过程,效率极高,因此“不太需要长时间编码”。

为何精简的代码速度更高


国外业界有一个说法:无论采用何种语言,编码的速度基本相同。比如如果用汇编,一天100行,那么用C++,也差不多是100行。因此,越高级的语言,越能节省代码

另外一个则是:越精简的语言,越能节省代码,包括同一种语言。神奇的是,高手用精简的语言编写代码也能一天编写100行;而新手乍看能用1000行烂代码实现相同功能,而且时间也是一天。差别到底是什么呢?

首先,高手和而不同,新手同而不和。

如果10个高手看另外一个高手的100行代码,会说:“恩,差不多,让我做也差不多这个样子”。错误实现的路径很多,正确实现的路径相当有限。即使存在少量多个最佳实现,多数高手在采纳其中一个的同时,也曾经思考过别的方法。10个新手看另外一个新手的1000行代码,就不那么容易了。我们想象中的“冗长但容易理解的代码”,其实是对编写者而言的,旁观者其实很难看懂。我见过一个有44个return总长度550行的函数,最后总算变成110行,只有不到10个return了(多数都在函数开头);另外一个则是4000行代码65个函数,被改成2个函数,加在一起不到55行。这些情况下,无论高手或新手都会认同后者更容易阅读和理解,实际上连原编写者写完后也有同感。而冗长代码别说新手能不能看懂,高手也得看一阵子才明白。

其次,精简的代码中有正代码,冗长的代码中有负代码。

为了精简代码,难免会用到类、函数、泛型这类封装。这些封装不但现在会用到,未来也会重用,从而大大节省未来的编码量——或者说未来编码速度不会有提高,甚至有下降,但功能产生的速度反而提高了(这正是之前提到的“火星人”中L型代码结构的现状)。除了重用产生的编程速度之外,由于重用的质量高于新代码(有前提但可实现),所以还节省了测试时间

而冗长代码则有“负代码”。在围棋里边有个术语叫做“负目”,就是如果有一块孤棋,对方可能通过攻击而得利,那么在计算其所围面积的时候,要保守一些甚至减掉一些。冗长代码也是如此。无论是测试、尝试复用、修改需求、修改设计、修改其中的缺陷、转交给他人维护,冗长代码都会在未来产生额外的工作量。

再次,邀请新手向高手靠拢是一种正能量,而要求高手向新手妥协是一种负能量。

这也是本人为何极力推崇松结对编程和139团队的原因,一个团队的最佳状态显然是:编写高质量代码 + 高手帮助新手理解和编写高质量代码。我们当年那个25个人的团队在短短半年左右就差不多做到了这一点,而团队的多数人工作经验都小于4年(本人当时6年,是长的)。

所以不需要也不应该对中间状态有任何幻想和耐心。

关于编码的质量要求与编码速度的关系


感觉结对编程可行(不过推荐松结对),不过重构后的产品的函数、类一定要短、小,嵌套层数可以多一些。这样的好处是以后如果又要重构,多数情况下都不需要动每个函数,只要重构某些即可。
对质量而言,应该高到不会有明显在“改Bug”的时期,应该每个人回忆起来,除了干别的就是编码,很少能记起某段时间在调试Bug。这样编码速度和编码占整个时间的比例就会更高。反正你统计一下就可能发现:高手可以一天100行,平均到一年是50行;而新手可能一天1000行,平均到一年却不是100行,而是更少,因为有很多时间在改Bug。这种状态下,不如让他们跟着高手先精心写好一些代码,再继续前进,否则累死。


推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 微软小娜企业版发布新版本,提供构建自定义技能的套件
    微软将向企业级市场发布微软小娜企业版的新版本,该版本提供了构建自定义技能的套件,使企业员工可以更方便地使用数字助理。目前该套件仍处于内测期间,只有部分企业可以获得,其他有兴趣的企业需要继续等待。新版本的套件可以帮助员工构建各种自定义技能,如检查休假余额、创建服务凭证等。微软通过让多个开发人员编辑和管理机器人通道注册配置来改善开发者的体验,团队可以自行访问和更改技能注册,满足企业实际需求。微软小娜企业版已经在各个行业得到采用,能够帮助员工专注于优先事项,将非优先处理的任务交给微软小娜处理。 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
author-avatar
小丹巛丹布莱妮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有