关于程序员开发效率的悖论

简介:

程序员看起来应该都是一帮非常高产的人。

你总能看到他们在电脑桌前噼里啪啦的敲着键盘;他们焦急的等待会议结束,希望马上能回去编程。当被问起,他们总是说没有足够的时间编写出这些程序,需要立刻开始编码,这样才能及早完成。

看来,敲代码一定是最重要的事情了,不是吗?

如果一个普通水平的程序员每天能写出50行代码。一个5万行代码的程序将会需要1000人/天来开发。把5万行代码输入电脑里,一个程序员每天能录1000行,也就需要50人/天。

那么,剩下的950天这些程序员都在干什么?

在搞清楚这个问题前,让我们先看一些简单的资料。Capers Jones研 究了数万个软件项目,他通过比较其中的各种软件开发方法(RUP,极限编程,敏捷开发,瀑布开发等等)和各种编程语言,发现,一个程序员每月平均写出的代 码大概是325行到750行,比我们上面说到的每月1000行还要少。就算是程序员不是每天只写50行代码,但下面两点是清楚的。

开发方法的差异不能解释程序员代码生产量上的不平衡

使用的编程语言无关程序员代码生产量上的不平衡
screenshot

实际情况是,只有很小一部分的程序员的时间是花在写代码上的。如果一个程序员的所有时间都在敲代码,那他一定是在尝试不同的代码组合,直到找到好用的代码组合。

更准确的说法是,找到看起来是符合需求的“代码组合”——如果测试人员或业务分析师不来告知说这些代码是有问题的。

这 就是为什么在把手放到键盘上前喜欢先计划代码如何写的程序员会比其他程序员效率高的原因。事实上,不仅仅只有很少数的程序员在写代码前先计划,很多即使有 多年编程经验的老程序员也不知道这个道理。一项持续40年的研究表明,程序员的开发效率并不会随阅历的增加而增加。(参考No Experience Required!)

多年的编程阅历并不是必然导致高开发效率

十分有趣的是,各种强调编码前先计划的软件开发方法论都已经存在很长时间了。比如Personal Software Process (PSP),创始人Watts Humphrey根据统计数据说:

PSP能提高21.2%的生产效率和31.2%的质量水平
screenshot

像这样优秀的实践方法有很多。总之,就像作家动笔前先要构思好文章的结构和内容一样,程序员在按动键盘前如果不先琢磨一阵,很可能发生的情况是他的开发效率不会很高。

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
4月前
|
测试技术 数据库
自动化测试的救赎:揭秘代码复用的艺术,让测试脚本涅槃重生!
【8月更文挑战第21天】自动化测试对提升软件质量和开发效率至关重要,但其维护成本随项目规模增长而上升。采用代码复用策略能显著减轻这一负担。本文概述了自动化测试中实现代码复用的方法,包括抽象与封装、模块化、参数化、继承及利用测试框架等,以减少重复劳动、提高代码质量与开发速度,并简化维护流程。掌握这些策略将助力构建高效、可维护的自动化测试体系。
67 5
|
2月前
|
算法 开发者
代码与哲学的交织:探索软件开发中的哲理
【10月更文挑战第17天】 在数字化时代,软件开发不仅仅是技术的堆砌,更是智慧与哲学的碰撞。本文通过深入浅出的方式,探讨了编程中蕴含的哲学思想,如迭代思维、模块化设计以及错误处理的艺术。我们将一起思考如何将这些哲学理念融入日常开发,以提升我们的技术深度和广度,让代码不仅是冰冷的逻辑,而是充满智慧的艺术品。
29 5
|
3月前
|
设计模式 存储 算法
编程之舞:探索代码的节奏与和谐
【9月更文挑战第11天】在编程的世界里,每一行代码都像是音符,共同谱写一曲旋律。本文将通过深入浅出的方式,探讨如何把握编程的韵律,让代码不仅运行高效,而且结构美观。我们将一起走进代码的微观世界,学习如何通过清晰的逻辑和优雅的设计模式来提升我们的编码技巧。
|
5月前
|
算法 搜索推荐 开发者
代码的诗意:软件开发中的审美与实用主义
【7月更文挑战第17天】在数字世界的编织过程中,开发者往往沉浸于逻辑的严谨与功能的实现,却忽略了代码本身的艺术性。本文将探讨如何在追求软件实用性的同时,不丢失编程过程中的审美体验,通过案例分析展现优雅代码的力量,并讨论如何培养对技术之美的感知能力,最终达到技术与艺术的和谐统一。
|
7月前
|
开发者
代码与禅:在软件开发中寻找内在平静
【5月更文挑战第28天】 在快速迭代的科技世界中,软件开发者往往沉浸于无尽的代码海洋。本文探讨了如何将禅宗哲学融入编程实践,以提升开发效率和内在平和。通过禅修的三个核心原则——专注、简洁、当下意识,我们能够重新审视代码的本质,优化思维模式,并最终达到技术与精神的和谐统一。
|
7月前
|
持续交付 开发者
代码与禅意:软件开发中的禅宗哲学
【5月更文挑战第28天】在快节奏的现代社会中,软件开发者常常面临着压力和挑战。本文将探讨如何将禅宗哲学融入软件开发实践,以提升开发效率、增强个人福祉并优化团队协作。通过对禅宗原则的深入理解,我们可以学会如何在编码过程中保持专注、简洁和灵活,同时培养对技术深层次的直觉理解。
|
7月前
|
设计模式 算法 程序员
代码与诗意:软件开发中的创造性思维
【2月更文挑战第16天】在数字世界的构建中,技术并非只是冰冷的逻辑与算法堆砌,它同样蕴含着创造力与艺术性。本文通过探索软件开发过程中的非传统元素,揭示了编程背后的创造性思维和艺术表现。从设计模式到代码重构,再到用户界面的美学设计,每一环节都体现了技术人员对于美的追寻和技术的诗性表达。文章将深入探讨如何将创造性原则融入日常开发工作,以提升软件质量并丰富开发者的技术体验。
|
监控 移动中间件 安全
关于程序员的职业操守,从《匠艺整洁之道》谈起
《匠艺整洁之道》是鲍勃大叔的整洁系列新书。这本书主要从纪律、标准、操守三个方面阐述了软件从业者应该如何要求自己,提升研发质量、效率、道德水准,本文主要围绕《匠艺整洁之道》的第三部分 -- 操守,聊一聊我们程序员该如何自我约束、自我提升。
523 1
关于程序员的职业操守,从《匠艺整洁之道》谈起
|
安全 测试技术
深聊测开领域之:虫剂悖论
深聊测开领域之:虫剂悖论
140 0
|
运维 程序员 数据安全/隐私保护
程序员容易忽略的 10 大软件开发定律
  与其他领域一样,软件开发领域也有一些非常经典的定律。这些定律包括了一些法则或软件开发大神的名言。   也就是所谓的“按照组织架构来交付软件”:   “任何一个组织在设计一个系统时,这个系统的结构与这个组织的沟通结构是一致的”。   你或许认为可以通过一些方式来避免这个定律,比如跨功能团队的站会、进度更新和决策矩阵,但最终都不可避免地会发生冲突和分歧,而这些将导致冲突和分歧的过程和结果。   这个定律来自《人月神话》:
98 0