Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >编程是枯燥的,除非……

编程是枯燥的,除非……

作者头像
CDA数据分析师
发布于 2018-02-26 08:33:04
发布于 2018-02-26 08:33:04
7780
举报
文章被收录于专栏:CDA数据分析师CDA数据分析师

作者 码农网 – 小峰

译文链接:http://www.codeceo.com/article/coding-is-boring-unless.html

原文链接:https://medium.com/m/global-identity?redirectUrl=https://blog.enki.com/coding-is-boring-unless-4e496720d664

作为一个开发者,我干同一份工作的时间不会超过两年。

每一份新工作都是一次职业的飞跃,而且在我们这个行业中,高频跳槽本来就很常见。但是我前任,前前任,前前前任,前前前…任雇主对于我的辞职并不开心。有些甚至试图挽留我,但是我已经厌倦了,我真心无法继续留下来了。

(免责声明:我很幸运地生活在程序员供不应求的地方,不过后来我发现换工作并不总是一个很好的选择!)。

我现在是Enki的联合创始人和CTO。我负责工程文化。我的部分工作是要确保我们的开发人员永远不会像我过去那样觉得工作无聊枯燥。

在我的团队的共同努力下,我们制定了防止程序员感到无聊枯燥的策略,并应用到公司里。由于这一策略到目前为止一直运作良好,所以在这里我想和大家一起分享。

在Enki公司,我们可以放肆地冲锋具有挑战性的问题。为很多有趣的事情写代码,解决大量有趣的谜题。因此,“无聊”并不是一个迫切的问题。甚至刚开始的时候,你完全找不到它的踪迹。但是,随着时间的流逝,无聊会像藤蔓一样渐渐爬满大树,然后在最糟糕的时刻击垮你。

这就是为什么我们要建立一种拯救无聊的文化来尽早解决这个问题的原因。

时间太长;学不到东西

开发人员感到无聊枯燥最常见和最明显的原因是,项目的持续时间过长。

我在我第一份工作中就亲身经历了这种体验。我们团队的任务是通过一个便捷API来准备和提供财务数据。一开始因为数据的复杂性和规模,令我非常兴奋。同时我从中也学会了如何高性能地分析数据和API设计。但是一年以后,我们依然工作于完全相同的数据集,用着完全相同的技术。我只是成为了某个特定方面的“专才”,也没有什么可以学习的新内容。

我无法改变团队或项目,因为对于公司而言,这种重复性的枯燥的任务是有意义的。并且由于我熟知数据和技术而无法换到其他岗位。我没有理由只是为了学习新的东西而去更换现有的技术。在我表明了我的枯燥和沮丧之后,因为问题依然没有解决,所以我选择了跳槽。

如何预防无聊和枯燥感?

在我们的团队中,我们尝试着不让任何人从事相同的代码、产品和数据集超过三个月。三个月的时间是我们任意定的,或许对于规模较大的公司而言,显得太短了点。但是我们主张快速转换。

为了做到这一点,我们提出了一个全栈文化。我们每一个开发人员都能够工作于(或者可以很快学会)代码库的任何部分。

另一个预防枯燥的方法是经常性地讨论。我们每个星期都有直接、开放、一对一的讨论。如果开发人员开始觉得过于舒服或已经熟能生巧了,那么就到了转换工作的时候。

维护遗留代码很无聊

当项目处于维护模式,即开发人员90%的时间都花在了修复bug,而不是开发新功能的时候,你可以报告给我们——正式或非正式的方式都可。

有人会说,维护是不可避免的。旧代码需要支持。建造软件就像盖房子。你需要维护的老房子,并时常翻新。是这样的吗?

是的,但又不是。问题的关键是态度。

我曾经有一个导师,他对此抱着一种玩世不恭的心态。他将无为当作理所当然。他总是说,软件开发工作就是这样的;假如生活强奸了你,那就躺着享受吧。

如何避免呢?

维护模式有时是糟糕的技术决策加之缺乏勇气才导致的结果。

大型,整体式的,依赖关系复杂的代码库往往需要额外的维护工作。与此相反的是,架构良好的微服务基础结构就显得较为灵活。当微服务出现故障的时候,你可以更换它。你可以使用不同的语言或技术从头开始重写。这样你就可以学到新的东西,而不是简单地修补旧的代码。如果你的架构还不允许这么做,那么你需要采取步骤来改进它,并在此过程中学习一些开发技能。

微服务策略只是解决“枯燥”维护问题的方法中的一个。还有一个措施是构建智能工具,使维护变得更加高效和乐趣。这方面的一个极端例子就是,Facebook对他们那个庞大的PHP代码库做的事情。他们在熟练掌握PHP的基础上构建了自己的编译器和自己的类型语言(Hack),既方便维护,又提高了开发体验。虽然我怀疑Facebook依然没有完全“解决”遗留问题,但听上去它让工作变得更有趣了。

复制/粘贴很无聊

还有就是编码,编码,还是编码。

在我以前的一些工作中,我写了很多收效甚微的代码。例如,我曾为了数据整合写过Groovy和Python脚本。数据很复杂,有许多不一致的模式,这使得大多数地方无法做到自动化。因此,我不得不写大量的代码,而我的同事因此认为我学到了很多东西。

但其实我并没有学到很多。为什么?

因为50%(没有计算过,纯粹是夸张手法!)的代码是从Stack Overflow直接复制/粘贴来的。还有40%则复制/粘贴自其他脚本。无论是我同事的脚本,还是我的,都是如此。很多很多代码都是重复性的。很少涉及创造和学习。

那么对此我们又是怎么做的呢?

作为一个团队,我们要关注其他人写的代码类型。我们会审查,同步和回顾代码。如果发现有人一个星期都没有生产创造性的代码,那我们就会去查看原因。

有时,问题的根源在于技术。我们可能比我们应该的做了更多的脚本和配置工作。在这种情况下,我们会增加自动化。不过,很多时候,是因为我们基于某种原因做了太多的复制/粘贴工作。在这种情况下,我们会共同承担这个枯燥的工作以便于尽快完成。

内部工具通常很没意思

作为开发人员,我们希望创建定制的内部工具来解决具体问题,因为创造新事物总是令人兴奋不已。此外,打造定制的解决方案常常比重复利用现有的解决方案更清洁。但学习专有工具要比学习流行的开源技术无趣多了。

为什么?

因为你不能跟你的朋友交流专有工具;它成不了你吹嘘的资本;你不能在Hacker News上看到它的身影;你不能在编程马拉松中使用它;它在你秘密的业余项目中也毫无用武之地。

但是,很多企业陷入创造的陷阱——他们所创造的东西反而会带来更多的烦恼。换句话说:他们解决了一个短期的挫折,从长期来看却会导致更多的挫折。

我对此深有体会。在我曾经的一份工作中,对于大规模数据集成,我被约束必须使用公司制造的DSL。在我看来,它就是另一种类似于SQL的术语(夸张手法)。我更喜欢使用和学习低级的开放式技术,例如Spark。如果没有这种限制的话,我的效率能高5倍都不止(请不要纠结这个数字,领会精神!)。

什么样的文化可以预防这种情况呢?

我们应该尽量偏向于开源技术。勇于面对最前沿的技术。毫不留情地抛弃自定义代码,只要有开源技术成熟到足以取代这些自定义代码。而当我们自己编写的代码变得够格通用的时候,开放源码。

偶尔我们也会犯错。例如,曾经有一段时间我们使用agenda.js库来安排我们的后端工作,因为它看上去既现代化又鼓舞人心。但是最后,它反而让事情变复杂了,所以我们只能回头用一个旧的更可靠的技术(略显古老的cron!)。尽管如此,我们也没有后悔用它试验,因为这是一个宝贵的学习经验。

做一只程序猿很无聊

令开发者无聊的另一个常见原因是糟糕的人力管理。更具体地讲是从上而下,独裁地管理开发人员。

自认为目标远大的主管有时候会使用这种管理风格而不自知。特别是当一个项目不会进展良好,或截止期限将至的时候。在压力的作用下,独裁统治会成为一种自然反射——讨论时“一言堂”,不接受集思广益,没有经过辩证和解释就直接告诉大家去做什么。目的就是为了节省时间,尽快完成工作。

不过很多被管理的员工也不一定会生气:事实上,有些人还很享受直接被告知要做什么。当然,告知的方式得合适。

不过,这里还有一个隐藏成本。

你在开发人员写代码之前就准确告知了他们该如何编码,将这个智力和创造性的过程变成了一个机械的过程:换句话说,就是将开发人员训练成了程序猿。

除非是黑客在攻克边界情况,或是,程序需要做一个临时补丁,否则参与的开发人员总是希望能了解“为什么”他们要采取这种做事方式而不是另一种。当一个开发人员不再关心重大决策以及决策背后的原因的时候,也是他准备换工作的时候。

如何避免这种情况?

鼓励公开讨论的文化。一个用于讨论,制定战略和计划的定期论坛是一个团队所必须的。为了保持这样的文化,每个团队成员都应该保持警惕。

特别是当举步维艰的时期(或最后期限正在逼近的时候),学生需要说出他们的心声,而导师需要仔细聆听。

做一天和尚撞一天钟很无聊

最后但并非最不重要的一个原因:一个封闭的环境中会成为乐趣的绝对杀手。

这在开发领域或高科技产业并不罕见。也适用于几乎任何办公室工作。每天都在同一间办公室,面对同样的人,沐浴同样的文化,做同样的工作……即使是在一个高速发展的环境下,即使所有情况客观都是“好”的,大家也会对这些好的地方习以为常,然后开始对那些不那么好的部分闷闷不乐耿耿于怀。

那么我们该怎么战胜它呢?

关键因素是多样性:雇用不同背景和不同来源的人(例如目前我们团队的6个人就来自于英国,法国,俄罗斯和希腊4个不同国家)。如果团队中的每一个人都能会我们的文化带来新鲜要素,那么即使每天面对同样的人也会变得有趣,也会变得不那么难以忍受。

同时,我们努力创造走出去的机会。

比如,我们会去公共场合聚会,会一起去参加编程马拉松。我们都有自己业余项目,并致力于最喜欢的开源工具。我们甚至时不时地会帮助其他团队承担技术含量不那么高的工作(如招聘,营销,分销…)。不是因为我们擅长这些,而是为了能有一个变化。

我们还组织团队搞活动(例如Secret Cinema),每周举办一次不预定日程的“enkithon”活动。有时候,我们会一起过把黑客的瘾。有时候,我们会头脑风暴一个新点子。有时候,我们会沉溺于玩英雄联盟。甚至我们还一起去泡吧。不到最后一秒我们自己也不知道要去做什么,直到我们共同决定。

我们对抗无聊和枯燥的方法或许还不成熟,还有点混乱。但就像食谱一样,每一份食谱都不能自称是绝对完美的。调整用量,更换配料,反复练习才能精益求精。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CDA数据分析师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
虚构问题,低质量软件的根源
原文链接:https://cerebralab.com/Imaginary_Problems_Are_the_Root_of_Bad_Software 网友评论:https://news.ycomb
明明如月学长
2023/07/10
2270
虚构问题,低质量软件的根源
Java程序员常用的10大构建工具
令我惊讶的是,有些人觉得编程并不令人兴奋——只将它当作是一份枯燥的工作。不过,虽然可能的确有很多无聊的编程工作,但这并不意味着你不得不接受这些工作中的一个。程序员有各种各样的机会,运用他们的技能去做一些有趣的事情,特别是如果他们懂Java的话。 Java也许是时下雇主中最流行的语言,这意味着有很多很多不同的工作可供选择。只要稍微用心找一找,你就会发现一个能让你的生活快乐起来,让你愿意一大清早开开心心去上班的工作。当然,青菜萝卜各有所爱,这个人的感兴趣,可能是另一个人的不以为然。所以下面让我们来看看这10个出
用户1667431
2018/04/18
7900
Java程序员常用的10大构建工具
程序员如何提升自己的价值
程序员如何提升自己的价值 不知道你有没有想过什么样的特质能够成就程序员的伟大?什么样的特质对程序员就职的公司最有价值? 尽管可以列举出很多很多条,但是我相信这一条绝对是雇主最为看重的,并且拥有该点特质能够提升你作为一名软件开发人员的价值。 那么,这条到底是什么特质呢? 如果你也是给别人打工的,那么有一件事是你必须铭记于心的。你工作的主要目的是为你的雇主创造价值。 虽然听上去很简单,但却是大多数开发人员的盲点。回想一下,你之所以发布新框架,是不是经常是因为这是一款新颖的,性感的JavaScript MVC框
用户1289394
2018/02/26
5740
技术工作:如何识别和解决团队中的倦怠
鉴于开发人员如今承受的压力,令人震惊的是倦怠及其危险却鲜有人讨论。以下是一些需要留意的迹象。
云云众生s
2024/03/28
1380
一个残酷现实的问题:程序员除了高薪,你还有什么理由坚持做下去?
科技公司一直都在努力弄清楚如何才能让员工愉快地工作。然而,这并不是一件容易的事。根据我自己的经历,我接触的技术人员平均在一家公司供职的时长为18个月。每当我询问他们的离职原因时,得到的答案通常都是那么几个。
一墨编程学习
2018/10/23
7160
如何让你的程序员不要厌倦工作?
 作为一个程序员,我从来没有在同一家公司工作超过两年。每换一份新工作都是一次很好的职业变动,在这个行业里跳槽如同家常便饭。但是我的前东家们对我的离去并不开心,他们其中一些人花了很大力气想要挽留我,但是我已经对一成不变的工作感到厌倦了,真的不想在同一家公司再待下去。 免责声明:我很幸运地生活在一个程序员工作岗位供大于求的地方,所以对我来说在换工作永远不止一个选择。   如今我成为了 Enki 公司的合伙人与 CTO,同时我还要负责在公司里面打造工程师文化。我工作内容的一部分就是确保我们的程序员不要对工作感到厌
春哥大魔王
2018/04/16
1.1K0
如何让你的程序员不要厌倦工作?
所以,为什么优秀的程序员会不断离去?
聘请一大帮初级程序员是一回事,而如何留下这些初级程序员的导师则是另外一回事。 无论是大学生还是正在找工作的有经验程序员,都一直知道要不断学习编码。尽管来自行业内部有强烈的反对者和要求适度减少编程培训学校的呼声,但大量培养初级开发者的学校还是充斥着就业市场。 你可能会认为这对技术公司来说是好消息,因为他们现在能挑选新的人才了。但在许多情况下,这实际上对于培养和发展那些能真正支持新员工、指导新手以及能解决棘手问题的人,都是不容易的。 很多时候,科技行业通常的额外津贴对留住那些最顶尖、最有经验的人才来说并不是那么
CSDN技术头条
2018/02/08
6770
作为软件工程师,给年轻时的自己的建议(上)
如果穿越到刚从业时,我会给年轻时的自己一个建议——“为你想要实现的目标设定各种各样的目标。只要有正确的计划和愿景,任何目标都不会太大。”
陈哥聊测试
2022/05/20
2840
我是如何欺骗大脑,沉迷技术的?
是否想过,编码也能像玩游戏或刷抖音一样上瘾、充满乐趣?如果我告诉你,有一种方法可以让你的大脑像渴望游戏或社交媒体一样渴望编码,你会怎么做?
JavaEdge
2024/12/27
2150
我是如何欺骗大脑,沉迷技术的?
我(作为一名开发者)所犯过的错误
我2006年开始工作,至今已经10年。10年是个里程碑,我开始回顾自己曾经犯过的错误,以及我希望从同行那里得到什么类型的忠告。一切都在快速改变,10年了,我不能确定这些秘诀是否还有用。 不管您是新人还
非著名程序员
2018/02/09
7010
我(作为一名开发者)所犯过的错误
DevOps 在施耐德:众人参与其中的变革之旅
作者 | Amanda Heintz 译者 | 马可薇 策划 | 丁晓昀 为什么施耐德决定走向 DevOps 要想真正认识到 DevOps 在施耐德的发展,我们需要先了解为什么施耐德会对 DevOps 有需求。 施耐德(Schneider)是北美一家大型卡车运输和物流公司。和许多现代企业一样,施耐德逐渐将其业务转向电子化,其应用程序的开发、部署及管理都是维持公司业务运转的重要资产。 在应用 DevOps 之前,每个基础设施和应用程序都是零散的孤岛。或许你会对此感同身受,将所有的服务器、应用程序
深度学习与Python
2023/03/29
1980
DevOps 在施耐德:众人参与其中的变革之旅
40岁+,你还有编程吗?
美国劳动力的中值年龄是42岁,而StackOverflow的一项有关年龄的调查表明,40岁之后的开发人员只占开发人员总数的13%。那么其他人到哪里去了?他们被解雇了或者上升到管理岗位了吗?软件开发对于过了40岁的人来说,是不是就意味着终结? 本文罗列了10位年龄超过40岁的老程序员们的故事,他们都是顶级的软件开发者,拒绝从事管理岗位,仍然活跃在开发一线,将编程作为生活收入的主要来源。本文内容来自Belisoft博客,并已获得作者的翻译授权,查看原文SOFTWARE DEVELOPERS AFTER 40,
前朝楚水
2018/04/03
1.5K0
40岁+,你还有编程吗?
每个自学成才的程序员都应该避免的5个错误
成为一名自学成才的程序员并不容易。每年都有许多人从大学毕业,获得计算机科学学位,而且他们中的大多数人都想成为优秀公司的开发人员。因此,作为一个自学成才的程序员,很难找到你的第一份工作。
ACM算法日常
2020/11/26
3480
程序员每天都在使用的6个惊讶的软技能
如果你想要开启作为web开发人员的职业生涯,那么你需要涉及的不仅仅是知道如何写代码。 有一些通用的软技能几乎可用于每个领域——包括技术行业。 成为软件开发人员涉及的不仅仅是编写代码。自从我开始我的第一份作为软件开发人员的工作之后,我很快就知道了这一点。如果你想要在这个领域茁壮成长的话,那么你需要学习“特定的技能系列”。 你看,每一家公司都有一个大局。除了写代码,你需要利用其他技能,使自己更有影响力,从而赚取更多的money。 在我作为一名开发人员的任职期间,我学会了除了编程之外还需要掌握的技能。下面我将分享
用户1289394
2018/02/28
7150
程序员每天都在使用的6个惊讶的软技能
对开发者而言,GitHub Profile可能是比简历更好的求职利器
这是一篇抒发个人意见的文章,内容来源于作者自己和其他挖掘程序员才能的招聘者的个人经验。
深度学习与Python
2020/09/29
1.2K0
对开发者而言,GitHub Profile可能是比简历更好的求职利器
【软件架构】2022 年软件行业的主要趋势
关键要点 混合工作将继续存在。要问的关键问题包括:什么是正确的平衡?我们需要多少时间亲自在一起?入职如何受到影响?另外,就时区而言,我们需要同步多少时间? 康威定律可能有 COVID 推论;能够有效开发松散耦合系统(通常具有微服务架构)的公司最好设置为远程工作并使用分布式方法。使微服务工作的是独立且高度一致的团队和人员。 2021 年,数据工程和 AI/ML 领域出现了三个有趣的发展:数据管理——摄取和清理数据;基础设施——基于云技术的数据工程平台和服务的兴起;和运维——“DataOps”的出现和DevO
架构师研究会
2022/03/14
5330
程序员眼中最有价值的10条开发经验
到现在,我已经做了超过 21 年开发,可以说,我生命中超过一半的时间都在编程,那既是我的职业,也成了我的习惯。
用户2781897
2021/09/02
2880
Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker
http://www.0x08.org/docs/hacker-howto.html#hacker-howto
一个会写诗的程序员
2018/08/20
3.3K0
Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker
程序员眼中最有价值的10条开发经验
作者 | Oliver Jumpertz 译者 | 平川 策划 | 万佳 本文最初发布于 Oliver Jumpertz 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。 到现在,我已经做了超过 21 年开发,可以说,我生命中超过一半的时间都在编程,那既是我的职业,也成了我的习惯。 下面是我在开发过程中学到的 10 条最有价值的经验。 1你永远不可能什么都知道 尤其是在开始的时候,我以为我什么都能学会,在开发生涯的大部分时间里,我都是这样想的。但是,每次我学了什么新东西,就打开了一个全新的世界
深度学习与Python
2023/04/01
2810
程序员眼中最有价值的10条开发经验
Ptython命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?
1989年,荷兰的一位叫Guido Van Rossum的宅男程序员觉得其他语言都不好用,于是花三个月创造了一种新的编程语言。
Python数据科学
2019/08/19
6100
Ptython命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?
推荐阅读
相关推荐
虚构问题,低质量软件的根源
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档