`

(收藏自己看)程序员的工作不能用“生产效率”这个词来衡量

 
阅读更多

几乎正如10年前 Martin Fowler 发现的,用生产效率来衡量软件开发工作没有任何意义。原因就在于,它们不属于同一范畴。换句话说,生产效率不具有作为衡量软件开发工作的适用性。“今天创造了多少代码/软件?”这是一个没有意义的问题。即使可以这样测量,软件开发工作上的生产效率也不能以任何有意义的方式估计出它的商业价值。 

这是因为,软件开发这种工作并不一定非要生产出什么东西。让我来举个例子:比如说,碰巧有两个程序员分别开发两个完全一样的项目,他们在同一天被分配了相同的任务。第一个人,弗兰克,回到电脑前,写出了一个有1000行代码的框架,完美的解决了问题。代码规范书写,全面测试,有详细的文档描述部署和操作的流程。第二个程序员,皮特,转身去了公园,在哪里,他一边喂鸽子一边思考问题。大概在下午4:45分,皮特溜达回办公室,删掉了200行代码,并部署了他的修改。问题就这样解决了。 

这两个程序员,今天的“生产效率”谁的更高?答案是:这无关紧要。紧要的是,皮特解决了问题,同时为团队消减了长期维护的成本。弗兰克同时也解决了问题,但他因为生产了代码,提高了维护成本,所以,(在其它方面完全等效的情况下)他的方案差一些。而把皮特称作更有“生产效率”,则完全从实效性上扭曲了这个比喻。 

我认为,优秀的程序员,他所做的事情应该是去除问题。而相对的则是生产出什么。所以,技术上的生产产物,例如代码、文档、数据等,对于实现“去除问题”的目标来说,都是必要但有害的。这就是为什么有时候,这最有效的解决方案是5分钟的交流沟通。 

对这种思考模式最有力的支持:当你用这种思维去看待软件开发后,很多棘手的、能看得到但无法测量的问题突然间变得很容易理解。例如,为什么当程序员和他们的客户隔离开时会显得缺乏效率。难道让他们避免打搅不会提高工作效率吗?答案是不会,按常理这会使他们更有效率。但也会造成他们更没效率。因为他们的工作是为客户解决问题,与客户的隔绝导致他们无法找到问题,确定问题。相反,跟有问题的人保持沟通能更有效的解决问题,甚至有时候你一天8小时手指根本不需要碰键盘。 

这将我们引向了另外一个问题:为什么软件开发中维护成本相比起其它方面的成本显得很难接受?为什么我们永远无法在第一次做出“正确”的东西?一种解释就是,软件是一个对可能变化的问题的固定解决方案。当问题发生变化时(或我们对它的理解发生变化时),问题和解决方案之间就出现了裂痕。这种随着问题的演变而不停的修补产生的缝隙的活动代价高昂。这也解释了为什么相对于其它软件项目,视频游戏通常的维护成本较低。这是因为它们需要解决的问题(让人们去买这个游戏,玩这个游戏)基本上是根据人类心理学,而这是不常变化的。 

好的程序员和坏的程序员之间10倍之差的“生产效率”又是从何说起?每个人都说这是事实,但事实上没有人能直接的测评。我们的理论同样能解释这个问题。相比起工作效率来说,“解决问题”是一种更容易“调控”的东西,使得产生一个数量级差别的效果很容易实现。解决问题需要的是信息和洞察力。你要么有,要么没有。不需要原材料,没有生产能力限制。并不是差的程序员打字速度慢。并不是如果他们努力就能做得更好。他们是缺乏这种高效解决问题的眼界和必要的信息。也许无法测量好程序员和差程序员在生产效率上的差别的原因就在于没有东西可测量。 

还有很多现象都可以用这个理论来解释。如果你去找,一定能发现一些。最近我一直在搜罗这方面的案例。试一试,看看这个理论是否也体现在你的工作中。每当发现自己在说提高“生产效率/工作效率”时,问问自己是否是在用正确的方式解决问题。铭记在心:如果不通过生产任何东西就能解决问题,那生产出的任何东西都是一种浪费。 

分享到:
评论

相关推荐

    程序员-工作日志示例

    通过这个示例,我们可以看到,工作日志可以帮助程序员更好地管理自己的工作,提高工作效率,记录工作进度,总结工作经验等。 结论 工作日志是程序员日常工作中不可或缺的一部分,它可以帮助程序员更好地管理自己的...

    这个是程序员非常好用的词典

    综上所述,Lingoes是一个强大的程序员专用词典,它提供了丰富的IT专业词汇和便捷的学习功能,是提升程序员语言技能和工作效率的好帮手。通过下载PCHome上的相关资源,用户不仅可以获取到软件,还可以了解到更多关于...

    程序员工作经验之谈总结工作经验

    因此,对于程序员来说,主动学习新的编程语言、框架、设计模式以及深入研究领域知识是至关重要的,这样才能不断提升自己的竞争力。 借鉴他人的代码是提高编程技能的有效途径,但必须以学习和理解为主,避免盲目复制...

    程序员如何使用ChatGPT提高工作效率

    程序员如何使用ChatGPT提高工作效率

    程序员编程最需要的计算机词典

    《程序员编程最需要的...总的来说,《程序员编程最需要的计算机词典》是程序员提升自身技能、扩展知识视野的重要参考资料,无论你是初学者还是资深开发者,都能从中受益匪浅,不断提高自己的编程水平和问题解决能力。

    程序员工作法.zip

    《程序员工作法》是针对软件开发人员的一种高效工作方法论,它强调了在编程实践中的组织、规划和执行策略,以提升工作效率和代码质量。在Python编程领域,这些方法尤为重要,因为Python以其简洁、易读的语法和强大的...

    工作总结 工作总结 程序员 工作总结 程序员

    这要求程序员具备跨浏览器开发的经验,熟悉各浏览器的特性,可能需要用到像jQuery这样的库来处理兼容性问题。 7. 框架集成:与PortalOne的联调过程中,遇到兼容性问题,这通常需要对双方框架有深入理解,能快速定位...

    程序员如何提高工作效率.docx

    提高程序员工作效率是一个涉及多方面策略和技能的主题。以下是一些关键点,可以帮助程序员提升生产力: 1. **设定清晰的工作目标**: - 工作列表是保持效率的关键,它可以帮助你明确每天要完成的任务。 - 记录并...

    程序员如何提高效率(转)

    定期审视自己的工作,思考是否有更重要的事情等待完成,即使这可能会引发深层次的自我质疑,但每一次的反思都是向更高效率迈进的一步。 #### 多任务并行 传统的专注单一任务理论并不总是适用。实际上,多任务处理...

    程序员工作日报

    根据给定的文件信息,我们可以提炼出以下几个关键的IT知识点: ### WCF(Windows Communication Foundation) ...这些知识点对于IT行业的从业者来说,是不可或缺的基础知识,掌握它们有助于提升编程技能和工作效率。

    2021年前端程序员的年终工作总结.docx

    10. 综合能力:前端程序员通过一年来的学习和锻炼,提高了自己的综合能力,如设计、调试、开发、测试等能力,也提高了自己的独立完成工作的能力。 2021年前端程序员的年终工作总结展示了前端程序员的一年来的经验和...

    程序员汇报工作必备PPT模板

    根据提供的信息,我们可以总结出以下关于“程序员汇报工作必备PPT模板”的相关知识点: ### PPT模板概述 1. **模板类型**:“程序员汇报工作必备PPT模板”是一款专为程序员设计的工作汇报模板,适用于各类会议、...

    程序员助手解密版

    首先,我们可以推测“一看就会.docx”可能是一份用户指南或者教程文档,旨在帮助用户快速掌握如何使用这个程序员助手。它很可能包含了软件的操作步骤、功能解释和示例,以便用户能够轻松上手。 “BlockEdit.exe”、...

    程序员个人工作自我评价总结.doc

    从给出的部分内容来看,这位程序员在自我评价中涵盖了以下几个关键知识点: 1. **快速适应与学习能力**:程序员在短时间内适应了新公司的节奏,从不熟悉的工作环境到独立负责项目,体现了良好的学习能力和适应力。 ...

    影响程序员编程效率的10个障碍!

    ### 影响程序员编程效率的10个障碍详解 #### 1. 打断开发人员编码思绪的会议 会议是日常工作中不可或缺的一部分,但频繁且不必要的会议却常常打断程序员的编码思路,严重影响工作效率。程序员在进入编码状态时,...

    程序员英语词汇1700词修改版

    程序员英语词汇1700 词修改版

    10x程序员工作法笔记.xmind

    10x程序员工作法笔记

    程序员必看1500单词

    标签 "单词 程序员 必学" 强调了这个词汇表是针对程序员群体的学习资料,且学习这些单词对于程序员来说是必不可少的。它涵盖了“单词”,强调了学习英语词汇的重要性;“程序员”,明确了目标受众;“必学”,提示...

    程序员的工作经验分享大合集+个人经验+创业血泪史+工作几年的一些感悟+程序员如何高效学习

    个人独家收藏,小编愿意在这里和大家分享程序员的工作经验。 一位程序员工作10年总结的13个忠告+一名程序员的十年工作经历+程序员(工作十几年)的创业血泪史,万字长文,与君共勉!+程序员工作几年的一些感悟+...

Global site tag (gtag.js) - Google Analytics