文章翻译自:Tips for Dealing with Developer Stress
作者简介:
Rich McLaughlin: Rich是Vertafore公司的高级软件工程师。他也开发JavaScript游戏(像Zelda),并在anonymous-function.com上不定期的推出前端方面的专题。
概要
本文归纳了程序开发人员日常面临的几种压力,解释了它们怎样侵蚀工作的效率。我们将详细讲解如何识别压力产生的根源,以及如何管理这些压力。
背景
这篇文章是由我和Erik Gillespie[1][2]合写的。我们在很多方面进行了合作,包括一些有趣的业余项目、业务理念推广和史诗级的商业应用等。我们遇到过很多压力山大的场景--从企业级架构的决策到上哪吃午饭(虽然后一种更近似于玩笑,但是有一类的压力叫“决策困境”,它正是由于对一些基本的事情,比如吃午饭,难以做出选择而造成的--所以看看还有什么吧)。我们尝试过很多技巧来解决这些日常的压力,并且挑选了一些我们觉得最有帮助的分享给大家。
作为软件工程师,我们的工作总有非常大的压力。其中工作的核心就在于开发,并且快速地开发。但假如压力击溃了你,则快速开发何从谈起呢?
当以下情况发生时,该怎样尽可能高地维持工作成效:
- 产品经理想添加更多的内容
- 会计想削减开支
- 客户有相互冲突的需求
- 开发人员想尝试一切最新的、最伟大的东西
我们推荐你从“5个为什么”开始。
5个为什么
“5个为什么”是一种能够帮助你明确压力来源的策略。通常地,当倍感压迫时,我们会太过关注当前的情绪以至难以缕清麻烦产生的根源。
“5个为什么”[3]是一种发现各种类型的压力来源的好方法。它从陈述对某个问题的最初感觉或评估出发,然后不断重复地问自己“为什么”五次。多数情况下,你都可以通过这种方法更清晰地理解潜在的问题。
让我们将“5个为什么”策略应用到一个常见的工作场景中:
我:今天工作很糟糕。
为什么很糟糕?
我:我要加班。
为什么要加班?
我:我没有完成代码的修改,本来我说可以准备好用于明天的测试的。
为什么没有完成代码的修改?
我:我开了五个不同的长达一小时的会,这些会议占用了我大部分的时间。
为什么剩下的3个小时不够用?
我:本来是可以的,但是在不同的会议间我只有15分钟可以用来处理事情。
为什么你在会议间隙只有15分钟?
我:会议超时了。然后在检查完邮件并记起我在做什么之后,几乎没有时间做事就要准备接下来的会议了。
这个最终的回答例证了四种常见类型的工作压力中的一种。为了搞清你处于哪种类型的压力,你可以尝试着问:
- 你面对的问题是否涉及到还没决定的选择?
- 和你一起工作的其他人有不同意见吗?
- 你是否觉得正处于不必要的忙碌之中,总是在不同的任务之间来回切换,或者总是落后于自己的工作?
- 是不是有些事情你不喜欢做?是它们很无聊呢,还是这些事情让你的时间未被有效利用?
让我们思考得更深入一点,并为这四个例子代表的压力类型起个名字,然后看看处理它们的一些技巧。
压力的类型
决策困境
开发人员每天都要处理无数大大小小的选择。这些选择囊括了从制定一个新产品的技术栈到命名一个函数。所有这些小的行为都需要耗费时间和精力,它们缓慢地消磨大脑制定决策的能力,直到让人精疲力竭。这种压力持续的削弱你的决策力,将你困于决策疲劳的漩涡中难以自拔。我们怎么克服这种特定类型的压力呢?
减少选项
体会下面这副源于xkcd [4]的漫画:
很多情况下,这幅图都夸大其词了。但是,想想当你向柱形图中添加一个策略C时会发生什么。你必须把策略C与策略A和B都进行比较。如果再考虑一个策略D,你就必须把它与先前的三个策略都进行比较。显然,大量的比较各种策略不是一种制胜策略。
因此,我们的第一个窍门就是减少决策过程中需要考虑的选项或者变量的数目。每消除一个选项,你就从将它与余下选项的各种比较中解放出来了。
比如,或许你想在自己的应用中引入一个JavaScript模板框架。通过快速的检索之后,剩下四种主要选择。如果你能迅速地剔除哪怕其中一个(或许就是你们组员都没有听说过的那一个),你都不用将其与剩下的三个模板库进行比较,这是多么的节省时间和脑力啊!
边做边选
另外,构造原型能够很好地削减可能选项的数量。在功能实现的讨论中跑题数小时是很简单的事。通过实际动手构造一个简单的原型或者样本,而不是依据空中楼阁进行决策,能够更快的获得答案。
你可以通读已经发表的所有文档和博客,但有时候仅花费30分钟就能够证明某些事情是否可行。构建原型时,不要在意代码质量;给自己设置一个时间限制,看看你能完成到什么程度。当快到限定的时间,做一个彻底的检查。你能预见这种想法行得通吗,或者你能发现哪些事情会使得工作无效率、不切实际吗?如果你发现这是在自寻烦恼,那么吃一堑长一智,然后转移到别的选择上去吧!
意见分歧
第二种主要的压力来源是意见分歧。大多数开发人员都不是自说自话,无数个星期里,我们和同事待在一起的时间比和家人待在一起的时间更长。这种寻常的交流(有意无意的)会导致专业性的下降。再加上其他因素,就会导致不一致的看法。一些解决此种压力的技巧包括:
选择性争辨
我们很容易为了字面上的东西争执不休。但是某个函数叫"getUserId"或者"getUserID"真的很重要吗?可能并非如此。但是,太多时候人们会陷入这种微末的细节中(这种行为也有一种说法:“车棚效应”[5]!)。讨论就此变得无效率,在这上面浪费的时间比大学生们在某个莫名其妙的节日上浪费的时间还多。即使你的意见或者选择更合理,也不能保证你会赢得争论。那么就此作罢吧,有时候为了持续前进你必须要及时止损。
投票表决
正经话,对民主表现点热爱吧,因为我们都参加过那种为了寻求最优解而不断转圈的会议。设置一个讨论时限,到了点就把所有方案提交投票,少数服从多数。形成了僵局?看下一个技巧点!
提请仲裁
找一个中立方,他并不需要是一个专家甚至是开发人员。找一个你能在五分钟内向他解释清楚所有选项的人,看看他有什么意见。引入这种新的视角甚至会使得答案显而易见。有时候,仅仅是把问题大声地表述出来就足以帮你做出决定或者找到答案。
任务超载
晚上和周末总是在加班?这第三种压力实在烦人。看看下面这些内行的解决方案吧,它们会帮你把私人生活从不时变成黑洞的工作中解救出来。
优先处理
你可能会碰到两种类型的优先事务:客户方面需要优先处理的工作(来自于你业务线的同事)和自己实际能够优先处理的工作。如果你感觉在某些特性上花费了过多的时间,但是这些努力却不保证有价值,你就应该跟你的项目或开发经理谈谈了。经常被邀请参加各种会议?那么仔细评估一下与会的人员:你们组是否有水平相当的同事参加了会议,并能够做一个报告呢?
将事务处理的情境最小化,试着把任务切割清楚了再转向下一个。这样会帮着把它从你的任务表和脑海里剔除掉,然后你就可以把注意力集中在下一个项目上。你也可以创造性的解决这个问题:尝试着把所有会议压缩到一周的某一天,鼓励施行“不开会的星期一”,或者重新规划日常议程,让这些会议连在一起。
留意每周的工作:如果你连续好几天都要加班,要当心衰竭的风险了,这会导致工作质量十分之差。确保留一定的时间用来休息和自我革新;要明白规定期限是用来帮你决定哪些事必须要做,而哪些可以留到明天再做。
弄清楚了再开始
开发人员不应该对职场与期望的不相符而感到诧异。在应聘阶段你就应该预见性地问一些问题,确保自己所期待的工作生活之间的平衡与实际相符。不要仅问些“典型的工作日”是怎样的,而应该明确的问清楚公司的关键时间点的频次,以及这种时候员工是否需要轮流地随时待命。
如果目下你已经挣扎于工作上花费了太多的时间而不能好好享受生活的状态,跟你的经理谈谈吧!你可能会惊讶地发现你的老板也不愿意你勉力维持。
工作停滞无聊
在你的职业生涯中,总有某些时候你不是在干着自己最喜欢的工作。但那也是你工作的一部分。下面这些技巧会帮你能量满满地度过这段时间。
沉入进去
从职业生涯的角度来审视一下这个问题:我们之所以选择软件开发,难道不是因为我们热爱它吗?通常而言,我的职业最有吸引力的方面不是因为它能赚钱,而是因为我做的某些事很有趣。写技术博客、出席交流会,或者编写一个有趣的业余项目都是沉浸到新事物中的好方法。将有趣的业余项目和乏味的任务结合起来,会使得那些乏味的任务更容易忍受。
你甚至会在工作中获得接触新事物的机会。尝试日常工作以外的新事物是灵感和创造力的良好来源。把它们带到工作中,是吸引注意力并开展新的或是报酬颇丰的项目的好方法。
更进一步
不管什么问题,你都不是第一个碰到它的人。认真地找出问题根源所在,而不要只会以头抢地。跟其他开发人员或者你的经理谈谈并寻求一些帮助。没有人喜欢职场殉道者(“看,我是多么努力地依靠自己来解决问题啊!”)--尽力寻找答案,如果长时间没有进展就请人帮助一下吧。
现在我们已经讨论了一些开发人员常见的困难,记得回到工作中试着解决掉问题。我们谈了对自己有帮助的技巧,如果你也有一些管理压力和注重效率的好点子,在评论区里告诉我们吧!
参考链接: