成功软件开发工程师的10个习惯
假设您正在比较两个软件开发人员的简历:Dev A和Dev b。这两个候选人拥有几乎相同的背景和技能:语言、框架、平台、方法、行业等等。从表面上看,他们实际上是同一个人。然而,有一些事情可以表明,无论以何种标准衡量,Dev A都可能比Dev B在职业生涯中取得更大的成功。这个怎么计算?
事实证明,技术技能和经验只能让你走这么远。高度成功的软件开发人员还会培养关键的行为特征和思维模式,使他们从人群中脱颖而出。我们询问了各种各样的软件专业人员,他们的习惯和特点将优秀的开发人员与其他开发人员区分开来。
他们提出了10个预测成功的习惯:
1.编写干净,可重用的代码,更易于阅读和测试。
有很多方法可以编写更容易重用,读取和测试的干净代码 - 但无论采用何种方法,它都是高质量软件开发的一个越来越重要的特性。总部位于英国的Enigma Digital的软件开发经理Andrew Magee提供了这个起点:为每个功能分配一个目的。
“当你开始编码时,通常会开始逐行编写代码,变成越来越大的函数,”Magee说。一开始看起来似乎更容易,但它会产生一些问题:您的代码变得难以阅读,难以重用,并且难以测试。“一个功能应该只做一件事,一件事。如果它不止一件事,它缺乏重点。“
Magee还建议为变量和函数分配清晰,有意义的名称 - 如果您遵循一个功能,一个目的经验法则,这应该更简单。“作为一名开发人员,你花费更多时间阅读代码而不是编写代码,”Magee指出。“重要的是,当你在编写代码后几周回到代码中时,你可以快速,轻松地理解它的意图。”
- 您了解代码如何帮助推动整个业务。
比如,有很多人可以为一家公司的新移动应用程序编写代码。只有很少一部分人具备了解该公司最初为何要开发移动应用程序所必需的大局观。Ask Applications软件工程副总裁托德?斯蒂芬(Todd Stephan)表示,优秀的开发人员“广泛了解公司在业务层面的运作方式,会说业务语言,并精通将业务语言转换为技术,反之亦然”。类似地,Stephan补充说,优秀的开发人员可以用商业术语来描述技术的价值——换句话说,用公司其他部分(包括C-suite)理解的术语。
MarketGoo的首席技术官何塞?米格尔?佩雷斯(Jose Miguel Perez)对优秀开发人员的这一特点也有类似的看法:“他们寻求对项目的目标、目标和影响的理解是广泛的,超越了他们在其中扮演的角色。”
要更好地理解代码对全局的贡献,关键的一步是:关注用户或客户。“成功的开发人员对他们交付的东西负责——不仅是对存储库,而且是对用户,”New Relic开发人员的倡导者Clay Smith说。“忍者开发者带着寻呼机轮班。”
3.你听的比说的多——或者至少在你说话之前先听。
Evus Technologies的开发主管克里斯托弗?曼迪(Christopher Mendy)表示:“如果你和其他开发人员在办公室里,先听,然后说。”“这是最快的学习方法。”
这需要谦虚,尤其是当你认为自己是房间里最聪明的人时。MarketGoo的佩雷斯补充说,优秀的开发者“有能力和意愿在他们不知道的时候承认”。此外,他还建议不要成为那种会滔滔不绝地说一大堆技术术语的程序员,而不是承认自己可能还不知道某个特定问题的答案。
你受到纪律处分。
人才,除了可能数量巨大,并不是一切。事实上,才能或技能只是成功方案的一部分。“纪律是另一部分,” New Relic客户Badger Maps的首席技术官Gady Pitaru说。“一个没有纪律的高技能软件工程师就像一个没有地图的资深水手:真的很擅长驾驶船,但找不到岸。”
Pitaru将一位训练有素的软件工程师描述为:
*不以牺牲速度为代价的人。但是,当他们绝对必须时,“他们意识到他们正在创造的技术债务,并努力在未来付出代价。”
*有人采用流程,因为他们认识到他们已经到位,以帮助开发者取得成功。例如:“他们在代码审查期间完全存在,并鼓励建设性的冲刺回顾。”
*知道开发工作重点时间的价值的人:“他们找到了确保他们获得它的方法,通过使用番茄,阻止日历时间或戴着耳机,举几个例子。”
你能够深入关注正确的事情。
New Relic Ruby的代理软件工程师Katherine Wu分享了一种特殊形式的纪律,标志着一个非常成功的开发人员:能够专注于特定项目的共同目标而不被善意或天空考虑。这并不能让你更接近目标。
“我认为挖掘兔子洞或在特定技术实施的边缘遇到麻烦是一种非常普遍的习惯,”吴说。她将这种心态描述为“如果我们可以做X,Y和Z,那会没关系吗?” - 当项目的实际目标是“A,B和C”时,这是工程师的自然思维过程是肯定的,但有时需要加以控制。 “当你退后一步时,你可能会意识到你正在投入大量精力去实现对每个想要实现更广泛目标的人都不重要的事情。”
吴说,只要你能够重新认识到知道自己需要做什么的重要性,而不是你可能需要做什么,有时候能够展望未来是件好事。部分原因是为了确保您拥有与团队其他成员相同的波长。正如New Relic的史密斯所说:“成功的开发人员明白创新是一项团队运动。”
6.你是一个持久的问题解决者。
“顽固 - 一些问题非常困难,”Mendy指出。 “有足够的时间和研究,总有一个解决方案,找到问题的解决方案是最好的感觉。”
7.你在互联网上得到陌生人的帮助。
不要把坚持与骄傲混为一谈。成功的开发人员不会将自我转换问题转化为不必要的生产力消耗 - 尤其是当解决方案可在线获取时。有时,寻求帮助 - 是的,谷歌很重要 - 是解决问题最有效的第一步。
“擅长Google搜索,”Mendi建议道。 “你在计算机编程中遇到的每一个问题都已经解决。在某个地方,某人遇到了你遇到的同样问题,他们经常发布他们的解决方案。”
不要以为在线获取帮助只是意味着从Stack Overflow线程复制和粘贴代码。 New Relic 开发人员倡导者Tori Wieldt指出,优秀的开发人员会花时间了解他们在网上找到的解决方案的内容,原因和方法。 “研究代码在做什么以及它为什么解决问题,”她建议道。 “你可以剪切和粘贴,但没有背景知识,它可能会回来打扰你。”
8.你超越技能来获得专业知识,但不一定掌握。
当Ask聘请开发人才时,Stephan将寻找一个人以前的专业经验,而不必直接映射到他想要填补的工作区域。 “如果一个人快速建立专业知识,那么这个人可以用其他技能和技术再次做到这一点是个好消息,”他说。
Pitaru解释了Badger Maps中技能和专业知识之间的区别:“一名优秀的软件工程师可以编写Django数据库查询,但熟练的软件工程师将知道如何最有效地编写查询,以便可以扩展单行代码。”
但是,有必要区分专业知识和掌握。后者表明你没有什么可学的。 “不要以为你有任何控制权,”门迪说。 “这些日子的发展只是持续教育。”
你对新事物持开放态度。
上面描述的Mendy继续教育的另一个先决条件是对新事物持开放态度并根据需要接受它们。
Pitaru说:“非常成功的软件工程师不断学习行业的新趋势,并直接应用于他们的工作。” “成功的软件工程师知道如何过滤和过滤,以帮助他们继续最大化他们的增长和增长。新语言,框架和方法。可以说,成功的软件工程师最重要的技能就是知道如何获得新技能。“
事实上,正如Pitaru指出的那样,学习不会因为完成计算机科学学位或编码训练营而停止,一旦你听到“你被录用了!” (如果你担心这种情况发生在你身上)在身体上,那么可能是时候重新启动了。)
“保持开放。你可以做的最糟糕的事情是专注于一种语言或工具,“Mendy建议道。毕竟,“如果你只有一把锤子,那么一切看起来都像钉子一样。”
你很不舒服。
New Relic的吴说,她不断发展的继续教育和技能发展方法的一部分受到了Cal Newport的Deep Work的启发。一个关键的引用:真正的技能发展需要“能够钻研一个主题并面对困难的领域 - 并坚持这些挫折,这样你才能真正探索并真正理解未来的事情。你。”
这可能是出于各种原因的困难,包括所有这些原因 - 电子邮件,Slack,会议等 - 这往往使我们感到忙碌,但并不一定有助于吴所描述的深刻的智力努力。例如,吴已经注意到她正试图理解一个复杂话题的信号:她的注意力将开始漂移。 “我可能正在读一篇技术博客文章的中间文字,字面意思是段落中间。在句子中间有关于某些想法,我的大脑几乎是叛逆的 - 我想知道Facebook上的内容是什么?”
作为回应,吴将她从纽波特的书中拿走的东西付诸实践,把时间安排放在一边 - 比如两个小时 - 并将其从干扰中解放出来,专注于一个目标。她通过打开那些时间块将它比作冥想练习:“注意到我的注意力消失并轻轻地将其重定向到手头的任务,这样我就可以挣扎并确定’好,哪部分我不理解?我怎么能找到答案?我需要进行实验吗?我是否需要对玩具项目进行编码并将其与此相关联?我是否需要确定可以向我解释的专家?这涉及到努力。主题是非常刻意地进行。“
要清楚,关闭电子邮件几个小时不会让你成为更好的开发者 - 它只是一个专注于真正进步和改进的机制。为了变得更好,她说,“你必须做一些对你来说很难的事情。即使你没有分心并需要大量的编码时间,如果你只是一遍又一遍地构建同样非常简单的应用程序。”并不一定能扩展你的技能。如果你不刻意扩展你的技能界限,你可能不会尝试构建你的技能来帮助你真正成长为技术贡献者。“
文章由深圳逻辑思维软件有限公司整整发布,转载请注明出处。