[译] 卓越开发者的10个习惯

Posted on:  at 

原文地址:https://newrelic.com/blog/nerd-life/successful-software-developers-habits
原文作者:Kevin Casey
原文发布于:2017年4月15日

想象一下,你正在比较两个软件开发人员的简历:Dev A 与 Dev B。两位候选人的背景和技能几乎完全相同:编程语言、框架、平台、方法论、行业等等。在纸面上,他们几乎是同一人。然而,如果可以通过一些特征表明(无论从任何方面来看),表明 Dev A 在他的职业生涯中可能会比 Dev B 更成功。这会是哪些特征呢?

事实证明,技术技能和经验只能让你走得那么远。卓越开发者还培养了关键的行为特征和心态,使他们脱颖而出。我们询问了多个软件专家,了解到能够将卓越开发者和其他人进行区分的习惯和特点。他们列出或预测了这 10 个习惯:

1. 你编写整洁、可重用的代码,更易于阅读和测试。

有许多方法可以编写整洁的代码,更易于重用、阅读和测试,但无论使用哪种方法,这都是高质量软件开发的一个越来越关键的特征。位于英国的 Enigma Digital 的软件开发经理 Andrew Magee 为我们提供了这样的出发点:为每个函数分配一个唯一的目的

“当你开始编码时,通常是从一行接着一行地编写代码开始,进而使这个函数越来越大”。Magee 说道。一开始你可能会觉得这样更简单,但这会产生几个问题:你的代码变得更难读、更难重用和更难测试。 “一个函数应该只做一件事。如果它做了多于一件事,就不够聚焦。”

Magee 还建议为变量和函数分配清晰、有意义的名称——如果你遵循一个函数一个目的的经验法则,这会更容易实现。 “作为开发人员,你花在阅读代码上的时间比写代码的时间更多”,Magee 指出。“重要的是,在几周后回到开发时,你能够快速、轻松地理解它的意图。”

2. 理解你的代码如何推动整体业务。

有很多开发者有能力为公司开发的新的移动应用程序。但是能够在开发前就理解到,公司为什么要开发移动应用程序的大局观的人却很少。优秀的开发人员“广泛了解公司在业务层面上的运作方式,使用业务语言进行沟通,并掌握将业务语言转换为技术语言,反之亦然”。Ask Applications 的软件工程副总裁 Todd Stephan 这样说。同样,Stephan 补充说:优秀的开发人员可以用业务术语讲述技术的价值,换句话说,用公司除开发以外其他人,包括高管们能够理解的术语来表达。

MarketGoo 的 CTO Jose Miguel Pérez 在这一点上也持有类似的观点:“他们公司寻求这种开发者:对项目的目标、目标和影响有广泛的理解,不只局限在作为一个开发者需要了解的范围”。

这里有一个能更好地了解代码对公司整体贡献的关键步骤:专注于你用户或客户。 “成功的开发人员对他们交付的东西负责——不只是指存储库,还包含了对用户的交付”、“顶尖的开发人员会随身携带寻呼机并保持值班状态。”

3. 倾听比你说的更重要——或者说你要先倾听,然后再表达

Evus Technologies 的开发主管 Christopher Mendy 表示:“如果你在一个和其他开发人员共事的办公室里,先倾听,然后再说话。这是学习的最快捷方式”。

这需要谦卑,特别是如果你认为自己是房间里最聪明的人。MarketGoo 的 Perez 补充说:优秀的开发人员具有“承认自己不懂的能力和意愿”。此外,他建议不要成为那种只会说一堆技术术语而不承认自己可能还不知道特定问题答案的程序员。

4. 你是有纪律性的

除非天赋异常出众,否则它并不是一切。实际上,天赋或技能只是成功公式的一部分。Badger Maps 的 CTO Gady Pitaru 表示:“纪律是另一部分”。“一位拥有优秀技能的软件工程师如果没有纪律,就像一位没有地图的老练水手:擅长驾驶船只,但找不到海岸。”

Pitaru 将一个有纪律的软件工程师描述为:

  1. 不会为了速度而牺牲质量。除非是必须时,他们意识到他们正在创造技术债务,并努力在未来偿还。
  2. 接受开发流程,因为他们认识到这些开发流程是为了帮助开发成功而设立的。例如:“他们在代码审查期间完充分参与,并鼓励有建设性的冲刺回顾”。
  3. 了解专注于开发工作的价值:“他们想办法确保自己能做得到,例如使用番茄工作法、阻止日程提醒或戴上耳机等”。

5. 你能深深的专注于正确的事情

New Relic 的 Ruby Agent 软件工程师 Katherine Wu 分享了一种特定形式的规律,标志着高度成功的开发人员:他们有能力专注于特定项目的共同目标,而不会被一些“很容易得到”的想法或不切实际的幻想分心,这些想法实际上并没有使你更接近目标。

“我认为沉迷于某个特定技术实现的细节或边缘情况是一种普遍的习惯”,New Relic 的 Ruby Agent 软件工程师 Katherine Wu 说。她将这种心态描述为“如果我们能实现 X、Y 和 Z 就好了”,的思考方式。然而实际项目的目标是“A、B 和 C”。对于工程师来说,这是一种自然的思考过程,但有时需要加以控制。“当你稍微退后一点,你可能会意识到你正在为某些不是所有人都想要实现的宏伟目标而付出很大的努力”。

Wu 表示,有时向前看是好的,只要你能够重新聚焦于:你知道你需要完成的任务是更加重要的,相对于你以为你可能需要完成的任务。这其中一部分是确保你与团队的其他成员处于同一频率。正如 New Relic 的 Smith 所指出的那样,“成功的开发人员明白,创新是一项团队运动”。

6. 你对于解决问题有坚持不懈的态度

“要有坚定的信念——某些问题非常困难”,Mendy 指出。“只要有足够的时间和研究,总会找到解决方案,能找到一个难题的解决方案是最棒的感觉”。

7. 你能在互联网上得到陌生人的帮助

不要将坚持与骄傲混淆。卓越的开发者不会因为自己的自尊心,而将编程中问题转化成不必要的生产力损耗,特别是当解决方案可能可以在网上找到时。有时,寻求帮助——是的,谷歌也算——是解决问题的最有效的第一步。

“学会如何用谷歌搜索”,Mendy 建议道。“你将遇到的几乎所有计算机编程问题都已经有了解决方案。在某个地方,一定有人遇到了你正在遇到的同样的问题,并且他们通常会在网上发布他们的解决方案”。

不要认为在网上寻求帮助只意味着从 Stack Overflow 中复制和粘贴代码。New Relic 的 Tori Wieldt 指出,优秀的开发人员会花时间了解他们在网上找到的解决方案的 What,Why 和 How。她建议:“研究代码的作用以及它如何解决问题,而不是单纯的复制和粘贴;如果没有这个研究透这个解决方案的背景知识,它可能还会回来找你麻烦”。

8. 你需要超越技能,才能达到专业水平,但不意味你已经精通它们

当 Ask 正在招聘开发人才时,Stephan 会寻找候选人之前经验中的专业知识,这些经验不必与他试图应聘的工作直接相关。“如果一个人之前很快地建立了专业知识,那么有理由相信这个人能够在其他技能和技术方面再次做到这一点”,他说。

Badger Maps 的 Pitaru 解释了技能和精通之间的区别:“一名拥有优秀技能的软件工程师可以编写 Django 数据库查询,但一名经验丰富的软件工程师将知道如何最有效地编写该查询,以便一行代码可以扩展”。

区分技能和精通。后者意味着你没有任何需要学习的东西。“不要认为你会精通所有事情”,Mendy 说。“现在的开发只是不断地持续学习”。

9. 对新事物保持开放态度

另一个 Mendy 所描述的持续学习的前提条件:对新事物持开放态度,并在需要时接受并采纳它们。

“高度成功的软件工程师不断学习行业中的新趋势,并将其直接应用于他们的工作中”,Pitaru 说。“成功的软件工程师知道如何过滤和筛选那些有助于他们继续做到最好和成长的新语言、框架和方法论。可以说,对于一个成功的软件工程师来说,最重要的技能是知道如何获取新的技能”。

正如 Pitaru 所说,学习不会随着计算机科学学位或编码训练营的完成、以及听到“你被雇用了!”这些话而停止(如果你担心这正在发生,那么可能是时候重启了)。

“保持开放的心态。最糟糕的事情就是只关注一种语言或工具”,Mendy 建议。毕竟,“如果你只有一把锤子,那么所有东西看起来都像钉子”。

10. 勇于走出舒适圈

New Relic 的 Wu 表示,她对持续教育和技能发展的方法的不断完善是部分受到了 Cal Newport 的书《深度工作》的启发。其中的关键引语是:真正的技能发展需要“能够深入探究一个主题,并面对其中困难的部分——并坚持度过那些沮丧的时刻,以便你真正探索,真正理解眼前的事物”。

这可能因为各种各样的原因而变得困难,包括所有那些常常让我们感觉很忙碌但不一定有助于 Wu 所描述的深度思考的事情,比如电子邮件、Slack、会议等等。例如,Wu 注意到她在努力理解复杂话题时遇到了一些困难的信号:她的注意力开始漂移。 “我可能正在阅读一篇技术博客文章,在某个想法的段落中间,甚至在某个句子的中间,我的大脑像是背叛了我——我想知道 Facebook 上有什么?”

Wu 从 Newport 的书中获得的经验是将所学知识运用到实践中。为了实现这个目标,她会设置专注的时间段,例如两小时,并且避免分散注意力的干扰。她将此比作冥想练习,因为专注于某个目标需要刻意地将注意力引回任务本身。她说:“当我注意力开始游离时,我会注意到这一点并轻轻地将注意力重新引回到手头的任务上。这样我就可以努力攻克难题,找出哪些部分我不理解,然后想办法找到答案。我需要进行实验吗?需要编写一个 demo 项目来实验它吗?需要找一个专家为我解释吗?这需要对困难的话题有意识地进行攻克”。

要明确的是,关闭电子邮件几个小时并不会使您成为更好的开发人员——它只是一种集中于真正的进展和改进的机制。她说,要变得更好,“你必须在困难的事情上工作。即使你没有干扰,而且得到了很多编码时间,如果你只是一遍又一遍地构建相同的简单应用程序,那并不一定会扩展你技能的边界。如果你不刻意地扩展你的技能边界,你可能不会尝试以帮助你作为技术贡献者真正成长的方向来构建技能。”

如果感兴趣的话,可以阅读《成为更棒的开发者的 8 个途径》