完美主义 —— 软件工程生产力最大的阻力

news2024/12/27 12:19:18

此文大部分内容来自翻译,原地址在文末

在这里插入图片描述

简介

在毫无意识的情况下,完美主义常常让我们遭受损失。我们可能认为花这么多精力来确保结果是 “完美的” 感觉很棒的,但最终,我们永远不会达成完美,而我们的工作会变成无休止的“半成品”。

Jordan 关于完美主义的故事

在我职业生涯的早期,我花了很多时间编写代码。事实上,在我作为工程师的前3年,我发送了1200多个拉取请求(PR),平均每天约1-2个PR。

虽然代码量很大,但我当时关注的其实是一些错误的事情。大多数合并请求都致力于使我们代码库中的代码变得“完美”。

当时,我认为我在做伟大的事情。谁会不喜欢代码被 “打扮” 一下?但是回顾当时的时间,我意识到我没能很好地利用当时的时间。与使 “代码” 变得完美相比,我本可以为团队创造更多的价值,更何况很多代码是多年未被修改过且不需要被修改的代码

我当时可以做得更好的事情可以举一些例子:

  • 与其让同事有很多的代码需要 review,不如减少代码提交和合并(那些美化工作)来让大家压力小一些。
  • 更快地发布每个版本的功能
  • 询问我的业务经理该做哪些事情以帮助业务

因此,我意识到当时这些代码提交与合并请求是多么毫无意义。如果我花更少的时间获得完美的代码,我可以减少 50% 的代码提交,并用这个时间为团队增加 x2 的价值。

今天,如果我在一周内不会发布超过 3 个合并请求。那是因为我的重点是做正确的事情,这通常意味着帮助团队、建立伙伴关系、写提案和通过文档扩展自己的影响力。当我发布代码时,必须对团队或者业务有明确的价值。

我通过做如下三件事来避免完美主义:

  1. 在一周开始时规划本周的高优事项,这有助于我知道本周完成哪些事情是最重要的。(而这些重要的事情,通常不是完善某事)
  2. 交付尽可能小的、有价值的产品或功能单元给内部或外部客户。例如,即使是一个只有80%功能完成的原型,也可以通过使用功能开关(feature flag)的方式先在内部发布,以便尽早获得反馈。这样做的目的是快速迭代,及早识别问题,并根据反馈进行改进,而不是等到一个功能完全完成后才发布。
  3. 在工作中我追求早期反馈。每天开始时,我会安排 四个小时的专注时间 来尽可能多地推进工作。之后,我会反思自己的工作:“基于我所完成的工作,有什么是应该分享或寻求反馈的吗?”。我会询问我的团队:“我的工作方向是否错误,还是我应该继续当前方案?”。有时候,我会发现比我的方案更简单的解决方案,或者发现问题已经被探讨过,又或者我的方案根本无法解决问题。这样做可以节省我大量的时间。

在这里插入图片描述

记住:更少的完美,更多的推进。

Gregor 关于完美主义的故事

完美主义从小就对我来说是个问题。我一直想把东西做得尽可能好,尤其是我看重的事情。

我花了很长时间才意识到这实际上是适得其反的。以下是作为软件工程师和技术经理我想要完善的事情。

我想从教程中“完美地”学习

在我作为一名自学成才的工程师的早期,我从在线教程中学到了很多东西。

回想那时,假如我不是总确保 100% 学完每一个教程,以及摒弃 “我不应该错过任何一秒” 的心态,那我当时应该会学的更快。

我现在知道,从教程中学习的最好方法是获取你需要的东西并将其应用到你自己的项目中。构建你自己的项目是最好的学习方法。

我想设计“完美”的东西

在学生时代,我也做了很多与设计相关的事情,比如设计横幅、平面设计。当时出现了某种重复的工作模式。

这种模式是,我会很快地创建一个草稿,然后花 2-4 倍的时间进行最后的润色。这既效率低下,又让我压力很大的。

我花了很多时间试图确保它“像素级完美”:正确的颜色、正确的字体、正确的行间距等等。如果我能接受不完美,我会取得更快地进展。有趣的是,完美主义的最终结果并不比初稿好多少(也许多一点)。

我想创建“完美”的代码

在我作为软件工程师的职业生涯早期,我会觉得我需要编写完美的代码,然后再展示给其他人。

我花了很多时间重构函数、重命名变量、重新思考方法并总体寻找优化方法。我的冒名顶替综合症总是让我觉得我不够好。(冒名顶替综合症—— Impostor Syndrome 是一种心理现象,指的是个人经常怀疑自己的成就,担心别人会发现自己不如外界认为的那么有能力、有才华。这种现象会导致即便有明显的成功证据,人们也会认为那是因为运气、偶然或者他人的过高评价,而不是自己真正的能力和努力。这可以导致焦虑和持续的自我怀疑。)

这让我整体效率变得很低,同时类似于设计 → 它给我带来了额外的压力。

如果我专注于 “足够好” 的代码而非 “完美” 的代码,并尽早获得反馈,我会取得更大的进步!

作为一名技术经理,我想等待“完美”的时机,做出“完美”的决定

我一度认为反馈的时机需要完美。然而等待的结果是:事情往往变得更糟了。

我对自己说:“如果我再等一会儿,也许事情会变得更好”。事实是事情没有。我对完美时机的等待让情况变得更糟。

类似于做决定。“他们需要完美”,我对自己说。这让我陷入了一个境地,我做决定的速度不够快,这实际上阻碍了我的团队进步。

随着时间的推移,我意识到,并不是所有的决定都是绝对正确的。更好的方式是,快速做一个足够好的决定,如果需要的话,以后即便推翻它也不要紧,而不是在等待中什么都不做。

以下是我觉得学到的最重要的三个经验:

  1. 专注于推进和进展而不是 “完美” 会让你更有效率,这对你的心理健康都将产生积极影响。
  2. 完美的时刻是不存在的,等待它们只会导致更多的问题。当下或尽快做开始行动是处理重要事情时正确的方案。
  3. 每当我觉得我在努力 “完美” 时,我就会想:100%不存在,95%在大多数情况下已经足够好了。这让我的思想转向进展而不是完美。

原文地址

https://newsletter.eng-leadership.com/p/perfectionism-one-of-the-biggest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构DBA

写一篇很费心力,大家觉得好,就点下广告支持下吧! 如何选择国产数据库?再论国产数据库的选择DBA搞钱之路 做为一名中年DBA来说,从2002年毕业来,享受国家经济高速发展的时期,路过2008年经济危机,错过了房地产致富之路! 焦虑与不安伴随多年,不是几年,而是十几年! 小仙我,不是名…

制造知识普及(九)--企业内部物料编码(IPN)与制造商物料编码(MPN)

在日常的物料管理业务逻辑中,一物一码是物料管理的基本的业务规则,不管物料从产品开发还是仓库管理,甚至成本核算,都要遵循这个原则,才能保证产品数据的准确性,才具备唯一追溯的可行性。大部分企业都是这种…

Android进阶之路 - 字体加粗,定制化字体粗度

在客户端中不论是PC端,还是移动端主要价值之一就体现在用户交互方面,也就是用户体验了,接下来讲的是很常见的字体加粗问题 UI大找茬 深入浅出字体、字体库TextView文本渐变字体阴影、文字阴影字体加粗 - 定制化字体粗度 在开发中经常会遇到…

【SQL Server】端口安全配置:SQL Server的安全最佳实践与防火墙规则配置

目录 SQL Server 安全最佳实践 防火墙规则配置 示例:配置 Windows 防火墙规则 加密连接 示例代码:使用加密连接 安全注意事项 SQL Server 安全最佳实践 在进行任何网络或数据库系统的部署时,确保安全是至关重要的。SQL Server&#xf…

语法检测在线英语怎么做?5个检测技巧教会你

相信大家平时在撰写文章、报告或是任何形式的书面材料时,都会发现语法错误会很大程度地影响信息的传达和读者的理解。尤其是对于非母语的写作者来说,语法问题更是棘手。 但得益于语法检测在线免费工具的出现,现在可就再也不需要为语法错误而…

10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享

在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…

【youcans动手学模型】YOLO5 (上)环境配置与测试

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】YOLO5 (上)环境配置与测试 1. YOLO 简介2. YOLOv5 简介3. YOLOv5 下载4. 配置 PyCharm 环境5. 运行 YOLOv5 推理 1. YOLO 简介 YOLO (You Only Look On…

【溯源反制】反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接:https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码:8888 下载好后先打开Loader文件夹下的.exe文件,打…

2.如何定制 Dcat-admin list 中显示的信息

操作在xxxController.php文件中的 protected function grid() 中进行 定制显示的内容 protected function grid(){return Grid::make(new Robot(), function (Grid $grid) {// ->sortable() 新增一个排序的按钮在列标题中$grid->column(id)->sortable();// 正常字符…

STM32-OTA升级

一、OTA(Over-The-Air) OTA(Over-The-Air)是一种通过无线通信方式,为设备分发新软件、配置甚至更新加密密钥的技术。它允许中心位置向所有用户发送更新,确保每个接收者都无法拒绝、破坏或改变这些更新&…

C# Unity 面向对象补全计划 设计者模式 之 单例模式

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 了解我的专栏C#面向对象与进阶:http://t.csdnimg.cn/mIitr,尤其是关于类的那篇文章即…

电脑屏幕录屏,5个技巧,精准捕捉!

电脑屏幕录屏已经成为了一种常见的行为,无论在工作还是生活中都发挥了重要作用。然而,对于许多人来说,如何进行电脑屏幕录屏可能仍然是一个谜团。 从选择合适的录屏软件到了解录制的技巧,都是需要探索和学习的内容。在这篇文章中…

数据库|SQLServer数据库:模糊查询的三种情况

哈喽,你好啊,我是雷工! 就是字面意思,当数据库的查询条件并不是十分具体时就用到模糊查询,比如查询姓氏为雷的人名,就需要从姓名列模糊查询。 01 like关键字查询 当使用like关键字进行查询时,字…

国央企如何提高监管数据报送效率?

最新动向 近日,国家层面高度重视清理拖欠民营企业账款的问题,并出台了一系列相关政策,要求国有企业在偿还债务方面发挥示范作用。近期发布的报告强调了优化民营经济发展环境的重要性,并提出了六大重点工作,其中包括修…

50etf期权行权采用什么交割方式 ?

50ETF期权是欧式期,要到期日当天才能行权交制,其交割方式是实物交割买卖双方在到期行权日时需要准备一手交钱,一手收货或是一手交,一手收钱,如果持有期权到达到期日之前,投资者认为行权并不划算&#xff0c…

python.tkinter设计标记语言(语法2-语法解析器)

TOC 前言 本文只作为笔记记录。 TinText开源地址:https://github.com/Smart-Space/TinText 语法解析器 从前文可以看到,新的Tin标记语言非常简单,即便是加入嵌套关系,也只是标签级别做个标记就行了。(在写这篇文章…

【Python机器学习】回归——局部加权线性回归

线性回归有一个问题就是有可能出现过拟合现象,因为它求的是具有最小均方误差的无偏估计。如果模型欠拟合将不能取得最好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。 其中一个方法就是局部加权线性回归(LWLR…

学习记录——day27 进程间通信 IPC通信机制 消息队列 共享内存

目录 一、IPC通信机制 1、system V提供了三种IPC(interprocess communication)进程间通信方式 消息队列 共享内存 信号量集 2、该通信机制是独立于进程而存在的:当进程将数据写入该通信对象中后,即使进程已经结束,对象中保存的…

吴恩达机器学习COURSE1 WEEK2

COURSE1 WEEK2 多维特征 在线性回归中,往往特征不止一个,而是具有多维特征 例如,在预测房价的例子中,我们知道更多的信息: x 1 x_1 x1​:房屋的面积 x 2 x_2 x2​:卧室的数目 x 3 x_3 x3​&a…

【嵌入式】常用英文缩写及单词整理

目录 嵌入式常用英文缩写及单词整理1. 缩写部分2. 词汇部分3. 语句部分4. 调试部分5. 结束语相关文章: 嵌入式常用英文缩写及单词整理 1. 缩写部分 缩写全称翻译AADCAnalog-to-Digital Converter模/数转换器,模数转换器ADUApplication data unit应用数…