当前位置: 首页 > 科技观察

如何让你的程序员在工作中不感到无聊?

时间:2023-03-17 20:38:09 科技观察

作为一名程序员,我从来没有在同一家公司工作超过两年。每一份新工作都是一次伟大的职业转变,跳槽是这个行业的常态。但是我的前雇主对我的离开并不高兴,他们中的一些人很想留住我,但我厌倦了同样的工作,真的不想再留在同一家公司了。(免责声明:我很幸运生活在一个程序员工作供不应求的地方,所以换工作对我来说永远不是一个选择。)今天我是Enki的合伙人和CTO,我也是负责在公司建设工程师文化。我的部分工作是确保我们的程序员不会像以前那样感到无聊。在团队的帮助下,我们设计了一套帮助程序员对抗工作无聊的策略,并将这些策略应用到公司的实践中。这个方法到目前为止效果很好,所以我想和你分享一下。在Enki,我们的程序员很幸运能够一直从事具有挑战性的工作。我们有很多有趣的东西要编码,还有很多有趣的问题要解决。所以如何解决“无聊”对我们来说并不是很迫切。但并非所有工作一开始都是无聊的,无聊会随着时间的推移而累积,并可能在最糟糕的时刻突然爆发。这就是为什么我们从公司成立之初就着手防止这类问题,并依靠建立一种企业文化来帮助我们的程序员克服工作中的无聊(衷心希望这件事能奏效)。让我们总结一下为什么程序员在工作中感到无聊以及如何避免这些情况。1.项目时间太长,程序员因学不到新东西而感到厌烦最常见也是最明显的原因就是一个开发项目拖得太久。在我的第一份工作中,我充分体验了长时间项目的无聊。我的团队想要做的是通过一个通用的API来处理财务数据。起初这项工作真的很令人兴奋,因为数据复杂、庞大且具有挑战性。通过这项工作,我学会了如何高效地分析数据和设计API接口。但一年后,我们仍在使用相同的技术对同一个数据库进行操作。我已经成为这个针对性很强的领域的专家,在这份工作中没有什么新东西需要我学习。我不可能去别的团队或者项目,因为公司觉得让我留在这个项目最合适。我明白这个项目中现有的数据和技术已经被用得太好了,所以不可能被取代。我无法说服公司改变他们正在使用的技术只是为了让项目团队成员学习新事物。我向公司表达了自己的厌烦和沮丧,但无济于事,只好换一份前途光明的新工作。如何阻止无聊的发生?在我们的团队中,我们尽量避免让任何一个程序员接触相同的代码、产品或数据库超过三个月。设定三个月的时间框架可能有些武断,对于大公司来说可能太短了。但我们相信让程序员在项目之间快速轮换是正确的。为了实现这个设计,我们在公司提倡全栈文化,团队中的每个程序员都可以承担任何部分的编码工作(或者可以很快学会操作)。防止无聊的另一种方法是就该主题进行公开和诚实的讨论。我们每周进行一次直接、公开的一对一对话。如果一个程序员在没有挑战的工作中变得过于自在,或者在这个领域变得过于专业,那么是时候把他转到另一个项目了。2.维护代码的遗留问题太无聊了。你可以清楚的看出项目什么时候进入维护模式,不管是正规渠道还是其他渠道,只要你的程序员90%的时间都花在修复BUG上,而不是开发新功能,就说明他们进入了维护模式代码维护期。有人会说维护代码是一项不可避免的工作,旧代码需要不断的支持。开发软件就像盖房子,房子总是需要维护和翻新,不是吗?它是,它不是。这项工作确实需要有人来做,但问题往往出在态度上。我以前的一位职场前辈对维护代码有强烈的抵触情绪。他想当然地认为,维护代码什么的都没有,等软件开发出来了,让他们自己跑。生活糟透了,你必须习惯它。如何缓解这种阻力?项目开发工作陷入枯燥的维护模式有时是由于错误的技术决策和缺乏勇气的结合。与需要额外时间维护的具有复杂依赖关系的大型单体代码库相比,架构良好的微服务基础架构更加灵活。当微服务架构存在缺陷时,您可以立即采取措施修复它。您可以使用不同的编程语言或技术重写代码。通过这种方式,您可以学习新事物,而不仅仅是修补遗留代码。如果你的架构不允许你从头再来,你可以采取其他措施来改进它,并在这个过程中学习一些DevOps技能(译者注:DevOps是Development和Operations的两个部分)。这两个领域的合并,可以让原本繁琐的开发和运维工作的交接过程顺畅无阻)。有很多方法可以解决程序员维护代码的无聊问题,公司的微服务策略只是其中一种可能的方法。还有其他公司构建智能工具,使代码维护更高效、更有趣。一个极端的例子是Facebook使用其庞大的PHP代码库所做的事情。Facebook开发了自己的编译器和Facebook风格的语言(Hack),这使得他们的PHP代码库不仅更易于维护,还提高了程序员的工作体验。我想这种方法并不能完全解决代码维护的遗留问题,但它确实让这项工作听起来更有趣。3.作品只是复制/粘贴。程序员的工作就是不停地写代码。在我以前的工作中,我曾经产生过很多没有意义的代码。例如,我曾经编写用于数据集成的Groovy和Python脚本。数据相当复杂,包含许多不一致的数据库对象集合,因此无法实现自动化。鉴于我必须编写大量代码,我的同事们认为我一定从中学到了很多东西。但是不,为什么会这样?因为50%的代码(这有点夸张!)我是直接从StackOverflow复制粘贴过来的。另外40%的代码是从其他脚本中复制的,一些来自我的同事,还有一些是我以前编写的。工作变成了一种重复劳动,没有创造力和学习成长在其中。我们怎样才能避免这种情况呢?作为一个团队,我们都花时间了解其他团队成员正在编写什么类型的代码。我们在代码审查、同步和工作回顾期间这样做。如果一个人花了一个星期只写了一些没有创造性的代码,我们就会试图弄清楚他身上发生了什么。有时问题的根源来自您使用的技术。我们可能使用了太多的脚本,或者做了很多不应该做的配置工作。如果是这种情况,我们将添加更多自动化。有时我们出于某种原因复制和粘贴代码,在这种情况下,每个人都会分担必须完成的无聊工作。4.只用内部工具太枯燥了。作为一名程序员,我们喜欢构建一个自定义的内部工具来解决一些特定的问题,因为创建它是一件令人兴奋的事情。此外,构建自定义解决方案通常比找到现有解决方案并重用它更好。但是,与学习一种流行的开源技术相比,学习一种内部专有工具的乐趣只有前者的十分之一。这到底是为什么呢?因为它不是你可以和朋友谈论的东西,你不能吹嘘它,你不会在HackerNews上看到它,你不能在黑客马拉松中使用它,当然你也不能在side中使用它秘密开发的项目。许多公司陷入了构建内部工具的陷阱,因为随之而来的是程序员的无聊。换句话说:你为解决一个短期问题而开发的内部工具会产生更多具有深远影响的长期问题。我在上一份工作中亲身经历过这个问题。我仅限于使用公司自己的DSL语言进行大规模数据集成,一直在学习完全不同的SQL语言。我更希望能够使用像Spark这样开放度较低的语言。如果没有内部工具,我的工作量会增加10倍,编写的代码会好2倍,工作效率会提高5倍(不要担心倍数的数学问题,你只需要感受我的感受!)。什么样的企业文化可以避免这种困境?我们公司不存在对开源技术的偏见。如果可以重新利用相关的开源技术,我们当然很乐意这样做。我们不会回避尖端技术。一旦开源技术成熟到可以取代我们现在的专用语言,我们就会立即放弃原来定制化的代码,拥抱开源技术。当我们自己开发的自定义代码变得足够通用时,我们将其开源。这样做偶尔会出错。比如我们以前用的agenda。js一段时间来安排我们的后端工作,因为感觉这项技术是创新和令人兴奋的。但不久它就变得太复杂了,我们不得不回到更老但更可靠的技术。尽管如此,我们仍然不后悔尝试,因为那也是一次宝贵的学习经历。5.如果你不知道为什么要写代码,那你一定是厌倦了你的工作。人性化管理不善也是程序员厌倦工作的一个常见原因。更具体地说:程序员自上而下的专制管理使他们产生抵触情绪。善意的管理者常常在不知情的情况下使用这种专制方式。尤其是当一个开发项目进行得不太顺利,或者临近截止日期时,这种管理方式更为常见。在巨大的项目压力下,管理者自然会缩短团队讨论时间,减少头脑风暴,直接命令程序员写代码,不解释为什么这样做,也不接受任何争论。管理者之所以这样做,通常是为了节省时间,尽快完成工作。这种管理方式如果能看得懂,总不会让人厌烦;事实上,有些人很容易接受简单直接地告诉他们该做什么。当然,这也是建立在你说话的语气能被对方接受的基础上的。使用这种专制管理方法也有隐性成本。通常程序员需要有一个内在的思维过程,在他们确切地知道要编写什么代码之前转换智力和创造力。换句话说,如果你不让他想出关键,而只是命令他盲目编码,他就会变成一只会写代码但不会思考的猿猴。更重要的是,你应该鼓励程序员问“为什么”,这样他们才能更多地投入到他们所做的工作中。除非你现在做的是剑拔弩张的极端事情,或者临时补丁,否则你应该跟程序员解释清楚。如果一个程序员不再关心与项目相关的重要决策,不再思考这些决策背后的逻辑,那么他就应该做好离开的准备了。如何防止这个问题?解决这个问题最需要的是在企业文化中建立公开讨论问题的机制。留出定期讨论时间,让整个团队可以讨论下一步该做什么以及如何计划。为了保持这种公开讨论的文化,每个人都需要警惕专制管理。尤其是当团队遇到困难的时候(或者临近deadline的时候),团队成员更需要大声的表达自己的意见,管理者更需要更仔细的倾听大家的声音。6.日常工作难免会感到无聊。还有一点不得不提的是:长期在封闭的工作环境中工作,肯定会扼杀人们对生活乐趣的感知。这不仅适用于技术行业工作者或程序员职位,也适用于其他行业。这一款几乎适用于任何后台操作岗位。每天在同一个办公室,看到同样一群人做着同样的工作,没有不同文化的碰撞。即使在快速发展的企业环境中,即使一切都客观地“好”,人们也会觉得有权享受一些乐趣,并对不太好的事情感到沮丧。你如何克服日常工作中滋生的无聊?解决这个问题的关键是创造尽可能多的多样性:招募来自不同背景和不同国家的人(比如我们目前的6名成员团队分别来自英国、法国、俄罗斯和希腊)。如果你每天看到同一群人给你不同的文化冲击,上班肯定会更有趣。同时,我们积极创造走出正常工作环境的机会。比如,我们会一起去参加一些行业聚会,编程马拉松等。我们还一起创造副业,共同开发我们喜爱的开源工具。有时我们也会帮助其他团队完成较少的技术工作(包括招聘、营销和分销)。这并不是因为我们都擅长这些工作,只是想改变我们的日常工作。我们也会组织一些团队活动(比如一起看一部秘制电影),每周也有固定的时间进行团队活动,不需要预设主题。在这段独立的活动时间里,有时我们会一起专攻技术研究,有时我们会集思广益,有时我们只是聚在一起玩LOL,或者约好一起去泡吧。这种自由活动的美妙之处在于,当我们坐下来讨论要做什么时,不到一分钟我们就不知道该做什么了。在我们的生活中加入这个小小的未知成为我们对抗无聊的最后手段。与其他对抗无聊的方法一样,这不是一个完美的解决方案。我们要做的就是在原有的基础上不断调整,找出一些新的花样,并在与无聊的战斗中不断运用。