码农版隐秘的角落:作为开发者最讨厌的5件_职业生涯

软件开发作为一个职业在过去几年里呈现出爆发式发展,并且随着入门培训的普及和持续的跨行业渗透,现在确实是成为开发者的好时机。然而,在软件工程光鲜亮丽的背后,也有着不那么迷人的一面。如果你想像我一样进入软件开发行业,那么在投入大量时间、精力和金钱之前,也许是时候了解一些残酷的真相了。

诚然,任何工作都有好和坏的一面,但是我想说的是,如果你有70%以上的时间在享受你的工作,那么你就算有了一份很棒的工作。就我个人而言,我很喜欢开发工作,但我还是要指出那30%令人生厌的部分,那些反复出现的问题真的很让人崩溃。

随着时间的推移,任何工作都会暴露出很多问题,但在软件开发领域,有某些问题却总是在我的职业生涯里反复出现。接下来,让我来谈谈作为开发者最讨厌的5件事(排名不分先后)。

PART 01   

调试那些不在你掌控中的代码问题 

大家都不想找bug。归根结底,bug隐藏于某一行代码中的某个逻辑,比如跳过了一个步骤或者调错了一个方法。在所有类型的bug中,这种能通过上下文调试定位到具体位置的bug算是最好修复的,因为我们能找到他并且进行修复。然而那些从第三方库里引入的bug呢?

作为开发者,调试那些你无法轻松访问的代码才是更具挑战和令人崩溃的。也许这是一个你亲手引入的库,但是由于库已经被压缩或者编译,使得可读性极差。那么假如这个库是开源的,是否就值得庆幸呢?并非总是如此,而且开源库的bug往往是最难处理的。你需要花费额外的时间设计环境来隔离并单独复现这个bug,这样你才能将问题发送给开源库的所有者,并寄望于他们能够按照你的时间表进行修复。

许多团队都不得不面对这些问题,你可以通过选择开源项目或者本土解决方案来缓解,但如果没有选择,你只能硬着头皮上了。

PART 02   

维护一个旧项目且没有任何资料文档 

想像一下,你是一个训练有素、经验丰富的生存专家,决定参加一档类似荒野独居(Alone)的真人秀节目。你已经在这个领域投入了数千小时,是此类工作的专家,并且拥有许多成功经历。与以往不同的是,这个赛季你将被随机选中并且被投放到一个你完全不了解的环境。按照经验,要成功存活下来,你需要知道你要去的地点,那里是什么样的,或许还有一些成功的方法;你需要知道为什么要带某些物品,它们如何使用,也许还要向一些有经验的伙伴取取经;你需要知道什么方法是有效的,什么是无效的,也许还有一些独一无二的交易技巧。但是,这次不一样,你无从了解上述信息,这将最大程度地挑战你的技能极限。

作为一名开发者接手一个新项目,没有任何背景资料,没有任何可以提问的同事,就与上面的荒野独居升级版非常相似。软件开发的问题在于,解决问题的路径是多样的,人们之所以选择这套方案的原因是系统性的且经过深入探讨的。在一个没有任何背景资料或者求助人的项目中,你可能会遇到许多看似奇怪的设计,并且很难理解为何要这样设计。是因为开发者偷懒吗?还是为了赶工期而做的一种变通?或者是因为外部约束条件迫使这样设计和编码?不可能知道了,一切都像浮云一样飘散了。尽管如此,作为开发者,你想取得成绩,就需要知道如何在这种情况下完成任务。

不幸的是,这种项目会使许多开发者无所适从,并且滋生厌恶情绪,这种项目起步缓慢,就像是在盲目地探索雷区。这就是为什么风格良好的代码和及时更新的文档如此重要的原因。如果你正在阅读本文,不管你已经是开发者还是即将成为开发者,请尽量在你的代码中做好文档说明,特别是那些奇特的逻辑,这样当下一个人接手时,不管你还能不能提供解答,他都会更容易理解一些。

PART 03   

不懂软件开发的人瞎指挥 

软件团队的主要成员包括软件开发者、项目经理和产品负责人,有时候项目经理和产品负责人是同一个人,所以说到底总要有两类人,一类负责编码实现,一类负责构思他们想要的产品。在大多数情况下,后者会召集利益相关者开会、制定时间计划表并将产品卖给其他人。

这两类人之间的关系对于项目的成功至关重要,有时开发者在团队中干得开心也很重要。大多数时候,开发者被视为"码农",需求不加思索地推给他们,没有过多的讨论,有时还有不切实际的deadline。这些将导致产品匆忙上线,无法达成预期,最终导致产品失败,因为它不像计划中那样顺畅地运行并且经常出故障。

对于开发者来说,能够找到一个团队,与项目经理或者产品负责人融洽合作,不仅对于产品的成功至关重要,同时也增添了工作本身的乐趣。

PART 04   

缺少不被打断的时间 

有许多伟大的工作都需要开发者这个角色,大部分开发者也很珍视他们的工作。作为开发者最令人上瘾的部分就在于,可以将灵光闪现快速地通过编码转变为现实。另一个令人惊叹的部分可以形容为"心流"(the flow),即深度工作状态,这是一个人在深入工作和思考过程中所体验到的一种完全沉浸式的感觉。在需要高度生产力和创新的环境中这很常见,同样的,许多开发者想要高效编码也需要这种状态。

然而,在当代工作中,时间很容易被临时安排的会议或者全天不间断的咨询/疑惑信息所打断。想要进入深度工作状态很难,但是被打断却很容易。

此外,软件开发是一项高度个人主义的工作,这意味着你被指派任务和期望指标之后,其他事项都由你安排。然而,由于持续不断的消息和会议打扰,你很难找到足够的时间进入并保持工作状态以完成手头上的任务。这里的关键是你一天中不被打断的时间,因为即使是一些小事导致你切换工作内容也会造成损耗影响工作效率。

找到一段不被打断的时间,最好是3-4小时,在那里你可以完全进入状态并专注于你的工作,这非常重要。一天中挤满了各种会议,或者更糟糕的是,会议时间间隔30-45分钟,这对许多开发者的生产效率都是有害的。

PART 05   

冒名顶替综合症 

对于许多程序员来说,他们迟早会在职业生涯中经历某种程度的冒名顶替综合症。也许是开始一个新项目,加入一个新团队,或者只是某天中突如其来的坏情绪,让你产生自我怀疑并影响你一整天的工作状态。

梅利姆·韦伯斯持(Merriam Webster)将冒名顶替综合症定义为:

一种心理状态,又称自我能力否定倾向,具体是指“认为自己不配拥有已经取得的成功或成就,对自己的能力持怀疑态度,认为自己是个冒牌货”的状态。

这是一种适得其反的心理状态,有些人经常经历且难以摆脱,有些人则从来没有。但好在软件社区里,有许多人表示他们在职业生涯里都不同程度地经历过这种感觉,并且愿意为其他人提供帮助。

PART 06  

总结 

软件工程是一个伟大的领域,对许多人来说风光无限,它看起来很有趣并且拥有无穷无尽的机会。然而,每个领域和职业都有它的优点和缺点,大多数时候人们只谈论优点而忽视了缺点,并且说实话,有时候缺点都超过其优点。况且,甲之蜜糖,乙之砒霜。

无论你的情况如何,我希望可以给考虑加入或者正在进入软件领域的人提供一些不一样的视角。这并不是要吓退任何人,只是想让人们看到一些不常被关注的阴暗面。毕竟,让你意识到这些问题总比你完全不了解会好得多。