阅读更多

6顶
2踩

研发管理
引用
你知道吗,我们从来没有发现一个开发人员多年的经验与他的代码质量或生产力之间有直接关系。


关于开发人员经验与生产力关系的研究

最初对于个人编程生产力的研究是在1968年进行的,在这之后的30年间,其他研究人员至少做过8次同样的研究,结果并没有什么不同。他们在研究了一些平均有7年开发经验的专业开发人员后统计出:

  • 开始编码时间比率约20 : 1
  • 调试时间比率约25 : 1
  • 程序执行速度比率约10 : 1
  • 程序大小比率为5:1
他们发现没有一个开发人员的多年经验和代码质量或生产力之间存在直接联系。这说明经验和生产力(即生成代码的能力)之间不存在相关性,也说明经验和软件质量(即最大限度地减少缺陷)之间没有相关性。



上图展示了两个开发人员群体——差的(生产效率、产品质量均低)和优秀的。研究发现,每个群体中都存在开发经验丰富和贫乏的开发人员。该研究只是说明多年的经验并不重要,并没有说明培训指导是否能帮助开发人员提升。

在不考虑合法性的前提下,这意味公司可以辞退掉拥有多年经验、工资高但产出低的开发者,并雇用一些没几年经验但高效高质的开发者。

尽管研究存在缺陷,但是仍显示出好的开发人员和差的开发人员之间存在数量级的差别,而这种差别与经验无关。关于“开发人员之间存在数量级的差异”已经被其他研究所证实。(见英文原文最后的参考文献)

技术越来越先进,而开发者不是


你可能会认为与过去相比,现在我们对软件开发了解得更多,毕竟现在:

  • 我们有更好的计算机语言
  • 我们有更先进的技术
  • 我们有对高效开发模式有更好的研究
  • 我们在大学中有正规的软件专业
上面这些都是事实,但现在开发人员之间仍然存在较大的差异。这意味着有一些X因素驱动着产品开发,X因素可能是开发人员规划并作出正确决定的能力。
引用
坏消息是,如果你不是一个高效、高质量的开发者,那么仅仅是多年的经验可能不会令你变得更好。

学会决策


开发人员每一天都面临着“如何构建自己的代码”的决策。比如如何:

  • 规划代码路径
  • 将函数封装成类
  • 将类封装成包/模块
开发人员面临的编码决策,其中有许多是复杂的,好的开发人员会安排他们的工作,并做出正确的决定。差的开发人员只是“跳过”,他们认为,他们总是可以重写代码或在做出决定后再弥补错误。差的开发人员甚至没有意识到他们的决策过程是糟糕的,他们完全可以通过规划工作来变得更好。

解决方案:可能是PSP和TSP

Watts Humphrey试图通过针对个人的PSP(Personal Software Process,个体软件过程)和针对团队的TSP(Team Software Process,团队软件过程)来让开发人员了解评估、规划开发和决策的价值。但只有很少的组织接受他。Capers Jones已经分析了超过18,000个项目,发现:

  • PSP可以提高生产力21.2%,提高质量31.2%
  • TSP可以提高工作效率20.9%,提高质量30.9%
这些研究,对创建开发团队有一定的帮助。比起拥有平庸开发人员的大型团队来说,拥有高效开发人员的小型团队更为合理,因为他们知道如何规划并作出正确的决定。
引用
PSP和TSP建议:改造一个差的开发人员的最好的方式是教他们如何作出更好的决策。

要知道,随着时间的推移,知识技能、编写高效高质代码的能力是会提升的。

结论

本质上,我们都知道这一点,但只是很难做到。如果公司中的高级管理人员知道这些研究,那么高效高质的开发者会得到更多的报酬,差的开发者可能就需要另谋高就了。这样做不仅降低了构建软件的成本,同时也提高了软件质量。

不幸的是,我们一直都在为各种编程方法、语言和技术辩论、斗争不已。大多数组织中的开发人员的编码方式,正在逐步使“巫毒科学(VoodooScience)”看起来像“科学”。(译者注:指一些不正统的编码方式逐渐成为主流)。

英文原文:NO Experience Necessary!!!
  • 大小: 7.4 KB
  • 大小: 23.2 KB
  • 大小: 61.7 KB
  • 大小: 13.3 KB
6
2
评论 共 18 条 请登录后发表评论
18 楼 dohkoos 2013-05-26 21:59
这个研究结果很好理解。在篮球界,足球界,在任何行业都是这样。

7年级的程序员里评分的话,肯定从1到10分的都有
6年级的评分也是如此
...
1年级的也是如此

引用
在不考虑合法性的前提下,这意味公司可以辞退掉拥有多年经验、工资高但产出低的开发者,并雇用一些没几年经验但高效高质的开发者。


好的公司都是如此做的,甚至他们在开始招聘时就已经把那些“多年经验但产出低的开发者”毙掉了
17 楼 laogao3232 2013-04-01 17:29
ping2010 写道
明显的对比:3年1个工作经验和1年3个工作经验。
3年1个工作经验的人往往只会复制,粘贴。
1年3个工作经验的人注重代码结构,质量。

你没见过1个3年工作经验,复制粘贴都不知道代码什么意思的人?
多了去了。
16 楼 kimmking 2013-03-23 16:40
建议删除。
15 楼 kimmking 2013-03-23 16:40
广告贴啊~
14 楼 syi6 2013-03-23 01:39
好的开发人员依据'天资'会安排他们的工作,并依据'天资'做出正确的决定...
13 楼 syi6 2013-03-23 01:32
误导公众,先去开源社区去调研调研...
12 楼 teasp 2013-03-22 17:29
这个是事实。善于挖坑的人十年经验依然善于挖坑,也许更善于了。
11 楼 ping2010 2013-03-22 17:27
明显的对比:3年1个工作经验和1年3个工作经验。
3年1个工作经验的人往往只会复制,粘贴。
1年3个工作经验的人注重代码结构,质量。
10 楼 sunway00 2013-03-22 16:39
如果3年经验和1年以下的经验比,80%的都会更优秀;
但是如果是10年、5年与3年的比,平均水平能有多少差距呢?
9 楼 zhukewen_java 2013-03-22 16:05
分析的厉害呀
8 楼 xyz20003 2013-03-22 13:41
zhangchang 写道
开发人员不需要掌握业务知识?业务知识掌握不需要时间和经验积累??


理想情况下,开发人员只要关心如何实现需求,不用关心具体业务,但是实际情况下,开发人员要兼任需求调研,测试和实施。

文中只探讨开发能力,是硬指标,不包含梳理业务,陪客户喝酒等软素质。

7 楼 MrLee23 2013-03-22 13:37
赞同。
有的和尚,当一天和尚撞一天钟,有的和尚专心研究佛法,有的和尚专心研究武功。
6 楼 wpf7788 2013-03-21 17:16
工作3年不一定有3年的工作经验,这取决于个人的态度,三年用一个经验工作和一个在一年内不断改进的员工,你觉得那个更好哪?
5 楼 zui4yi1 2013-03-21 15:47
这个嘛,只能说,好的公司环境,培养好的编码质量
4 楼 ansjsun 2013-03-21 15:17
有没有经验,就是看你是否能很自豪的说我不知道...我不会....
3 楼 laogao3232 2013-03-21 11:14
zhangchang 写道
开发人员不需要掌握业务知识?业务知识掌握不需要时间和经验积累??

业务知识与编码质量无关。业务知识顶多能提高编码效率。
你怎么理解编码质量的?无bug?我理解的是面向人,面向程序员的编码。
逻辑清晰,结构严谨的。而不是没有bug的不可读,不可维护的代码。
2 楼 kidneyball 2013-03-21 07:58
引用

坏消息是,如果你不是一个高效、高质量的开发者,那么仅仅是多年的经验可能不会令你变得更好。


这里的“仅仅……可能”是想说:新人中技术最好那一批的代码质量可能会比老人中技术最差那一批要好。这就是研究了30年得出来的结论……
1 楼 zhangchang 2013-03-20 15:48
开发人员不需要掌握业务知识?业务知识掌握不需要时间和经验积累??

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 平民开发者≠技术差,真正发挥平民开发者的创造力,光有低代码还不够

    随着低代码的概念日趋火热,与之相关的“平民开发者”(Citizen Developer,也称公民开发者)也受到了更多人的关注。然而,在大多数语境中,平民开发者会与技术基础差划上等号,甚至以此来推演低代码和无代码在企业...

  • 一家之言:真正发挥平民开发者的创造力,光有低代码还不够

    随着低代码概念日趋火热,与之相关的“平民开发者”(Citizen Developer,也称公民开发者)也受到了更多人的关注。然而,在大多数语境中,平民开发者会与技术基础差划上等号,甚至以此来推演低代码和无代码在企业中...

  • 华为云CloudIDE:下一代云原生应用开发工具重塑开发者生产力

    华为云开发工具和效率首席专家、华为开发工具技术专委会主任王亚伟在主题演讲中介绍了如何基于智能化代码补全技术(SmartAssist)和微服务集群调测技术(CloudDebugger)重塑编码和微服务调测生产力。 华为云开发...

  • 开发者代码审查指南

    开发者代码审查指南 简介 代码审查是除了代码作者之外,其他人检查代码的过程。 代码审查的微观目标是在每次 review 中尽可能获得最佳 CL。宏观目标有两个,一,是确保逐步改善代码库的整体健康状况,二,是提高开发...

  • 慕课软件质量保证与测试(习题集)

    习题汇总0 总目录1 绪论1.1 软件质量保证与测试的产生与发展1.2 软件缺陷,软件错误,软件故障1.3 软件质量保证与测试的意义,原则和挑战1.4 单元测试1.5 课后作业2 软件测试策略2.1 软件测试的模型,过程和生命周期2.2 ...

  • 什么是低代码(Low-Code)?

    本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。 前言 如果选择用一个关键词来代表即将过去的 2020 年,我相信所有人都会认同是“新冠”。疫情来得太快就像龙卷风,短短数月就阻断了全...

  • 修改变量名,简单有效地提高代码质量!

    全文共6633字,预计学习时长13分钟图片来源:pexels.com/@digitalbuggu请快速说出以下代码的功能:很难,对吧?要想对这段代码进行修改或调试,除非知...

  • 《云原生入门级开发者认证》学习笔记之云原生架构总览

    环境标准化,应用随处运行敏捷: 创建速度快,秒级资源弹性提高生产力: 消除跨服务依赖性和冲突 主流的容器技术,如Docker,它是通过内核虚拟化技术(namespace以及cgroups等)来提供容器的资源隔离与安全保障。...

  • 【微服务 Spring Cloud 2】为什么90%的开发者放弃传统的技术架构,而选择微服务?

    四、应用级容灾 应用级容灾即应用级容灾备份,是指在本地或异地建立一套完整的与本地生产系统相当的备份应用系统。在本地数据出现灾难时,备份中心可以接管本地生产系统的业务,并在本地生产系统正常使用后,恢复...

  • 什么是低代码平台 low-code?

    本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。 一 前言 如果选择用一个关键词来代表即将过去的2020年,我相信所有人都会认同是“新冠”。疫情来得太快就像龙卷风,短短数月就阻断了...

  • 编写整洁的并发程序非常难,简单的代码也会变成噩梦?

    “对象是过程的抽象。线程是调度的抽象。” ——James O Coplien[1] 编写整洁的并发程序很难——非常难。编写在单线程中执行的代码简单得多。...最后,我们将讨论与测试并发代码有关的问题。 整洁的...

  • 开发者 发展 6 执行力

    团队管理中最可怕的事:缺乏执行力 说了不去做,做不到位 比如说我们周围路总修不好,对此大概没人认为是个技术问题——偷工减料怎么也不是技术问题。总结之后可能发现,“啊,这和层层转包有关系。应该禁止。”接...

  • 软件测试应对HR时如何反客为主?了解这些就够了!!!

    根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据; 如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷; ...

  • 从入门到精通:分享45个你可能需要了解的Web开发者必备的小技巧

    作为一名Web开发者,日复一日的编码工作无时不刻在驱使着我们的双眼。每天都要处理大量复杂的任务,并且,随着项目的不断推进,我们需要更加灵活,更快捷的解决方案,提升自己的能力水平。而实现这些目标的方式之一...

  • 代码行为异常容错机制与自我调节

    1.5、代码的容错机制与自我调节 2、设计观与方法论 2.1 设计观与代码容错机制、自我调节 2.2 问题是否能够被解决 2.2.1 意识行为是否具有虚拟性 2.2.2 思维是否具有方向性 2.3 问题与问题解决 2.4 软件与问题...

  • 基于matlab实现的指纹识别.rar

    基于matlab实现的指纹识别.rar

  • node-v6.11.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • node-v8.3.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 项目型制造企业生产计划规划设计方案.pptx

    项目型制造企业生产计划规划设计方案.pptx

  • Swing界面开发和游戏开发.docx

    Swing界面开发和游戏开发.docx

Global site tag (gtag.js) - Google Analytics