程序员的工作不能用“生产效率”这个词来衡量

程序员的工作不能用“生产效率”这个词来衡量

employee-productivity

通过反复的交谈,Bill Caputo最终说服了我,让我相信了一些不可思议的事情。这些事情改变了我整个看问题的方式,也让我重新思考如何更好的工作。

软件开发中没有“生产效率”。

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

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

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

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

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

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

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

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


[英文原文:http://www.benrady.com/2012/11/theres-no-such-thing-as-software-productivity.html]
[中文原文:http://www.oschina.net/news/42509/theres-no-such-thing-as-software-productivity]
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值