几乎正如10年前 Martin Fowler 发现的,用生产效率来衡量软件开发工作没有任何意义。原因就在于,它们不属于同一范畴。换句话说,生产效率不具有作为衡量软件开发工作的适用性。“今天创造了多少代码/软件?”这是一个没有意义的问题。即使可以这样测量,软件开发工作上的生产效率也不能以任何有意义的方式估计出它的商业价值。
这是因为,软件开发这种工作并不一定非要生产出什么东西。让我来举个例子:比如说,碰巧有两个程序员分别开发两个完全一样的项目,他们在同一天被分配了相同的任务。第一个人,弗兰克,回到电脑前,写出了一个有1000行代码的框架,完美的解决了问题。代码规范书写,全面测试,有详细的文档描述部署和操作的流程。第二个程序员,皮特,转身去了公园,在哪里,他一边喂鸽子一边思考问题。大概在下午4:45分,皮特溜达回办公室,删掉了200行代码,并部署了他的修改。问题就这样解决了。
这两个程序员,今天的“生产效率”谁的更高?答案是:这无关紧要。紧要的是,皮特解决了问题,同时为团队消减了长期维护的成本。弗兰克同时也解决了问题,但他因为生产了代码,提高了维护成本,所以,(在其它方面完全等效的情况下)他的方案差一些。而把皮特称作更有“生产效率”,则完全从实效性上扭曲了这个比喻。
我认为,优秀的程序员,他所做的事情应该是去除问题。而相对的则是生产出什么。所以,技术上的生产产物,例如代码、文档、数据等,对于实现“去除问题”的目标来说,都是必要但有害的。这就是为什么有时候,这最有效的解决方案是5分钟的交流沟通。
对这种思考模式最有力的支持:当你用这种思维去看待软件开发后,很多棘手的、能看得到但无法测量的问题突然间变得很容易理解。例如,为什么当程序员和他们的客户隔离开时会显得缺乏效率。难道让他们避免打搅不会提高工作效率吗?答案是不会,按常理这会使他们更有效率。但也会造成他们更没效率。因为他们的工作是为客户解决问题,与客户的隔绝导致他们无法找到问题,确定问题。相反,跟有问题的人保持沟通能更有效的解决问题,甚至有时候你一天8小时手指根本不需要碰键盘。
这将我们引向了另外一个问题:为什么软件开发中维护成本相比起其它方面的成本显得很难接受?为什么我们永远无法在第一次做出“正确”的东西?一种解释就是,软件是一个对可能变化的问题的固定解决方案。当问题发生变化时(或我们对它的理解发生变化时),问题和解决方案之间就出现了裂痕。这种随着问题的演变而不停的修补产生的缝隙的活动代价高昂。这也解释了为什么相对于其它软件项目,视频游戏通常的维护成本较低。这是因为它们需要解决的问题(让人们去买这个游戏,玩这个游戏)基本上是根据人类心理学,而这是不常变化的。
好的程序员和坏的程序员之间10倍之差的“生产效率”又是从何说起?每个人都说这是事实,但事实上没有人能直接的测评。我们的理论同样能解释这个问题。相比起工作效率来说,“解决问题”是一种更容易“调控”的东西,使得产生一个数量级差别的效果很容易实现。解决问题需要的是信息和洞察力。你要么有,要么没有。不需要原材料,没有生产能力限制。并不是差的程序员打字速度慢。并不是如果他们努力就能做得更好。他们是缺乏这种高效解决问题的眼界和必要的信息。也许无法测量好程序员和差程序员在生产效率上的差别的原因就在于没有东西可测量。
还有很多现象都可以用这个理论来解释。如果你去找,一定能发现一些。最近我一直在搜罗这方面的案例。试一试,看看这个理论是否也体现在你的工作中。每当发现自己在说提高“生产效率/工作效率”时,问问自己是否是在用正确的方式解决问题。铭记在心:如果不通过生产任何东西就能解决问题,那生产出的任何东西都是一种浪费。
- 浏览: 567667 次
- 性别:
- 来自: 北京
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
相关推荐
程序员的工作不能用“生产效率”这个词来衡量。通过反复的交谈,BillCaputo最终说服了我,让我相信了一些不可思议的事情。这些事情改变了我整个看问题的方式,也让我重新思考如何更好的工作。软件开发中没有“生产...
通过这个示例,我们可以看到,工作日志可以帮助程序员更好地管理自己的工作,提高工作效率,记录工作进度,总结工作经验等。 结论 工作日志是程序员日常工作中不可或缺的一部分,它可以帮助程序员更好地管理自己的...
程序员如何提高工作效率
综上所述,Lingoes是一个强大的程序员专用词典,它提供了丰富的IT专业词汇和便捷的学习功能,是提升程序员语言技能和工作效率的好帮手。通过下载PCHome上的相关资源,用户不仅可以获取到软件,还可以了解到更多关于...
在当今社会,程序员作为一种技术性极强的职业,受到众多求职者的追捧。然而,对于程序员而言,除了不断学习新...程序员应该在工作中不断总结经验,吸取教训,把握每一个提升自我的机会,以期在程序员的道路上越走越远。
程序员如何使用ChatGPT提高工作效率
《程序员编程最需要的...总的来说,《程序员编程最需要的计算机词典》是程序员提升自身技能、扩展知识视野的重要参考资料,无论你是初学者还是资深开发者,都能从中受益匪浅,不断提高自己的编程水平和问题解决能力。
总之,提高程序员的工作效率是一个涉及多个方面的系统工程,需要程序员在日常工作中不断尝试、调整和优化。除了上述策略外,合理规划工作与休息时间,保持良好的生活习惯和心态,也对保持高效的工作状态至关重要。每...
《程序员工作法》是针对软件开发人员的一种高效工作方法论,它强调了在编程实践中的组织、规划和执行策略,以提升工作效率和代码质量。在Python编程领域,这些方法尤为重要,因为Python以其简洁、易读的语法和强大的...
最后,工作满意度和归属感是衡量程序员是否能够在一个新环境中快速成长的重要指标。找到一份满意的工作后,程序员能够快速适应并产生强烈的归属感,与团队形成良好的配合,这是个人选择和职业规划成功的最好证明。 ...
这要求程序员具备跨浏览器开发的经验,熟悉各浏览器的特性,可能需要用到像jQuery这样的库来处理兼容性问题。 7. 框架集成:与PortalOne的联调过程中,遇到兼容性问题,这通常需要对双方框架有深入理解,能快速定位...
程序员最佳翻译词典
定期审视自己的工作,思考是否有更重要的事情等待完成,即使这可能会引发深层次的自我质疑,但每一次的反思都是向更高效率迈进的一步。 #### 多任务并行 传统的专注单一任务理论并不总是适用。实际上,多任务处理...
根据给定的文件信息,我们可以提炼出以下几个关键的IT知识点: ### WCF(Windows Communication Foundation) ...这些知识点对于IT行业的从业者来说,是不可或缺的基础知识,掌握它们有助于提升编程技能和工作效率。
10. 综合能力:前端程序员通过一年来的学习和锻炼,提高了自己的综合能力,如设计、调试、开发、测试等能力,也提高了自己的独立完成工作的能力。 2021年前端程序员的年终工作总结展示了前端程序员的一年来的经验和...
程序员在工作中被打扰会面临严重的影响,这是一个在软件开发领域公认的问题。程序员在解决复杂的编程问题或者进行深度编码工作时,他们的大脑会进入一种被称为“心流”的状态。心流状态是一种极度专注的心理状态,在...
这款记事本不仅仅是一个记录日常工作的工具,它更是程序员高效工作、精确时间追踪和科学管理个人生产力的得力助手。 首先,“程序员记事本”的第一个亮点是支持自定义分类。程序员在日复一日的工作中,会涉及到多个...
根据提供的信息,我们可以总结出以下关于“程序员汇报工作必备PPT模板”的相关知识点: ### PPT模板概述 1. **模板类型**:“程序员汇报工作必备PPT模板”是一款专为程序员设计的工作汇报模板,适用于各类会议、...
首先,我们可以推测“一看就会.docx”可能是一份用户指南或者教程文档,旨在帮助用户快速掌握如何使用这个程序员助手。它很可能包含了软件的操作步骤、功能解释和示例,以便用户能够轻松上手。 “BlockEdit.exe”、...