2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

开发者的快乐:提升开发者生产力更好的方式

作者:Trisha Gee, Holly Cummins

  • 2025-06-06
    北京
  • 本文字数:3925 字

    阅读完需:约 13 分钟

大小:1.91M时长:11:07
开发者的快乐:提升开发者生产力更好的方式

如果你曾在淋浴时解决过 Bug,或在整理餐具时突发奇想,那你绝非个例。对于软件开发者来说,生产力并不总是体现在埋头敲代码上。事实上,正如开发者兼思想领袖 Trisha Gee 和 Holly Cummins 所说的,最好的代码往往源于一点点的趣味,或者是暂时放下手头的工作离开电脑片刻。


在本文中,Holly 和 Trisha 深入探讨了为何快乐并非生产力的干扰因素,而是背后的秘诀所在。她们从在慢跑中调试大脑波到减少测试的不稳定性等多个角度解释了如何通过拥抱好奇心、减少摩擦和适时地给自己放个假来重新找回开发者的满足感并提高产出。

快乐与生产力的联系

在企业环境中,一直存在一种误解,认为生产力和乐趣是对立的,领导者必须在拥有一个快乐的团队和实现业务成果之间做出选择。这完全是一种谬论。表现卓越的团队之所以更快乐,是因为他们在工作中蓬勃发展,而不是因为他们偷懒。实际上,生产力高的开发者往往更快乐,而快乐的开发者也更具生产力。


玩耍并非只是无足轻重的东西,而是一种有价值的工具。无论是尝试在代码库中做些新尝试,拼凑出一个原型,还是休息一下让大脑自由漫游,快乐都能帮助开发者更快地学习,更有创造性地解决问题,并保持参与感。


这些好处得到了众多研究的有力佐证,这些研究一致表明,快乐、喜悦和满足感都能带来更高的生产力(参见文章末尾关于开发者快乐和生产力的研究)。当公司追求生产力而忽视了员工的快乐感受时,结果往往是倦怠和产出下降。

开发者不只是写代码

尽管你的日程表可能暗示如此,但编码并非你作为开发者所从事的唯一工作,甚至可能并非你花费时间最多的任务。相关调查显示,开发者实际用于编写代码的时间不足其工作时间的一半。Trisha 进行的一项非正式投票也发现,这个比例甚至不到 30%。


开发者还会花费时间在会议上、在 Slack 上讨论交流以及处理电子邮件。在技术方面,时间会被分配到管理软件开发流程的其他环节,比如进行代码评审、解决故障、编写、运行和调试测试代码,以及维护现有代码或系统。


软件开发从来不仅仅是编写代码。与业务其他部门沟通(通过会议或其他媒体)是确保开发出正确软件的关键。这不一定是坏事:良好的沟通可以带来更好的结果。但如果时间被浪费在管理不稳定的测试、盯着构建过程干等,或者费力解读晦涩难懂的代码上,那就得不偿失了。

摩擦、苦差事和心流的消亡

那么,是什么让开发团队失去了快乐呢?开发者常常被各种精力开销所困扰。这可能是流程上的开销,例如繁琐冗长的状态报告、需要将相同信息重复输入多个系统,或是毫无价值的会议。也可能是技术上的开销,比如设计拙劣的 API 接口、缓慢的反馈循环等。


我们的目标是减少那些会打断工作动力、让工作变得枯燥乏味的摩擦和苦差事。漫长的构建和测试过程通常是罪魁祸首。在 Gradle,团队特别注重为开发者提供正确的工具来提高测试的可靠性,从而减少这些摩擦。例如,一个用于展示不稳定测试的仪表盘,对失败的测试和构建进行了可视化。这很重要,因为我们常常低估了测试不稳定是多么的“无趣”。如果一个测试有时通过,有时失败,但没有明显的模式,它会分散我们的注意力,让我们陷入调试代码的困境。


大多数开发者热爱开发,但当被繁琐的事务阻碍无法专注于他们真正热爱的开发任务时就会产生挫败感。无论是笨拙的内部工具、冗余的流程,还是低价值的会议,结果都是一样的:更多的时间花在无趣的琐事上,就意味着用于编码的时间更少了,乐趣也更少了,实际产出也会大打折扣。人们渴望取得成就,所以如果某件事无趣,这很可能是一个明确的信号,表明它可能是在浪费时间。即使是像 Quarkus 实时重载体验这样看似微小的工具改进,也能显著提升开发者的心流体验和快乐感受。

自动化掉无趣的部分

好的工具可以减少摩擦,而卓越的工具则为快乐创造空间。无论是使用构建缓存还是加速测试,自动化都为开发者提供了专注于更有意义(也更有趣)任务的宝贵空间。如果你发现自己在重复的任务上耗费大量时间,而没有合适的自动化工具来处理它们,那就自己动手发明一个。Camille Fournier 在她的著作《管理者之路:科技领导者应对增长和变化的指南》中写道:


“我们工程师会进行自动化,从而能够专注于那些有趣的事情——而所谓有趣的事情,正是那些最能充分发挥你大脑潜能的工作。”


充分发挥大脑的潜力固然重要,但奇怪的是,适度地放松大脑同样具有价值。这是为什么呢?接下来我们来解释一下。

拥抱“空白时间”

最反直觉的生产力技巧之一就是什么也不做(真的是这样吗?)。当我们深陷某个问题时,常常会对着代码熬到午夜,却毫无头绪。然而,到了第二天早上,突然之间,在短短五分钟内解决方案变得清晰起来。良好的睡眠是最好的调试工具,但这是为什么呢?究竟发生了什么?这是默认模式网络在起作用。默认模式网络是大脑中的一组连接,当你处于空闲状态时会被激活。这个网络负责许多重要的大脑功能,包括创造力和解决复杂问题。


不要用琐碎的事务填满每一个空闲时刻,而要学会适当地休息。去散散步、织织毛衣或者做做园艺。在这些例子中,“空白时间”并不是偷懒,而是一种深度的问题解决过程。


是的,这依然是工作。知识工作者在健身房锻炼、慢跑,或者安装洗碗机时,大脑依然在工作。所以,不要因为暂时离开电脑而自责,也别忘了提醒你的老板,休息时间同样是有价值的。

AI 和卓越代码的艺术

至于 AI?它确实拥有巨大的潜力,但在使用时必须谨慎行事。在我们的经验中,AI 生成的代码往往更注重数量而不是质量。当我们使用 AI 生成代码时,通常会得到很多代码,而且这些代码可能相当冗长繁琐。例如,生成的代码中常常包含大量注释,这些注释只是陈述了一些显而易见的事实,没有任何实际的附加值。这种冗余可能表现得更为微妙。Quarkus 的一些库,如带有 Panache 的 Hibernate ORM,有非常简洁的编程模型,可以去除大量样板代码。AI 生成的代码往往会把这些样板代码重新加回去。


这种膨胀的代码并非仅仅是无害的填充物。对于未来的代码维护者来说,阅读和理解这些额外的注释和代码行,会成为一种显著的生产力障碍。


在评估 AI 对生产力的影响时,要谨慎思考。如果 AI 能够为我们创建 90% 的内容,但完成最后的 10% 所需的时间比我们自己动手还要长,那么它实际上并不能算作一个真正的生产力工具,不是吗?


AI 依然能够提供帮助,但我们需要更加高效地利用它。我们需要花时间设置工具,使其能够契合组织所遵循的最佳实践和设计模式。使用 AI 也是一种对自我投资,因为善于使用 AI 是一种技能。更有效地使用 AI 意味着要提供更精准的提示词、更好的训练数据以及进行更精细的微调,同时还需要具备良好的人类判断力,判断什么样的代码才是“好代码”。未来的工作很可能会要求开发者花更多的时间评审代码,而不是编写代码。阅读代码是一项可以学习和提升的技能,因此我们建议开发者在这方面进行投资,以便能够高效且出色地完成这项工作。


当我们把 AI 引入工作流程时,有必要思考我们的“真正”目标是什么。我们的目标是为了满足某个生产力指标而编写更多的代码,还是编写更好的代码?

衡量真正重要的东西

为什么我们有时难以判断 AI 生成的代码究竟是帮助还是阻碍了我们?衡量开发者生产力本身就是一项挑战。传统指标关注可见的活动,比如代码行数或提交次数。这些指标很容易被操纵,而且只在某些时候能反映出实际创造的价值。像 SPACE 这样的框架从一个更平衡的视角来衡量生产力,如满意度、绩效、协作、效率和流程,以及传统的活动指标。


在衡量开发者生产力时,我们建议先进行威胁建模。当一个指标成为目标时,它仍然有用吗?当(而不是如果)这个指标被操纵时,我们会看到什么样的行为表现?


接下来,弄清楚我们真正要解决的是什么问题。衡量的目的是识别表现不佳的人并将他们淘汰吗?是为了激励每个人更努力地工作吗?(如果是这两个目标中的任何一个,请回顾一下威胁建模的讨论。)还是只是因为觉得必须要有数字,以便看起来我们掌控了一切,而去衡量吗?


如果目标只是为了有一些数字,而这些数字并不会真正用于决策,那么也许可以选择一个低成本的指标!又或许目标是找出导致摩擦的原因并将其消除。这是一个很好的目标,但生成开发者生产力的指标可能并不是实现它的最佳方式。


换句话说:不要为了衡量而衡量。要知道你正在解决的问题,并确保你的指标不会制造新的问题。

最终建议:修复摩擦,多玩耍,更聪明地工作

想要成为一个更快乐、更有生产力的开发者吗?那就需要有意识地去行动。


首先,要全面跟踪你真正花费时间的地方,而不只是那些容易衡量或让你感觉有生产力的事情。找出摩擦点,并寻找更好的工具或流程来解决这些问题。持续改进是不需要许可的,找出那些小问题和摩擦并加以修复。人们很容易陷入使用糟糕的工具和繁琐流程的生活,但这些问题是可以解决的!好的工具是存在的,适用于软件开发的精益技术也唾手可得。它们不仅更好,而且还能让工作过程变得更加愉悦。


最后,要为创造性玩耍腾出时间,不要只是埋头完成任务。这说起来容易做起来难,但不要因为觉得“应该”而把一天的时间都填满所谓的“有生产力”的事情。会议之间有空闲时间吗?利用这些时间进行创造性玩耍,你会惊讶于你能取得的成就。


关于开发者快乐和生产力的研究:

  1. Bellet, Clement and De Neve, Jan-Emmanuel and Ward, George, Does Employee Happiness have an Impact on Productivity? (October 14, 2019). Saïd Business School WP 2019-13

  2. Oswald, Andrew J., Proto, Eugenio and Sgroi, Daniel (2015) Happiness and productivity. Journal of Labor Economics, 33 (4). pp. 789-822. doi:10.1086/681096

  3. Shawn Achor, Positive Intelligence, Jan-Feb 2012


【声明:本文由 InfoQ 翻译,未经许可禁止转载。】


查看英文原文https://www.infoq.com/articles/developer-joy-productivity/

2025-06-06 12:005311

评论

发布
暂无评论

文盘Rust -- 配置文件解析

京东科技开发者

数据库 rust yaml 配置文件

数据中台建设(十一):数据中台解决方案参考与未来发展方向

Lansonli

大数据 数据中台 8月月更

云渲染掀起虚拟演唱会新热潮

3DCAT实时渲染

技术内幕 | StarRocks Community Champion、阿里云技术专家解读 Optimizer 实现

StarRocks

数据库

VS Code如何打造C/C++开发环境?

Jackpop

IT人才知道的二进制爱情,羡慕ing

ioik

爱情 二进制 java; 签约计划第三季

Nacos配置中心之服务端长轮询处理机制

急需上岸的小谢

8月月更

Linux的难题,终于有解了!

Jackpop

Docker基础:Docker 常用命令梳理

天使不哭

#开源 8月月更

为什么企业需要使用 Wiki 工具?

Geek_da0866

理解JavaScript中的“面向对象”

珲少

云渲染平台是互联网和云计算的发展产物

Finovy Cloud

云渲染 渲染农场 渲染价格

React组件应用于Spring MVC工程

JAVA活菩萨

Java 程序员 后端 大厂技能 大厂实践

最好的编程语言

flow

签约计划第三季

架构实战营课程学习感受

极客土豆

C++深拷贝与浅拷贝,初始化列表,对象成员,静态成员相关分析

CtrlX

8月月更

C++为什么始终无法取代 C 吗?

Jackpop

SRv6网络典型部署场景

穿过生命散发芬芳

8月月更 SRv6

如何设置跨域隔离启用 SharedArrayBuffer

JAVA活菩萨

Java 程序员 后端 大厂技能 大厂实践

备份和恢复Kubernetes集群中的Etcd数据

JAVA活菩萨

Java 程序员 后端 大厂技能 大厂实践

如何进行技术面试?

flow

签约计划第三季

设计模式:里氏替代原理(LSP)

flow

签约计划第三季

为什么互联网大厂一边疯狂裁员,一边不停招聘?

Jackpop

百家号打击挂载恶意导流链接行为,必须严厉打击恶意挂链灰产

石头IT视角

使用 Monaco Editor 开发 SQL 编辑器

CRMEB

华为研究院19级研究员几年心得终成趣谈网络协议文档,附大牛讲解

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

Kubernetes微服务Pod 影响力

CTO技术共享

开源 Kubernetes 集群 签约计划第三季 8月月更

在常州“超级虚拟工厂”,中国智造正在“原力觉醒”

脑极体

分析LED透明屏VS常规显示屏优劣

Dylan

LED LED显示屏 led显示屏厂家

如何管理LAXCUS计算机集群

JAVA活菩萨

Java 程序员 后端 大厂技能 大厂实践

什么是好的应用程序?

flow

签约计划第三季

开发者的快乐:提升开发者生产力更好的方式_软件工程_InfoQ精选文章