优秀的软件开发者


那么,什么是“优秀的软件开发者”?

原文地址

作为一名训练师和教练,这件事一直在我脑海中挥之不去。当然,这非常主观,很大程度上取决于他们工作的具体环境。

所以我要谈谈当客户让我帮他们找一个“优秀的软件开发者”时,我想要什么。

首要任务是对Rust的专家级指挥。

我当然是在开玩笑。

最重要的是沟通能力。最优秀的开发者努力清晰有效地理解和被理解。软件开发中很多问题都可以追溯到沟通不良(或缺乏沟通)。书面、口头、听觉。他们理解力强,能简单地向不同受众表达复杂的想法,最重要的是——他们真正有效地沟通。我认识一些很棒的沟通者,他们尽力避免了这种做法。

与此密切相关的是,我也对他们的同理心和情商感兴趣。稍后会详细说明。

在技术技能和知识方面,我会找一个在问题领域、编程语言、技术栈、工具等方面足够接近团队需求的人。问题是,他们需要多长时间才能适应?

如果他们是C#开发者,并且具备丰富的其他优点,花几周时间让他们熟悉Java是值得的。如果他们没有物理背景,而你正在开发粒子加速器的软件,可能要好几年他们才能理解。

这与其说是“优秀开发者”的问题,不如说他们是否足够胜任将要解决的问题。所以关键是合适度——他们适合这个角色吗?

接下来——这可能会让你感到惊讶——是重构。无论你的开发方法如何,这都是非常重要的技能。能够在不破坏代码的情况下重塑代码以适应变化,价值连城。它还需要相当高阶的推理能力来理解代码和设计。

尤其是长形式重构,暗示了作为程序员和软件设计师的成熟度,而这在遗憾中很难找到。如果我雇佣的是还没接触重构的人,培训他们将是下一步。

我采访过数百名开发者,知道良好的重构技能是一个“标志性”。它们是候选人技术能力的好预兆。

更广泛地说,那些在紧密反馈循环中工作,持续测试和审查代码、频繁提交并在主干中集成多次的人,往往能带来更好的结果:更短的交货时间、更可靠的发布以及更低的软件修改成本。(当雇主说这对他们不太感兴趣时,我总是感到惊讶。)

我见过的最优秀的开发者能够退一步,看到更大的格局,以及他们的工作如何融入其中。正如我有时说的,他们看到的是箭头,而不仅仅是方框。他们不像那些只看剧本台词、只想着场景、对故事和其他角色毫无兴趣的演员。

他们在多个层面都很有效,不仅关注自己的代码,还关注团队其他开发者的动态——比如看他们从仓库里拉取变更,他们会读吗?以及其他团队在做互联项目的动态,以及用户体验设计、产品管理、企业架构等周围的各种动态。

从这个角度看,他们对情境也相当敏感。

我心目中的“好开发者”关注的是实现结果,而不是产出。他们的目标是创造价值,而不仅仅是贬低功能或关闭工单。从这个意义上说,他们积极关注自己试图解决的问题。他们认为自己是一个更广泛团队的一部分,不仅仅是提供软件,更是解决业务问题。

真正优秀的项目在引导船只走向更好结果和更高价值方面起着作用。他们不仅仅是服务员在点单。他们帮忙设计菜单。

我推荐给客户的开发者,往往在职业生涯中身兼多职。他们既是程序员,也是测试员,是架构师,是产品经理,也是用户体验设计师,还有其他身份。我会说他们是“T型”显影剂。

如果我们想避免团队过度专业化,专家可能成为瓶颈,这一点尤为重要。当开发者能设身处地理解我们对整个流程的影响时,这也极大地帮助了我们。我可以说,如果更多人是“T型”,那么相信“人工智能”代码生成器能提升生产力的人会更少。我们会知道事情远不止这些。

他们深刻理解价值创造的单位是团队。他们从整体角度带来价值,考虑工作对团队成员和成果的影响,同时寻求帮助团队成员创造更多价值的方法。

正如Dan North最近指出的,一些最有价值的软件开发者甚至可能不会以自己的名字出现在你的Jira或GitHub统计中。(我曾与Tim Mackinnon共事,可以确认他是一位非常优秀的软件开发者。)

优秀软件开发者能够创造价值的方式之一,就是指导团队中的其他开发者。他们很可能正处于通过培养更多优秀软件开发者来带来最大价值的阶段。所以,我会寻找对此有丰富经验的人。

这只是我的看法,但无论你技术多么出色,如果你对指导的机会嗤之以鼻,我建议你在推荐给需要并期待指导的客户时三思而后行。

最后,他们需要快速适应。软件开发是一个学习过程,学习能力非常关键。这不仅仅是聪明的问题。这也关乎开放和愿意学习,走出舒适区。并且要做好失败的准备。每一项掌握的技能都会经历一个“不擅长”的阶段。如果团队文化能让他们有心理安全感去尝试和失败,那会非常有帮助。

有些开发者带来了这种心理安全感。我见过候选人在面试时直接尝试,比如TDD或一种新的编程语言。即使在这种压力下,愿意尝试的球员通常会成为球队的真正资产。

在面试中,我经常能察觉到候选人的风险规避程度。他们是否愿意偶尔迈入未知?他们会准备好质疑现状吗?还是他们会专注于保护自己的后方,保护等级制度?

我理解这通常是后天习得的行为。经历过严重失败后果的开发者不太可能愿意迈出这些大步。我们都可以尽力通过支持和开发尽量减少潜在后果的系统,激发人们更大的冒险精神。(我的意思是,初级开发者到底是怎么获得实时数据库的访问权限的?失败是我们的。)

但事实是,风险规避的开发者更害怕失败,更不愿意尝试,也不太会提出“愚蠢”的问题,因此学习的可能性也较低。它阻碍了我们的成长。

这就是为什么当我考虑整个团队时,开发者——尤其是资深开发者——必须具备足够的情商,能够识别自己是通过嘲笑别人尝试或惩罚别人来拖慢别人的责任。这是我们所有人都必须努力改进的事情。

总结一下,当我在寻找“优秀开发者”时,我会寻找:

  • 一个很好的沟通者
  • 技术上来说,一个足够接近的人
  • 良好的重构能力(理想情况下是长篇)
  • 一个一次解决一个问题、处于紧密反馈循环中的人
  • 一个能看到更大局势的人
  • 一个能够根据情况感知周围发生事情的人
  • 一个以结果为导向的人
  • 一个能身兼多职的人
  • 一个能为团队带来价值的人
  • 一个反应快、不怕尝试新事物的人
  • 一个拥有相当情商和同理心的人

文章作者: dlwin888
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 dlwin888 !
  目录