本文是一篇论文的翻译,该论文是 Paul Luo Li、Amy J. Ko 和 Andrew Begel 三位学者在微软公司进行研究后,综合古人研究成果而写出的。由于篇幅过长,译者对一些重点词句进行了标注,方便想快速理解的朋友阅读。其余,文中很多受访者的访谈也很故意思,值得细细品味。当然,想看原版的朋友,可以访问 https://faculty.washington.edu/ajko/papers/Li2019WhatDistinguishesEngineers.pdf ,或者搜索《What distinguishes great software engineers?》。
择要伟大的软件工程师对付创造伟大的软件至关主要。然而,本日,我们对伟大工程师与普通工程师的差异缺少理解。我们通过对履历丰富的工程师进行迄今为止最大的稠浊方法(mixed-method)研究之一来办理这一知识差距。我们调查了 1,926 名专家工程师,包括高等工程师、架构师和技能研究员,请他们判断伟大工程师的 54 项综合属性的主要性。然后,我们进行 了 77 次电子邮件采访,以阐明我们的创造并理解背景成分对评级的影响。综合调查结果后,我们认为伟大工程师的前五个显著特色是编写好的代码、调度行为以考虑未来的代价和本钱、进行明智的决策、避免让别人的事情更难,并不断学习。我们将研究结果与之前的事情联系起来,并谈论对研究职员、从业者和教诲事情者的影响。

归根结底,要对 [软件] 进行变动,仍旧须要开拓职员(坐在某个座位上的屁股)输入 [源代码掌握系统] 提交。— 开拓经理
伟大的软件工程师对付创造伟大的软件至关主要。因此,理解区分精良工程师的属性是我们天下快速发展的软件生态系统的根本:公司希望聘任和留住精良工程师,大学希望培训他们,而有抱负的工程师想知道什么是伟大。
软件工程研究⻓期以来一贯渴望发展这种理解,许多研究都严格考虑了伟大工程师的属性。例如,从打算的早期开始,许多研究职员和从业者就认识到一些软件工程师比其他软件工程师更精良。利用天生的代码行数和缺点率等指标,早期研究试图量化精良工程师与普通工程师在生产力方面的差异(Sackman 等人,2017 年)。1968年)。 常日在实验室或大学环境中进行(Gugerty 和 Olson1986年; 罗比拉德等人。2004年), 研究试图分离技能编码任务。这些不雅观察导致了“10倍开拓职员”这一软件工程在互联网的盛行语。
开拓职员技能的一些观点在课程中进行了规范编码。例如,ACM 课程标准将软件工程师定义为:编写供他人负责利用的软件的人。课程列举了软件工程师的基本知识;它险些完备专注于技能技能,如编程根本和软件设计(打算课程联合事情组2014)Software Engineering Book of Knowledge (Bourque et al.2014),它试图列举软件工程师能够并且该当知道的统统才能胜任。
虽然许多先前的事情坚持认为编程和技能知识是核心,但一些证据表明,精良工程师的特质还在于他们与队友有效互动的能力。例如,许多检讨软件工程师日常活动的研究创造,工程师花费大量韶光实行非编码活动(Singer et al.1997; 佩里等。1994),包括办理冲突 (Gobeli et al.1998),缺点分类 (Anvik et al.2006年; 阿兰达和维诺利亚2009) 和信息搜索 (Koet al.2007年)。 研究还从进入行业的应届毕业生的⻆度考虑了这些成分,检讨应届毕业生的能力与在现实天下中设计软件所需的技能之间的差距(Radermacher 和 Walia2013)。研究职员常日创造,成为高效的工程师须要非编码属性,例如自傲、渴望学习以及与他人有效互助的能力(Begel2008年; Hewner 和 Guzdial2010).
软件工程过程研究意味着工程师所需的技能。各种指南(特殊是 CMM Herbsleb 等人。1997)、方法(例如,螺旋方法 Boehm1988) 和宣言(例如,敏捷宣言 Beck 等人。 2001年), 提出了许多详细的事情、操持和决策办法,这些办法对付高效的团队互助至关主要。这些与名人的说法是同等的(布鲁克斯1995) 和微软等公司的其他公司 (Brechner 2003年) 和谷歌(Fitzpatrick 和 Collins-Sussman2009),这表明精良的软件工程师拥有一系列超过支持组织需求的社会技能范围的属性。他们共同指出人格特质、技能能力和人际交往能力相结合,以区分现实环境中的伟大工程师。
研究事情最近在两项综合研究中达到顶峰,将先前的事情综合到更高层次的框架中。我们之前的 ICSE 论文(Li 等人。2015年) 通过全面列举伟大工程师的属性奠定了根本, 从对 Microsoft 履历丰富的工程师的 59 次半构造化访谈中得出了一组 54 项属性。巴尔特斯和迪尔 (2018) 建立在我们的研究之上,通过贡献一个全面的将软件工程过程与工程师的个人和社会特色相结合的理论。然而,这两项研究都缺少对这些特色的相对主要性的理解。因此,在本文中,我们磋商了三个研究问题。第一,履历丰富的工程师是否认为某些属性比其他属性更主要?第二,属性的感知主要性如何因工程师的人口统计、背景和事情履历而异?第三,这些属性如何将伟大的工程师与其他人区分开来?
这些问题的答案须要大量的信息供应者样本,在丰富多样的背景下,对伟大工程师的特色做出判断。因此,我们对履历丰富的工程师进行了大规模的稠浊方法研究。我们对 1,926 名微软专家工程师进行了定量调查,覆盖 67 个国家(调查时环球所有专家微软工 程师的 13%)。此外,我们进行了 77 次后续访谈,以定性阐明属性的相对主要性和背景成分的影响。我们的事情是迄今为止对软件工程师进行的最大的真实天下研究之一。
在本文的别的部分,第2节谈论了我们之前的访谈研究以及它产生的伟大工程师的 54 条属性,它们是本研究的根本。第3节描述了这项研究的方法,包括调查和后续访谈。我们按照第4节与结果。在第5节我们首先谈论之前的事情,然后我们综合⻅解并将这些⻅解与之前的事情联系起来。我们谈论研究职员、教诲事情者和从业者的收成,以及对有效性的威胁。末了,我们在第6节得出结论。
2 伟大软件工程师的特质在本节中,在描述我们的研究之前,我们回顾了我们之前研究的属性 (Li 2016年),这构成了我们调查和访谈的根本。图1显示了这些属性的概述以及它们之间的关系。先前事情中的 54 个属性包括软件工程师个性的自我聚焦属性和他们做出有效决策的能力,以及精良工程师对人和产品的影响的外部聚焦属性。先前的出版物供应了每个属性的详尽描述(Li 等人。2019)。
如图1显示,第一组的 18 个属性是与工程师个性有关:
图1 精良软件工程师的属性模型
那是教不来的东西。我认为这是一个人必须拥有的东西 [...] 他们不须要任何外部动力。他们只是去做 [...] 他们只是内心渴望成功,我不知道为什么。不一定是为了钱,也不一定是为了认可。只是无论他们做什么,他们都想做得非常好 [...]
一些属性,例如激情亲切和好奇,与伟大工程师作为人有关。受访者认为,许多这些属性是工程师固有的——通过他们的成⻓形成的——并且很难(如果不是不可能)改变。
第二组包含 9 个属性,这些属性与工程师做决定的能力有关。所谓决策,我们指的是“理性决策”,正如 Simon 所描述的那样(1955年):评估当前情形(即理解须要在何时做出什么决定),确定替代行动方案,衡量概率结果,并估计未来状态的代价。
我们如何做出我常说的“稳健决策”?根据我们无法预⻅的一系列潜在结果,我们可以做出什么决定?[...] 如果我们能够做出可行的决定,无论 A 还是 B 发生,那么我们现在就不必为 A 或 B 争吵。— 技能研究员
受访者将软件工程描述为须要关于“构建什么软件以及如何构建它”的许多繁芜选择。此外,除了书本知识之外,精良的工程师还理解决策在现实天下中是如何发挥浸染的。他们不仅知道该当发生什么,也知道可能发生什么。结合内部知识、将知识联系在一起的心智模型以及对其模型进行推理的认知能力,决策制订属性是很自我的。然而,与个性不同的是,受访者们认为,有效的决策是可以学习的。
第三组 17 个属性与工程师 与队友的互动 有关:
[这位伟大的软件工程师] 触动人们的办法,便是在那儿化解冲突 [...] 这种魔力让人们尊重他。那是有趣的邪术,我想不是每个人都拥有。— 高等软件工程师
大多数受访者认为,伟大的工程师会对队友产生积极影响。对付许多受访者(他们的头衔包含“主管”或“经理”)来说,这是他们作为其他工程师经理的主要事情。关于与队友互动的属性常日环绕四个观点:做一个通情达理的人、影响他人、有效沟通和建立信赖。我们将这四个观点解构为它们的组成属性。
末了一组包含的 9 个属性与 伟大工程师制作的软件 有关:
⻛格 [...] 总是一向,而且统统都很干净 [...] 非常简洁。只要看着它,你就可以说,“好吧,这家伙,他知道他在做什么。” [...] 没有多余的东西。统统都是最低限度的必要和足够的,由于那便是它该有的样子。屏幕外经由寻思熟虑。— 高等软件工程师
就像艺术家欣赏其他艺术家的精品一样,我们的受访者(个中许多人本身便是伟大的工程师)从其他伟大工程师开拓的软件中看到了美。
在本文中,我们以伟大工程师的这些综合属性为根本,利用稠浊方法研究(定量调查和定性后续访谈)来理解属性的相对主要性以及背景成分如何影响它们的主要性。然后,我们综合了两项研究中的履历教训,以深入理解精彩工程师的不同之处。
3 方法为了确定属性的相对主要性,我们进行了大规模的定量调查,试图通过以下办法对 54 个属性进行排名:协议该属性对付伟大来说是必不可少的。此外,我们根据之前的研究 (Hewner 和 Guzdial)考虑了影响软件工程实践的背景成分2010; Radermacher 等 人。 2014; 费舍尔和⻢戈利斯2002年; ⻢戈利斯和费舍尔2003年; 卡佛等人。2008年; 沙克尔福德等人。2006年)(以及我们自己之前的研究):履历量、性别、国家、打算机科学教诲背景和软件类型(做事器端、客戶端或两者)。桌子2个, 稍后在部分中显示4个, 详细解释了这些成分是如何运作的。末了,由于定量统计考验可能存在虚假干系性,因此我们利用定性后续访谈来帮助验证和解释调查结果。
对付这项研究,我们选择连续在微软进行调查,与我们之前的访谈研究相同的设置(Liet al.2015年)。只管微软作为一个组织,存在明显的外部有效性限定,但它也有上风。首先,在 Microsoft 的持续调查有助于构建和内部有效性。Microsoft 员工有共同的理解(例如,术语和资历基于头衔),这有助于对我们的问题以及我们对他们的回答的阐明保持同等。此外,共同的组织构造(例如职位)使我们能够以同等的办法为研究确定履历丰富的工程师(在第 3.1 节中谈论)。其次,微软是一个多元化产品和环境的联合企业。个中包括游戏、消费电子产品、操作系统、生产力、搜索、消费者做事、企业做事、企业资源方案、客戶关系管理、数据库、开拓职员工具、和通信,以及天下各地特定区域的发展中央。这种丰富多样的语境实际上有利于外部有效性,并增加了辨别有趣语境成分的前景。第三,微软始终如一地利用最佳实践和技能,并聘任顶尖人才;这有助于打消殽杂的毛病。末了,我们承认权宜之计; 两位作者是 Microsoft 员工,可以访问工程师并得到实行研究的组织容许。我们将在其他情形下进一步验证我们的结果留给未来的事情。微软始终如一地利用最佳实践和技能,并聘任顶尖人才;这有助于打消殽杂的毛病。
3.1 调查方法
我们方法中的一个关键决定是确定可以考虑谁的主不雅观意⻅有效的对“伟大”属性的判断。对付这项研究,我们假设履历丰富的工程师最能做出这些判断,由于他们在采访和评估其他工程师时常常做出这些判断。我们在抽样中包括了工程师的主管和经理,由于在 Microsoft,险些所有人都有工程师的实践履历。与我们最初的访谈研究一样(Li 等 人。2015年), 我们采取了 ACM 对软件工程师的定义 (Shackelford et al.2006年):编写供他人负责利用的软件的人。 我们利用 Microsoft 公司目录来履行此定义。我们根据须要“软件开拓”的头衔确定软件工程师,然后合并头衔列表,删除各种地址簿说话非常。为了确定“有履历”,我们利用了人类专业知识的研究职员 (Ericsson et al.1993)。我们确定了那些已经取得一定程度认出履历丰富,通过招聘或晋升过程,选择软件开拓工程师 2 级 (SDE II) 职称或以上的工程师。
认识到更有履历的工程师的⻅解是有代价的(而且更难得到),我们有两个抽样层履历水平。 首先,对付“有履历”,我们选择了SDE2级职称到“高等软件开拓工程师主管”晋升级别的工程师;这些工程师常日至少有 5 年的履历。第二,对付“非常有履历”,我们选择了“高等软件开拓工程师卖力人”晋升级别以上的工程师;这些工程师常日拥有 10 年以上的履历,并且常日卖力关键的技能领域。
我们在 Microsoft Research 网站上主持了我们的匿名调查。我们通过电子邮件向工程师发出约请,哀求他们参与,供应调查结果报告并参加礼券抽奖活动作为褒奖(两张礼品卡,每张 75 美元,中奖几率与受访者人数成正比)。我们用软件工程师的名字个性化征集,描述了研究的目的,并阐明了为什么我们须要他们的不雅观点;这些步骤有助于减少心不在焉的调查回答(用戶供应不诚挚或随意的回答)(Meade 和 Craig2012)。 每个征集都有一个单独的匿名调查链接,以防止多次提交(例如通过机器人,这可能会导致偏⻅和虚假结果)。我们在第一周和一个月后发送提醒邮件。该调查于 2014 年 12 月至 2015 年 2 月开放。
在调查中,在阐明了研究的目的和受访者不参与的权利后,我们讯问了受访者的人口统计数据、履历水平和当前事情环境(利用数字输入框,例如履历年限,或单选按钮, 例如做事器端/客戶端软件)。这些是我们后来与他们的评级干系联的背景成分。
然后,我们寻求受访者对所有属性的评分。估量受访者会疲倦,我们提出了四组问题,对应于我们访谈研究中的四组,在第2个. 为理解决排序偏差并能够剖析不完全的结果,我们随机化了四个组的排序,以及随机化(单独)每个组内属性的排序。有关属性的问题以类似的办法组织和说话,使受访者能够快速阅读和回答。为相识释,图。2个显示了对勤奋属性的调查结果。我们以一个开放式的包罗万象的问题结束了调查,旨在检测操作问题和缺失落的属性。
我们采纳了几个步骤来确保受访者准确理解这些属性。在调查构建的第一次迭代中, 我们描述了一位拥有该属性的工程师。然后,我们对调查进行了试点,以确定理解问 题,从而导致说话发生变革(例如,“软件工程师”改为“开拓职员”,以区分不编写代码的人),为 37 个属性添加支持引语,为稠浊的属性添加解释(例如,“实践”和技能”附加了“例如单元测试、代码审查、Scrum 等”)。
为了得到主要性的绝对评级,我们问“如果一个履历丰富的开拓职员——其紧张职责是开拓软件——没有这个属性,你还能认为他们是伟大的开拓职员吗?” 我们给了受访者六种李克特⻛格的选择(⻅图 1)。2个): “如果他们没有这个,就不能成为一个伟大的开拓职员”,“没有这个很难成为一个伟大的开拓职员,但并非不可能”,“没有这个也可以成为一个伟大的开拓职员,但拥有它会有所帮助,”“是否无所谓他们没有这个,这是无关紧要的,”“一个伟大的开拓商不应该有这个;这不好,”和“我不知道。”
图 2 属性调查问题的屏幕截图:“勤奋”
试点调查表明,这种对“主要性”的负面操为难刁难熬难过访者来说更随意马虎,并且更随意马虎引出属性的主要性。积极说话的描述导致反应混为一谈,由于受访者险些总能想象出一种属性可能很主要的情形。悲观的说话产生了更多的差异化,更符合我们对主要性的观点化:伟大的工程师不可能具备的属性没有。
调查构建完成后,我们对 200 名开拓职员进行了初步支配(~每个体验层中有 100 个)来探求其他问题,并预测相应率。在没有创造任何问题后,我们将调查支配到全体样本中,目标是在每个抽样层中得到 500 个相应。
受访者完成调查的均匀韶光为 28 分钟。总的来说,我们得到了 1,926 份调查回答,825 份回答来自有履历的工程师 (~7% 的有履历的微软的工程师,回答率为 46%) 和来自 1,101 的回答非常有履历工程师 (~全部的 35%非常有履历 Microsoft 的工程师,相应率为 44%)。在回答中,1,634 (84.3%) 是完全的,292 对至少一个属性进行了评级。我们没有创造项目相应偏差——属性和相应之间没有关系,在α = .05 水平利用 Logistic 回归。也没有从开放式终极问题中检测到任何问题(例如,没有缺失落的属性)。由于随机化以及每个属性的排名独立于其他属性(即非相对评级),我们在剖析中同时利用了完全和部分数据。
我们的定量剖析评估了我们的相对主要性观点:受访者赞许工程师不能被认为没有该属性的程度。这排名的两个主要方面是:评分和受访者之间对评分的认同程度;从统计上讲,这意味着分配评级:集中趋势(即临界性)和分散性(即同等性)。更主要的属性的分布更集中在较高的评级上。因此,我们通过比较每个属性的评疏散布与每个其他属性的评疏散布来对属性进行排名,打算一个属性的分布明显更高的其他分布的数量(53 是可能的最大数量)。我们没有用均匀评级的三个缘故原由:数据是有序的(即评级水平之间的间隔不一致),我们的相应水平不居中(四个正面评级和只有一个负面评级),并且均匀值不考虑评级的分散。为了对属性进行排序(即比较分布),我们利用了 Mann-Whitney 排序测试;该测试可用于比较有序数据和分布(集中趋势和分散),并且可以在不雅观察数量不相等时利用(Hollander 等人。2013)。 没有非常的双峰分布。对付每个属性,我们实行了 53 个单侧 Mann-Whitney 等级测试,一个测试针对所有其他属性。然后我们打算了水平上具有统计显著性的成比拟较的数量α= .05。末了,我们根据统计显著性测试的数量对属性进行排名。例如,排名最高的属性的评疏散布在统计上高于所有其他属性。
为了剖析高下文成分和评级之间的关系,我们利用了序数 Logistic 回归。我们评估了高下文成分和每个属性的评级之间的一阶关系。由于是可选的,只有 1,512 名受访者提 供了年事信息。为了最大化统计功效,我们首先用所怀孕分拟合模型以评估年事的影响,然后拟合没熟年龄的单独模型,以评估其他成分的影响。
由于我们测试了每个成分和每个属性之间的统计显著关系(统共超过一千次测试), 为理解释实行多个统计测试,我们在标准 FDR 下利用了 Benjamini 和 Hochberg 缺点创造率 (FDR) 调度q=0.1级。我们通过删除最高 p 值关系来过滤出具有统计意义的关系以实现 FDR q=0.1(所有关系都有 p<.05).
3.2 后续邮件口试办法
量化结果见告我们什么(例如主要的属性和统计上显著的关系),但它们并没有见告我们为什么。 为理解释排名和关系,我们通过电子邮件向受访者发送电子邮件,以深入理解他们的调查回答,从而供应对定量结果的有效理解。
我们对排名最高的属性(表中排名前五的属性)进行了后续访谈1个),潜在的有害属性(具有最高百分比的两个属性“一个伟大的开拓者不应该有这个;这不好”收视率,在表的底部1个),以及受高下文成分显著影响的属性(表中列出的关系2个). 对付排名最高的属性和积极关系,我们选择了在属性评分和中位数评分之间具有最大正差的受访者,旨在避免对所有属性都给予高度评价的受访者。对付有害属性和负面关系,我们 同样选择了负面评级差异最大的受访者。
在我们的调查中,771 名受访者表示他们乐意回答后续问题。我们向 111 发送了后续电子邮件,收到了 77 的回答(回答率为 69.4%)。
表1 伟大的软件工程师的属性,顺序:必须有、该当有、最好有、无关的和不该有
更高
模式
属性和描述
53
必须
把稳编码细节,例如缺点处理、内存、性能、样式
52
必须
能够处理繁芜性;能够理解多个交互式软件组件
49
必须
持续改进:改进自己、产品或周围的环境
49
必须
老实:供应可靠的信息和反馈,以便他人采纳行动
49
必须
思想开放:让新信息改变他们的想法
46
必须
实行:知道什么时候停滞思考并开始行动
45
必须
独立重生:独立完成事情,不易受阻
45
必须
自我反省:意识到何时涌现违背操持和要点的问题
43
必须
坚持不懈:不因挫折和失落败而气馁
41
必须
与其周围的其他部分相适应:代码表示了周围的约束和产品
41
必须
理解他们的技能领域,包括产品、平台和竞争对手
39
必须
做出明智的权衡:代码相应市场目标的韶光、业务的关键需求
39
必须
更新他们的决策知识:不要让他们的理解结束不前
36
必须
好奇:渴望知道事情为什么会发生以及事情是如何运作的
36
必须
进化:代码构造可以有效地构建、交付和增量更新
35
该当
理解工具和材料:理解代码的优缺陷
35
该当
提高他们做出精确决策的能力:建立对决策可能结果的理解
34
该当
见林见树:通过多个抽象层次的情境进行推理
31
该当
工艺:希望他们的输出反响他们的技能和能力
30
该当
预先审查: 在决定之前审查现有的信息
30
该当
优雅:设计其他人可以理解和欣赏的办理方案
29
该当
寻求帮助:知道自己知识的局限,并用他人的知识来补充
28
该当
渴望将想法变为现实:以构建软件为乐
28
该当
远期:考虑随着韶光推移的本钱和收益,而不仅仅是短期目标
25
该当
乐意进入未知:可以走出舒适区去探索新领域
24
该当
是一个好的谛听者:有效地获取、领会和理解他人的知识
22
该当
充满激情:对他们事情的领域有内在的兴趣
22
该当
管理期望:清楚地传达他们将要做什么以及何时完成
22
该当
专注:为最有影响力的事情优先安排韶光
21
该当
系统性:以有组织的、有原则的办法办理问题
21
该当
适应新环境:随着环境的变革对组织仍旧有代价
19
该当
整合对他人的理解:可以与他人建立更完全的理解
19
该当
不针对个人:避免根据个人目标和感想熏染做出决定
19
该当
创意:根据高下文及其局限性天生新颖和创新的办理方案
18
该当
用行动说话:为他人树立榜样
18
该当
理解软件工程流程:理解最佳实践和技能
13
该当
预测需求:主动确定潜在的问题和需求
13
该当
在构建过程中利用精确的流程:利用最佳实践和技能来构建软件
13
该当
为软件产品的利益而抗拒外部压力:武断地抵抗外部压力
11
该当
有良好的荣誉: 有崇奉、尊重、信赖和信心
11
该当
富有成效:能更快地达到与他人相同的结果
10
帮助
理解客戶和业务:理解他们产品的代价主见
10
帮助
创造与他人的共同理解:通过有效的沟通塑造他人的知识
9
帮助
为每个人创造共同的成功:建立每个人都可以接管的 期目标
8
帮助
与组织目标同等:为产品和组织的利益采纳行动
7
帮助
彬彬有礼:尊重他人
7
帮助
数据驱动:让数据驱动行动,而不仅仅是直觉
6
帮助
为他人创造一个安全的避风港:让他人自由地做出基于精确的决定,而不是恐怖
5
帮助
辅导:教授、辅导和支持其他开拓职员
4
帮助
理解人和组织:理解他人的任务和知识
2
帮助
寻衅他人以提高:鼓励扩展能力和目标
2
帮助
风姿翩翩:建立信赖、积极的社会关系
1
帮助
勤奋:乐意每天事情超过 8 小时以交付成果
0
帮助
交易恩情:与他人建立个人权柄,许可他们往后拜访他人
我们试图向单个受访者讯问多个属性(根据上述选择标准,当线人有资格回答有关多个属性的问题时),以揭示超过多种关系的⻅解。这封电子邮件以问候语开头,并感谢您参与这项研究。接着是:“我在剖析数据时创造了一些有趣的东西,希望你能帮助我更好地理解它”。然后电子邮件描述了属性或关系,须要进一步理解的缘故原由(例如,是最主要的属性之一,可能不是主要的属性,X 与 Y 的主要性评级较低干系),受访者的评分, 然后:“你为什么选择这个答案?你能帮我理解你的推理吗?”。
我们对回答进行定性剖析以得到理解,选择有代表性的引述,然后征得知情人的赞许匿名引述。
表 2 背景成分、调查研究中的分布和显著影响。行没有排序。一些分配列为[最小值、中值、最大值]
序号
因子
编码
分配
关系(OLR,FDR,q=0.1)
1
履历
依据职称分类
履历丰富 (825,43%) 非常 (1,101,57%)
实行 (+) 理解工具和材料 (+)做出明智的权衡(+)
2
年事
数值的
[20, 39, 73]
非常理解业务 (+)理解流程 (+)与组织目标保持同等 (+)
3
开拓职员年限
数值的
[0, 15, 41]
勤奋 (+)渴望将想法变为现实(+)
4
在微软的岁月
数值的
[0, 10, 30]
与组织目标同等 (+)
5
# 职业生涯中的公司
数值的
[0, 3, 10]
持续改进 (+)
6
在当前团队中的年数
数值的
[0, 3, 25]
—
7
经历过经理
是/否
经理 (1,028,53%)
—
8
是女性身份
是/否
是 (149, 8%)
利用精确的流程 (+)
9
拥有CS学位
是/否
是 (1,228, 64%)
—
10
拥有非MBA学位
是/否
是 (762, 40%)
寻求帮助 (‒)
11
拥有工商管理硕士学位
是/否
是 (49, 3%)
—
12
拥有博士学位
是/否
是 (49, 3%)
行动模范 (+) 寻衅他人以提高 (+)
13
有其他学位
是/否
是 (103, 5%)
—
14
拥有非 CS 学位
是/否
是 (537, 28%)
—
15
不在美国事情
是/否
是 (351, 18%)
与组织对齐 (+)
16
事情履历
绝对的非美国国家
印度 (273, 14%)中国 (168, 9%)加拿大 (77, 4%)英国 (63, 3%)以色列 (51, 3%)其他 (383, 20%)无 (911, 47%)
31 个属性 (+)9个属性(+)任劳任怨(-)任劳任怨(-),与组织对齐(-)
17
非英语语
是/否
是 (926, 48%)
激情亲切 (+)
18
客戶类型
分类
内部(791, 41%)外部(270, 39%)两者(865, 32%)
坚持不懈(+)
19
做事器端软件
分类
客戶端(562,29%)做事器端(754, 39%)两个都(610, 32%)
—
20
# 开拓职员事情在过去的一年
数值的
[0, 15, 1,000]
—
4 结果
在本节中,我们重点关注我们在后续访谈中讯问的属性和关系,由于这些是最有趣的属 性和我们对其有最有效理解的属性。我们谈论了前 5 个(排名最高的)属性、后 2 个 (可能有害的)属性,以及属性组之间的总体排名。对付因背景成分造成的差异,我们 谈论每个具有统计显著性的关系。
4.1 属性排行
表1显示属性,根据我们的调查答复对其主要性的同等程度进行排名。根据评疏散布,最主要的属性位于顶部,最不主要的属性位于底部。我们没有不雅观察到非常的双峰分布,并利用 Mann-Whitney 考验比较了分布。第一列中的数字是该分布相对较高的其他分布的数量。关键性的主不雅观评级在第二栏中。第三列列出并阐明了属性。
4.1.1 排名最高的属性
最主要的属性是把稳编码细节(排名 1,评疏散布高于 53 个属性;63.1% 必不可少,28.8% 主要,7.5% 有帮助,0.3% 无关紧要,0.1% 有害)。受访者阐明说,工程师首先通过他们的代码来判断其他工程师。因此,无法精确节制根本知识的工程师不受尊重:
另一个强大的驱动力是我们同行的尊重,你不会通过编写劣质代码来得到 [...] — SDE 卖力人
其次,受访者认为软件可以有多种用场,这常日是工程师无法预见的;因此,工程师须要把稳细节以避免代价高昂的问题:
此代码对性能至关主要,对兼容性敏感,并且在各种各样的高下文中利用。如果开拓职员未能处理缺点,一些客戶会中招,我们可能须要发布修补程序;如果开拓职员实现了低效算法 (上2个)不好)[...]在某些环境中过度花费内存[...]等。— 校⻓ SDE
这在微软可能尤为主要,由于软件产品常日是平台、组件和/或在工程师无法预⻅的环境中利用。
这种理解也是生理处理繁芜性的根本(排名第 2,评疏散布高于 52 个属性;54.2% 的受访者给出最高评分,36.2% 主要,20.1% 有帮助,1.6% 无关紧要,0.2% 有害)一个高排名。受访者认为,精良的工程师须要能够思考繁芜的情形:
大多数有用的软件必须高度容忍上面的用戶/调用者的禁绝确利用,并与其下面的支持代码交互 [...]考虑到他们没有想到的情形 [...] — SDE 校⻓
受访者认为持续改进(排名第 3,评疏散布高于 49 个属性;51.0% 的受访者给予最高评分,34.8% 主要,13.5% 有帮助,0.7% 无所谓,0.1% 有害)和开放的心态(排名 第 5,评疏散布高于 49 个属性;49.4% 的受访者给出最高评分,36.5% 主要,13.2% 有 帮助,0.7% 无所谓,0.1% 有害)很主要,由于软件行业发展迅速;因此,伟大的工程师须要对新想法持开放态度并不断学习:
随着技能/技能的发展和更好的工具的涌现,思想开放的开拓职员会接管这些并乐意运用它们来提高生产力/效率 [...] 而无需努力持续改进 [...] 开拓职员很快就会创造自己掉队于行业和/或技能和技能的最新水平。— 首席 SDE 卖力人
这种想法也匆匆成了老实的 (排名4,分布比49属性高,50.8% 的受访者给出了最高的评价,32.1% 主要,14.3% 有帮助,2.2% 无关紧要, 0.1% 不利)很主要。受访者表示,伟大的工程师须要承认缺点,以便为他们自己和他们的团队做出最佳的未来决策:
在我的职业中,对自己撒谎比在我所知道的任何其他职业中都随意马虎得多 [...] 很随意马虎认为您知道该主题并错过(下意识地忽略)与您的“知识”相抵牾的证据。伟大的开拓者 [...] 同时知道很多,并质疑他所知道的统统。— 校⻓ SDE
受访者还谈论了开拓职员的不老实可能对他人有害,并强烈认为这种行为是有害的:
这在我身上发生过很多次 [...] 拥有这样一个组件的团队会向我“谎报”它的可用性和成熟度,以便让我成为用戶并向管理层证明他们自己的存在 [。 ..] - 卖力人
4.1.2 排名最低的属性
两个属性收到了负面评价——“一个伟大的开拓者不应该有这个;这不好”—来自超过 5% 的受访者:互惠互利 (排名 54,分布高于 0 属性;4.0% 必不可少,15.1% 主要, 44.1% 有帮助,29.1% 无关紧要,6.0% 有害)和勤奋(排名 53,分布高于 1 属性, 11.0% 必不可少,19.9 % 主要,36.0% 有帮助,27.8% 无关紧要,5.0% 有害)。我们没有预见到会有如此高的负面评价,由于从之前的采访中得出的属性都是正面的。
后续采访表明,这些属性可能并不是天生的坏事,但可能反响了糟糕的情形。对付勤奋属性,受访者认为每天事情超过 8 小时可能表明操持不周或软件工程实践不可持续:
[...] 开拓职员的事情量是发生在该开拓职员之上的管理和方案的功能。常日须要⻓韶光的事情,由于方案不好,在项目生命周期中做出的决策不好,变更管理不足“敏捷”。— SDE2
对付互惠互利属性,受访者认为,须要个人恩情可能反响了一种有偏⻅的决策文化,在这种文化中,决策不是基于理性,而是基于个人的主不雅观意⻅:
他们该当完备分开,否则我所看到的是我们方向于对他人做出有偏⻅的决定和意⻅。— SDE2
此外,须要未记录的流程来完成事情可能表明组织实践不佳,使工程师更难有效运作:
一旦你“交流恩情”,你就会进入个人的给予和索取,并环绕人图中的几个节点建立机构影象,并且可能在这种关系之外不可⻅ [...] - SDE 卖力人
4.1.3 属性组综合排名
总体而言,与队友互动干系的属性被评为最低(高同等性低主要性),中位数排名为 40 (4 组中最低),并且 77.8% 的属性处于排名的下半部分;其次是个性属性(中位数排名为 24,下半部分为 44.4%)。比较之下,与决策干系的属性被评为最高(下半部分的中位数排名为 17 和 33.3%),紧随其后的是软件产品的属性(下半部分的中位数排名为 17.5 和 33.3%)。这可以在图 1 中直不雅观地看到。3个,它根据属性的排名(x 轴)和前两个框中的评级百分比(y 轴)绘制属性。
在后续采访中,许多受访者认为开拓职员的想法该当通过其自身的优点来证明代价, 而不是通过其演示者的说服力。例如,以下是关于与他人创建共享环境属性,
图 3四类属性的属性排名
“有效沟通”最主要的组成部分,但在 54 个属性中排名第 43 位:
[...] 觉得就像将您的意志强加给其他人 [...] 其他开拓职员通过掌握对话或评论辩论其他人来推动他们的想法让我对该特定属性产生负面的直觉反应。想法该当立足于它们自己的优点,而不是它们被卖得有多好/有多强烈。— 高等 SDE
这些属性的较低相对排名可能反响了 Microsoft 的原谅性文化。由于编码技能和生理能力排名最高(第 4.1 节),排名可能反响出存在不同类型的人(个性)和不同方法 (与队友的互动)的信念。只要软件结果良好,就可以(而且该当)容忍每个工程师实现这些目标的不同办法。受访者认为,开拓职员的紧张事情是生产出高质量的软件,其他的都不是必须的:
一个伟大的开拓者会促进公司的商业利益。他通过生产如此耐操和可靠的软件来做到这一点 [...] 除了这些考虑之外,我对那个开拓职员没有兴趣 [...] — SDE 卖力人
4.2 语境的影响
表2描述了我们调查中的 26 个背景成分:描述、描述性统计以及成分和评级之间具有统计意义的关系的择要。为便于统计剖析,我们仅将非美国国家事情履历排名前 5 位 的国家(每个国家的受访者均超过 51 人)分开;其他 61 个非美国国家合并为其他(⻅表中第 16 行2个). 第 5 列列出了基于 FDR 校正后的有序逻辑回归 (OLR) 的统计显著关系。 我们用 (+) 表示正干系(存在与较高评级干系的因子或因子的较高值),以及负干系与 (−) 的关系(存在与较低评级干系的成分或成分的较高值)。在高下文成分中,10 个没有任何统计上显著的关系(在 FDR 校正后),用“-”表示。
4.2.1 履历水平
我们谈论表中的前五个成分2个(很有履历、年事、多年的专业开拓职员、在微软的司龄、和 在软件公司就业) 统称为履历水平,由于所怀孕分都旨在衡量相同的“履历”根本构造, 并且彼此高度干系。之间的关系履历等级和八个属性(表中的前 4 行2个) 所有积极的。
我们后续采访中的受访者——他们都是非常有履历的。- 为不雅观察到的积极关系提出了四个潜在缘故原由。首先(也是最明显的),受访者认为开拓职员具有更高的履历等级更加重视对“业务目标”的贡献,由于更高等别的工程师是根据他们对元组织目标的贡献进行评估的。这可能是与组织目标同等并理解客戶和业务的关系的根本:
我们的评估系统一贯强调实现公司组织目标的开拓职员 [...] 更有履历的开拓职员可能要明白,与公司目标保持同等会带来更大的回报。— 首席 SDE 经理
其次,受访者认为具有较高履历水平的开拓职员重视交付结果,包括与勤奋的关系,希望将想法变为现实,并且实行。 受访者认为,凭借履历,工程师们理解到,要做出故意义的贡献,工程师须要交付软件:
20 年在初创公司和大公司管理工程师的履历 [...] 无论多么有才华、头脑敏锐和技能娴熟,如果他们不努力事情(即乐意⻓韶光事情以按时完成任务/交付),他们就不会成功 [...] — 合资人 SDE 主管
第三,受访者认为履历水平较高的开拓职员更看重获取知识和做出更明智的决策,由于他们经历过多次发布并经历差错误的痛楚。这包括与理解工具和建筑材料、理解软件工程过程以及做出明智的权衡 :
“知识渊博”和“灵通”仅来自履历。这完备是关于广度和对许多情形的打仗,这些情形可以让你概括出新的情形 [...] 您实际上变得更加灵巧,并且乐意在您职业生涯早期乃至可能没有考虑过的目标之间进行权衡 [...] 大多数人须要一段韶光才能真正理解大局并能够根据更广泛的背景 [...] — 架构师
许多受访者进一步认为,只有通过实际的第一手履历才能得到这些知识和理解:
软件工程流程的存在是有缘故原由的 [...] 你越有履历,你就越能亲眼看到流程的利弊。 —首席SDE卖力人
末了,作为先前创造的推论,受访者认为履历丰富的工程师明白他们须要不断改进才能保持领先地位。履历丰富的软件工程师认识到,如果他们不连续学习,他们可能会过期:
没有人能在不“改进”的情形下保持领先地位,由于下一波技能浪潮很快就会淘汰 [原文如此] 处于领先地位的任何东西。— 互助伙伴 SDE
4.2.2 性别
我们不雅观察到统计上显著的正干系关系性别并在施工期间利用精确的流程。我们讯问了女性受访者为什么她们高度评价该属性,然后试图推断这些回答背后的推理的共性。女性受访者彷佛认为流程的存在有充分的情由,精良的软件工程师不应该试图“重新发明轮子”:
如果你不断地重新发明轮子或利用过期的工具/流程,你就不可能是伟大的。— 高 级 SDE
此外,女性受访者彷佛更强烈地认为软件工程该当井井有条地进行,而不是自行其是:
好的工程师必须知道实行过程并遵照它。每个项目/产品/团队可能有不同的流程,但精良的工程师必须理解并遵照它,或者如果他/她认为该当变动流程,则开始谈论[...]—高等SDE主管
4.2.3 教诲背景
我们创造拥有硕士和/或博士学位在寻求帮助、寻衅他人以改进关系、用行动做出模范(Walks the walk)等方面是悲观的 (对付硕士,请参⻅表中的第 11 行2个; 对付博士,请参⻅表中的第 12 行2个)。受访者供应了两个有趣的假设。首先,受访者认为,要想在软件行业取获胜利,研究生学位在很大程度上是可选的(根据之前的谈论,可能不如实践履历主要);因此,得到这些学位的工程师可能比其他人更有内在动力,导致他们不太乐意供应或接管帮助:
他们对最低限度的学士学位不满意 [...] 他们想自己找出事情来。—校⻓SDE
其次,受访者还表示,具有研究生学位的工程师常日被聘为技能专家。这样一来,他们常常须要办理新的问题,很少有机会给予或接管帮助:
[...] 以前没有人考试测验办理的问题,其他人以前都未能办理的问题,或处理某种重大危急的问题 [...] 他们的运作假设是在发生危急时没有人可以寻求帮助他们将须要能够自己找出办理方案。— 校⻓ SDE
我们通过比较过去一年与之互助的开拓职员数量(表格第 20 行2个) 具有和不具有高等学位的工程师之间。我们创造过去一年共事的工程师人数统计上显著减少(α=。05) 对付两位拥有硕士学位的工程师 (p=0.004,拥有硕士学位的人的中位数为 12,没有硕士学 位的人的中位数为 15)并且拥有博士学位。学位 (p=0.037,拥有博士学位的人的中位 数为 11,没有博士学位的人的中位数为 15。学位)利用 Mann-Whitney 等级考验。这些结果表明,拥有高等学位的工程师与更少的工程师一起事情。
总的来说,我们得出的结论是,由于研究生院的缘故原由,这种关系不太可能传授教化工程师贬低给予和得到帮助的代价。相反,正如所谈论的,研究结果可能是由于选择偏差(导致工程师攻读研究生学位的条件)和幸存者偏差(硕士/博士毕业生的事情分配)。
4.2.4 在另一个国家的事情经历
我们创造在另一个国家的属性和事情履历之间存在许多正干系关系;定性后续行动提出了四个基本主题。我们向受访者讯问了他们的评级,然后推断出潜在的主题。首先,受访者表示,在一些国家,高薪软件工程事情竞争激烈。这个可能是 31 的根本缘故原由积极的属性之间的关系和有事情履历印度,以及属性和之间的 9 个 正干系关系有事情履历中国. 竞争哀求这些国家的工程师在许多领域表现出色才能竞争:
我认为从文化 [...] 如果你不是班上的佼佼者,你就不会进入。连续你的下一件事, 无论如何。如果你不是第一名,你就不会进入个人所得税。无论如何,你都不是排名数字,你得不到那份事情 [...] 在西方天下不会那样事情,由于 [...] 人口。有很多机会 [...] 不仅一个人得胜,十个人都可以得胜。在世界的东方大概不是。— 高等开拓经理
其次,受访者认为文化规范影响了一些国家的软件工程实践。最突出的例子是两者之间的关系在中国有事情履历(汇总于表第 16 行2个) 和互惠互利属性。虽然互惠互利属性是整体排名最低的属性,其评分在中国受访者中明显更高。后续采访表明,较高的收视率受到中国更广泛的文化规范的影响:
在文化上有不同的意见[...](“关系”),它只是做生意的一部分。当然,最好的、最成功的是那些拥有这些关系的人。这将是一件积极的事情 [...] 任何职业或专业 [...] 纵然在工程环境中也是如此。— 首席 SDE 经理
除了交流利益之外,受访者暗示许多其他属性(例如勤奋和系统性)同样受到当地实践和期望的影响:
系统性的,如果有偏差,我不会感到惊异 [...] 个中一部分是文化。每天都在努力完成事情。那里的人会承认这没故意义;这便是它的事情办法,你为什么要改变它。 —首席SDE经理
第三个主题是间隔。受访者认为,由于阔别位于美国华盛顿州雷德蒙德的微软总部,一些软件工程师缺少对公司方向的理解。这可能会影响工程师对与组织目标保持同等的意见。一些知情人表示,近年来公司重心的浩瀚转变导致工程师将把稳力集中在他们的直接客戶而不是公司的整体计策上:
[...] 组织目标常日是通用的并且常常变革 [...] 一个开拓职员是伟大的,无论外部事宜、条件或事宜如何 [...] 一个伟大的开拓职员该当为了产品和客戶的利益而采纳行动. 在精良的公司中,这样的行为会给个人和组织带来回报和好处。— SDE2
第四个主题是某些属性可能与这些国家/地区正在设计的软件产品类型以及这些国家/ 地区的软件工程实践状况有关。对付与勤奋的负面关系,几位拥有非美国事情履历的开拓职员表示,他们曾在游戏行业事情过,他们必须进行“去世亡行军”,须要加班加点才能发布软件产品。这对付美国以外的受访者来说可能尤为突出,解释在英国和其他国家勤奋事情和拥有事情履历之间的负干系(表中第 16 行2个):
我亲眼目睹了这一点,随着韶光的推移,人们的事情效率逐渐降落,并且方向于做出更多短期决策 [...]资深SDE
4.2.5 客戶类型
拥有内部和外部客戶与坚持不懈之间存在统计学上显著的正干系关系(表中第 18 行)2 个)。然而,根据后续采访,我们认为这种关系可能是虚假的(这并不奇怪,由于 FDR 调度减少了但不会肃清有时发生的具有统计意义的关系)。
一位受访者试探性地供应了可能的阐明,即拥有不同需求的客戶会导致须要坚持不懈的相互冲突的哀求;不过,即便是他,也以为这种关系可能是巧合:
同时处理两组客戶也很令人沮丧,由于他们常常有相互冲突的哀求。它须要坚持不懈,能够在冲突面前坚持实行哪些。与我已经提到的内容比较,我没有更多的想法,以是这可能是巧合。—首席 SDE 经理
5 谈论在本节中,我们综合并谈论了关于精彩工程师的差异的知识。首先,我们通过谈论之前的事情来设定背景,然后我们谈论我们的学习见告我们什么,包括伟大工程师的差异和之前的事情。我们谈论对研究职员、教诲事情者和从业者的影响。末了,我们以对有效性和未来事情的威胁的谈论作为结束。
5.1 干系事情
之前的事情为软件工程师的许多方面供应了广泛而有代价的⻅解,但文献未能供应关于开拓职员技能的整体、以开拓职员为中央、生态有效的不雅观点。例如,许多研究只关注技能技能:比较新手和专家编程技能(例如,Sackman 等人。1968年; 古格蒂和奥尔森 1986年; 罗比拉德等人。2004年) 或提出软件工程毕业生应具备的技能(例如,打算课程 联合事情组2014; 布尔克等人。2014; 白格尔 2008年; Hewner 和 Guzdial2010). 一些研究关注人和社会成分,但没有将这些成分与技能技能联系起来(例如,Kelley1999; 罗佐 夫斯基2015年; 艾哈迈德等人。 2012). 其他先前的事情供应了关于最佳实践和信息需求的团队和组织不雅观点,这意味着必要的技能,(例如,Herbsleb 等人。1997; 伯姆1988; ⻉克等。2001年; 柯等。2007年; 歌手等。1997; 佩里等。1994), 但常日不明确办理个人 技能。行业从业者之前的一些事情做供应开拓职员技能的更全面和履历的不雅观点,结合技 术、人际关系和生理属性;他们的⻅解也得到现实天下的例后世昆裔争释的支持(布鲁克斯 1995; 布雷希纳2003年; 菲茨帕特里克和柯林斯-萨斯曼2009). 然而,这些著作的调查既不严谨也不完全(他们的目标也不是如此)。
最干系的先前事情,Baltes 和 Diehl 的综合软件工程专业理论 (Baltes and Diehl2018 ), 是一个有趣的补充到我们的研究。虽然“伟大”和“专家”密切干系,但它们并不完备相同。作为一个专家软件工程师意味着成功地生产软件;然而,作为一个伟大的软件工程师可能会超越工程成果。例如,“辅导”属性(⻅表1个):虽然成为一名精良的导师是工程师的空想属性(我们的许多受访者都谈论了从拥有导师中获益),但尚不清楚该属性如何使导师更像“专家”。因此,我们的排名供应的⻅解很有代价,有助于理解工程成果的主要性。
因此,相对付之前的事情,我们的研究试图比现有文献更全面、以开拓职员为中央、生态有效且更科学严谨。
5.2 伟大软件工程师的差异
相对付之前的事情,我们的研究表明,区分伟大工程师的属性全面地包括内在人格特质、与他人交往的能力、技能能力和决策能力。只管专家的意⻅指出了伟大工程师的显著属性的“联合武器”性子,但以前的研究事情很少检讨超过一种属性。须要全面深入地检讨软件工程师是我们研究的关键⻅解,也是我们事情的紧张贡献之一。
5.2.1 成为称职的编码员
我们的结果表明,至少在微软,成为一名精良工程师最主要的方面是成为一名称职的编码员。虽然许多关于伟大工程师的研究都在吹捧各种“软技能”(凯利1999),我们研究中履历丰富的工程师将编写好的代码的技能能力列为最主要的。理解这方面如何区分伟大的工程师很大略:没有代码,就没有软件;因此,伟大的软件工程师须要能够编写好的代码。正如 ACM 对软件工程师的定义 (Shackelford et al.2006年) 表明,编写代码是成为软件工程师的核心。
我们的调查结果表明,最高级别(在 Microsoft)的生产软件工程可能是一项繁芜的技能任务。知情人指出,不愿定性和繁芜性影响着他们的软件,包括底层依赖项、系统状态、外部调用者和/或互助伙伴组件。把稳编码细节和处理繁芜性的生理能力位居榜首可能反响了这种感情(⻅第4.1.1),以及其他产品和决策属性的整体高排名(⻅第4.1.3). 这加强了布鲁克斯的感情人月神话(布鲁克斯1995); 编写“生产”代码很难。
我们的创造与 ACM 的软件工程打算课程相同等(Shackelford 等人。2006年) 和 SWEBOK (Bourque et al.2014),紧张侧重于技能编码技能。这些创造也符合对工程师日常活动的不雅观察;尽监工程师花韶光做其他活动,但他们的大部分韶光仍旧花在编码上 (Ko et al.2007年; 拉托萨等人。2006年; 歌手等。1997; 佩里等。1994). 此外,我们的研究结果在很大程度上证明了旨在理解和缩小新手和专家编码员之间差距的研究事情的合理性(Sackman 等人,2017 年)。1968年; 瓦莱特和⻨克加里 1988; 古格蒂和奥尔 森1986年; 罗比拉德等人。2004年; 巴尔特斯和迪尔2018). 虽然专注于编码可能是近视的,由于它是软件工程师的基本技能,确保新手首先成为称职的编码员可能是一个很好的出发点:
但是,当我们评论辩论代码的质量、性能、空间以及它有多少缺点时——它有多健壮 ——以及它如何处理非常 [伟大的软件工程师的代码] 会有很大的不同 [...] 例如,当我以前在中国做游戏的时候,我在做一个棋盘分区程序 [...] 花了大约 3 个小时。然后我的 CTO 带着程序去优化。当他完成后,程序运行了 10 分钟。这便是人与人之 间可能存在的差异 [...]
— SDE2
相反,我们的研究结果表明,不考虑技能技能是仅关注工程师软技能的研究的紧张局限性(例如 Kelley1999; 罗佐夫斯基2015年; 艾哈迈德等人。2012). 正如 Cruz 等人所讨 论的那样,各种人为成分与工程结果之间缺少同等的关系。(2015年), 可能是由于技能技能的遗漏。毕竟,如果软件工程师不能开拓软件,那么所有其他属性可能都没有实际意义。
5.2.2 最大化你事情确当前代价
“⻛险和预期回报”的经济观点可以阐明我们研究中许多看似抵牾的属性和感情。当运用经济镜头时(⻛险投资和知识2000),考虑到概率未来值(可能为负)和可用于行动的韶光,一个连贯的主题涌现了。伟大的工程师通过考虑他们的软件产品的高下文,最大化他们当前行为的代价,并根据可能的未来代价和本钱进行调度,从而使自己分歧凡响。
(明显的)抵牾的第一个方面是,许多受访者谈论了伟大的工程师在设计他们的软件时着眼于未来,例如⻓期和预期的需求,花韶光和精力来确保他们的软件能够适应未来的变革(⻅表1个). 然而,其他受访者不同意,认为预测未来是徒劳的。实验、更快的迭代和做出改变的意愿更好。在他们看来,⻓期和预期的需求是有害的属性,会在可能不会、发生的未来上摧残浪费蹂躏精力。从经济⻆度来看,这些不雅观点是可以调和的。工程决策可能会招致“技能债务”(Kruchten 等人。2012); 因此,努力确当前代价须要考虑到未来可能的做事和维修用度。对付寿命⻓、维修本钱高的软件,工程师须要提前考虑。然而,在其他情形下,软件的利用寿命可能较短或维修/更新本钱较低(例如,与盒装软件比较,在 线做事);在这些情形下,伟大的工程师可能会精确地推迟未来的本钱:
[...] 你在为客戶编写软件?[...] 云?这是一场不同的比赛。如果您正在为云编写软件 [...] 缺点的本钱并没有那么高。我会修睦它。我不必将修复程序发送给您;我会在我的做事器上修复它 [...] 关键是我会冒这个险。— 高等开拓主管
(明显的)抵牾的第二个方面是期待伟大的工程师花韶光彻底思考这个问题。系统的属性意味着不要仓促下结论,也不要行动得太快;优雅的属性涉及深入思考以提出大略的办理方案;与周围其他部分的合营属性须要考虑与周围组件的关系(⻅表1个)。 然而,许多受访者也希望伟大的工程师能够勇往直前并“去做”。这进入未知属性的意愿是关于在信息不完全的情形下采纳行动的意愿,而没有剖析麻痹属性的实行明确是关于停滞思考的须要(⻅表1个). 从经济⻆度来看,软件只有在支配后才具有代价(例如赢利),对付某些产品而言,韶光安排会极大地影响这些未来收益。游戏和消费电子产品等产品的市场条件可能会因错过末了期限(例如假期)而导致严重的收入罚款;已支配软件中的毛病可能正在积极侵害客戶。从这个⻆度来看,关于行动速率的抵牾不雅观点具有经济意义。高质量的代码可以节省未来的维修和掩护本钱;然而,必须权衡这些节余与因不作为而可能损失的收入。因此,虽然高质量的代码常日是好的, 但也可能存在一些情形,尤其是靠近“交付截止日期”或面临高优先级缺点时,
[...] 乃至没有非灵丹灵药。人们有时,乃至我在发版截止日期之前这样做,你会做 一些快速而肮脏的事情,不幸的是它总是发生 [...] 常日,当你这样做时,你会意识到这一点 [...] -紧张SDE
⻛险的主要性和预期的经济回报可能因详细情形而异,由于 Microsoft 是一家营利性组织。只管如此,干系观点——“回归”或“重新打开”——常常在关于开源软件项目缺点分类的研究文献中谈论(Anvik 等人。2006年; Ko 和 Chilana2011年).
代价最大化作为一个经济观点,与人类行为的许多方面广泛干系(Ventures and Knowledge2000). 然而,有趣的是,软件工程教诲文献(乃至是那些关注软件工程中人为成分的文献)。2015年) 基本上没有提及经济思想在软件工程中的运用。在我们的调查中,履历水平的影响表明工程师须要真实天下的履历来理解何时以及如何完成某些任务。受访者认为,许多事情在理论上或孤立地听起来不错,但在相互竞争的担忧和严格的末了期限(⻅第 4.2.1 节)中放到现实天下的背景下就变得不主要了。比较之下,ACM 的课程 (Shackelford et al.2006年) 和 SWEBOK(IEEE 打算机协会等。2014) 规定了一组技能,但险些没有关于何时或是否利用这些技能的信息。软件架构和软件验证等主题在理论上很棒;然而,我们的研究结果表明,鉴于现实天下软件工程的经济性,最佳办理方案有时可能是“快速而肮脏的”。
5.2.3 进行知情决策
工程师面临关于构建什么软件以及如何构建软件的无数决策;因此,有效的决策是伟大工程师的一个关键属性。随着工程师在职业生涯中的成⻓,他们面临着越来越繁芜和模棱两可的情形,常日会对他们自己和他们的组织产生重大影响。我们认为,获取所需信息的过程是有效决策的最主要方面,而不是结果(结果常常被未来的不愿定性和外部成分所稠浊)。伟大的工程师通过精确的流程做出明智的决定,从而使自己分歧凡响。
总的来说,决策属性(第4.1.3) 在四组属性中排名最高;我们创造与“信息网络”干系的属性是最主要的。工程师常日没有做出决策所需的信息;伟大的工程师通过有效地得到必要的信息,然后做出明智的决定。在理性决策框架内不雅观察,系统属性,描述实际上从事 “信息网络”活动,寻求帮助属性,关注探求最有信息的人,思想开放,数据驱动这两个属性都描述了伟大的工程师乐意让新信息影响他们的决定的意愿:
忘怀。就像,五年前我曾经做过的让我成功的事情已经不主要了;事实上,它们现在可能会让我陷入困境 [...] 我开始达到评估 [工程师] 忘怀能力的地步。过了一段韶光,你所知道的东西中有三分之二或四分之三仍旧有代价,四分之一到三分之一是缺点的 [...] — 技能研究员
相反,我们专家谈论的许多不良工程师的负面特色是没有网络或没有利用精确的信息来做出决策的症状。例如,在谈论数据驱动属性,受访者感叹一些工程师有确认偏差,只选择确认他们初步理解的信息:
让我感到惊异的一件事 [...] 纵然我们受数据驱动,至少我们试图相信我们是 [...] 一些数据显示给我们,我们想出一些方法来忽略它。以是,大概每个人都认为他们是数据驱动的,但我看到人们想出借口阐明为什么数据不适用于他们。我已经看过一百万次了。— 高等 SDE
决策是每个人的日常活动;然而,做出精确决策的过程直到最近才在 Baltes 和 Diehl 的软件开拓专业知识理论中受到关注(Baltes 和 Diehl2018). ACM课程中没有提到它。只管如此,决策制订的各个方面——好的和坏的——散布在全体软件工程文献中。缺点分类,由许多研究职员检讨(Anvik 和 Murphy2007年; 郑等人。2009; Podgurski 等人。 2003年; 鲁内森等人。2007年; 伯特伦等人。 2010) 实际上是一个决策过程。Gobeli 等 人研究了软件工程团队中有效(和无效)的冲突办理方法,并谈到了决策(Gobeli 等 人。1998). 险些所有检讨工程师日常活动的研究都提到了与团队成员协商以决定如何最好地实现功能或修复缺点(Ko et al.2007年; 拉托萨等人。2006年). 现在是软件工程教诲事情者和研究职员更加关注其教诲和研究事情中的决策制订的时候了。
5.2.4 使他人能够有效地做出决定
笼罩在礼貌的描述中,例如与他人建立共同的理解和创造为每个人共享成功,我们在调查结果中看到了一个主题:请不要让我的事情变得更难。伟大的工程师通过让别人的事情更轻松,帮助他们更有效地做出决定(或者,至少,他们没有让他们变得更糟)来脱颖而出。这方面是一个普遍适用于大多数团队的组织问题(Simon 1973年),并且可能对软件工程等信息驱动和折衷密集型职业尤为主要。这也符合 Baltes 和 Diehl 包含的人格特质宜人性和尽责性(Baltes 和 Diehl2018)。
在阐明工程师拥有各种属性的好处时,这个主题浮出水面,只管更常⻅的是,不具有各种属性的缺陷。这种感情对付老实的 属性(⻅节4.1.3); 险些在所有情形下,受访者描述了缺少老实的工程师给其他团队成员带来问题的负面情形:
影响力来自傲任你的其他人,这种信赖的一部分是他们会去,“你知道吗?我知道这个人总是说真话。” 因此,当他们说某事好时,我会完备相信他们,由于他们并没有试图歪曲某些事情或使他们看起来更好或其他什么。— 首席开拓经理
管理期望属性包含有关工程师因不说出潜在延迟而使项目脱轨的谈论。自我反省属性哀求工程师在意识到当前操持不可行时主动变动操持,同样的感情也是寻求帮助属性的根本(⻅表1个)。 此外,对付许多受访者来说,创造共同理解的属性是关于伟大的工程师帮助他们理解各种选择背后的缘故原由——常日是陷阱和潜在问题——以便他们做出适当的决定。对付这些属性,受访者谈论了工程师不具备阻挡其他人采纳纠正方法以避免团队涌现不良结果并终极使每个人的事情更加困难的属性:
[...] 你真的想让 [伟大的软件工程师] 有更多的投入。如果有人不同意我们所做的权衡,请揭橥意⻅ [...] 他们确实参与并揭橥了他们的意⻅。— 首席开拓经理
在研究文献中,很少直接提到不要让我的事情更难。只管在软件工程事情的各种研究中都有暗示。例如,Ko 等人。成立保持意识成为软件工程师的一个主要关注点(Koetal. 2007年), 拉托萨等人。成立团队代码所有权和护城河(这促进了团队内部的理解并限定了外部滋扰)成为一个共同的主题(Latoza 等人。2006年),以及 Scrum 开拓过程中逼迫哀求的站会(Rising 和 Janoff2000) 可能是为了逼迫信息共享。利用不深入挖掘答案背后缘故原由的研究方法可能特殊难以检测到像这样的潜在感情。因此,元剖析等各种研究方法(Radermacher 和 Walia2013) 和二次剖析 (Ahmed et al.2012) 在用于研究工程师时可能会在理解上留下空缺。
5.2.5 持续学习
我们的研究结果表明,由于软件工程领域不断变革,那些不成⻓和进化的人有被淘汰的⻛险(参⻅第4.1.3)。 因此,我们认为,区分伟大工程师的不是一组特定的知识,而是学习的欲望、能力和能力。
不断学习的主题贯穿于我们的全体学习过程中;受访者常常表示,伟大是随着韶光的推移而得到和保持的。这匆匆成了多个干系属性——老实、思想开放和不断改进——从而在排名中名列前茅(⻅第4.1.3),以及与学习和改进干系的浩瀚人格属性的高排名。受访者还阐明了浩瀚属性如何有助于学习。好奇的属性——想知道事情是如何运作的——是学习背后的一个勉励成分:
好奇心 [...] 事情是如何运作的,为什么事情会运作,它们是如何运作的,拥有这种好奇心可能是一个精良工程师该当具备的一个好品质。想撕开的东西,弄清楚它是如何事情的,并理解为什么。— 首席开拓主管
两者都提高了他们做出精确决策的能力,并更新了他们的决策知识,包括学习和不断重新学习如何做出最佳决策。寻求帮助并整合对他人的理解,这两者都涉及有效地向他人学习(⻅表1个).
我们创造,学习新技能技能的能力可能与任何个人技能技能一样主要(如果不是更主要的话)。受访者,纵然是同一部⻔的受访者,也利用不同的技能。对付哪个特定技能主题(例如架构)是必不可少的,没有达成共识。相反,大多数受访者强调了学习必要的新技能和技能。
伟大不是一次性的称号。这是一个持续的进步。这与干系事情的不雅观点同等。持续学习的须要与 Baltes 和 Diehl 的软件专⻓理论中的“持续学习”密切干系(Baltes and Diehl2018),以及 ACM 课程(打算课程联合事情组)中谈论的“持续专业发展”2014). 该法令也包含在许多职业的道德准则中,例如医学(AMA2001年) 和“传统”工程 (NSPE2007年). 只管持续学习彷佛是所有学习型职业的基本方面,但这对软件工程师来说可能是最主要也是最困难的方面。作为一个相对较新的领域,创新和变革的步伐很快:
与其他科学或技能比较,打算机技能还很年轻。每年都有一些新技能,新想法。如果你只对你已经学过的东西感到满意,那么你可能会在几年后创造,你已经由时了 [...] 精良的软件工程师 [sic],他不断调查,投资。[原文如此] — SDE2
与大多数专业(例如医学)不同,打算的根本是可以改变的;哀求软件工程师当心地跟上步伐以避免过期:
以是,回到过去,如果你想优化一些你打算指令的性能。处理器变得越来越快,但内存引用却没有。有一天,打算内存引用比打算指令更故意义。除非您意识到这些事情何时会相交,否则您将站在历史的缺点一边并感到沮丧。— 技能研究员
5.3 对研究和实践的启迪
我们对精良软件工程师的独特属性的理解可以对软件工程研究、实践和培训产生广泛的影响。我们把稳到软件工程可能独占的考虑成分;但是,软件工程师是工程师,是雇员,是人。我们的许多⻅解可能广泛适用于/有益于许多人。
5.3.1 研究职员
我们的创造可能对研究职员有几个影响。首先,为了更好地理解和利用本文中谈论的属性,我们将从对属性进行操作的指标中受益。这些对付使严谨的科学能够更好地理解属性如何变革及其对团队和结果的影响至关主要。这些指标也可能为管理职员识别和培养人才、为新手提高水平以及为教诲事情者评估学习成果奠定根本。
其次,我们的创造确定了软件工程方法研究职员可能想要办理的几个痛点。例如,我们谈论了工程师短缺所需信息的问题(参⻅第5.2.3)。 办理这些问题的更好流程(例如通过逼迫信息共享)可能有助于软件工程团队。
第三,研究职员可能还想更深入地研究文化差异及其对有效软件工程的影响。由于许多软件开拓组织是跨国的,研究职员可能想要检讨组织该当(或不应该)适应当地文化规范(相对付制订组织标准)的条件。
末了,我们的结果为工具研究提出了几个新方向。例如,我们不知道有任何工具可以帮助工程师更彬彬有礼在电子邮件或评估权衡做决定时。工具研究还可以探索培训工程师,尤其是新手,使其具有空想的属性。
5.3.2 有抱负的软件工程师
我们的创造对新软件工程师有几个可能的影响。显然,我们的研究结果列举了一组优先属性,新工程师可能会考虑通过培训、实践、辅导或自我反省来改进这些属性。此外,这些信息还可以帮助工程师更好地向店主展示自己。无论我们确定的属性是否真的会导致卓越,我们的创造表明履历丰富的工程师(包括经理)重视这些属性;因此,有抱负的工程师可以考虑向店主展示它们,无论是在简历中还是在口试中。
5.3.3 软件工程卖力人
我们的创造也可能对工程师领导者产生影响。我们的研究结果列举了对高等和领导职位的工程师很主要的多个属性,例如辅导、提出寻衅和实际行动。因此,处于领导地位(或寻求成为领导者)的工程师可能希望改进这些领域。
除了自我提升之外,我们的创造还可以帮助管理职员做出更有效的招聘决策。他们可能会更好地确定适宜团队的具有所需属性的候选人。此外,我们的调查结果还表明,当前的招聘做法——常日是一日口试——可以改进。伟大工程师的一些主要差异属性,例如“渴望、能力和学习能力”,须要更多韶光来评估。演习操持等方法——历时数月,基于真实天下的项目——可以让管理职员更好地评估申请人的能力和成⻓潜力。
末了,我们的研究结果表明,软件工程师的管理者可能希望在他们的团队中培养空想的品质,建立一种有利于吸引、培养和留住精良工程师的文化。
5.3.4 教诲事情者
末了,我们的创造可能对教诲事情者有不同的影响。最主要的是,教诲事情者可以考虑增加当前课程中没有的主题课程。虽然决策不是 ACM 课程的一部分(Shackelford 等 人。2006年),我们创造与有效决策干系的属性是伟大工程师的关键差异属性。
专⻔关于决策的课程(例如西蒙的理性选择模型(Simon 1955年) 或软件工程决策的案例研究) 可能很有代价。
教诲事情者可能还想重新核阅他们的传授教化方法。伟大工程师最显著的特色包括如何而不是什么,而软件工程中的大多数解释都侧重于知识(什么),例如测试和剖析技能。教诲事情者可以考虑改进如何达到软件工程目标。例如,现有的基于项目的课程可以考虑评估代码的行为和非功能属性,例如优雅、预期需求和有创造力的。教诲事情者也可以考虑传授教化什么时候应利用各种技能,由于我们的结果表明,在现实天下中,避开最佳实践可能具有最大的经济意义。
末了,教诲事情者可以考虑明确谈论学生在学校不会学到什么,让他们意识到潜在的知识差距,并使他们能够在学术环境之外探求机会。例如,像这样的属性独立重生在学术环境中教授可能不合理,通过辅导/演习可能会更好地学习。
5.4 有效性威胁
与任何实证研究一样,我们的结果受到各种有效性威胁。首先,有一些威胁布局有效性。明显的问题是参与者对术语的不同阐明。我们从一开始就降落了这种⻛险,方法是选择在一个组织中进行我们的研究,那里的员工更有可能达成共识。我们通过进行预测试、根据须要调度和澄清调查问题(例如添加支持性引述和改用“开拓职员”一词)以及利用开放式结论问题来创造问题,进一步降落了⻛险。双峰分布的不存在表明没有明显的问题,我们的大样本量和统计测试减少了由于偶尔的误解而造成的噪音影响(考虑到受访者的不同背景,包括许多非英语母语者,这是不可避免的)。
其次,存在多种威胁内部的有效性。FDR 调度的利用以及与在印度和中国有事情履历可能隐蔽了其他有趣的关系。此外,我们的剖析仅检讨了评级和高下文变量之间的一阶关系。虽然,虽然二阶关系可能存在,但我们认为我们的选择是适当的,由于之前很少有研究支持调查二阶关系。我们研究的参与者是一组自选的工程师(特殊是后续访谈);他们的意⻅可能有偏⻅,并且可能存在对排名和关系的其他阐明。末了,纵然作者是具有现实天下软件工程履历的履历丰富的研究职员,也可能存在对数据的其他有效阐明。
三、还有各种有趣的外部的未来事情可能考虑调查的有效性问题。除了履历之外,我们没有针对其他特色(例如性别和非美国软件工程师)进行抽样。只管我们收到了来自女性(149 份答复,7.7%)和非美国受访者(351 份答复,18.2%)的许多答复,这该当让我们能够创造较大的系统差异,对有趣的亚群进行更深入的研究是值得的。属性的全面性是另一个外部有效性问题。我们利用了一组源自微软工程师访谈研究的属性。此外,只管我们在调查结束时有一个开放式问题,讯问我们可能遗漏的任何内容(没有创造缺失落的属性),但受访者在快速连续看到 54 个属性后识别缺失落的能力如何还是值得疑惑的。因此,在其他组织重复我们的调查之前,重复访谈研究以确定可能缺失落的属性是可取的。 微软本身也存在一些问题;显而易⻅的是,它是一个单一的组织。我们还明确地对非常有履历的工程师进行了过度抽样,他们可能会表现出特殊适宜 Microsoft 环境的思维和不雅观点。因此,只管我们的研究是一个坚实的出发点,但在未来,研究职员可能想检讨其他情形。例如,受访者谈论了金融和零售等非以软件为中央的行业的不利条件,这些行业会影响很多不雅观点;在其他成功的以软件为中央的组织(例如谷歌)复制这项研究也可能会产生有趣的创造。
5.5 未来事情
本节中谈论的所有问题都是有趣的主题和未来研究的情由。调查不太可能是实验性的(即我们不能将属性分配给工程师而对其他人遮盖),并且没有任何单一的不雅观察性研究可以建立因果关系。提高的道路是由许多研究职员在许多情形下进行的许多研究,对我们提高的道路进行三⻆丈量,加深我们对什么造就伟大软件工程师的理解。
6 结论在本文中,我们对精彩软件工程师的差异提出了全面的、以开拓职员为中央的、生态上有效的和科学上严谨的⻅解。随着我们的社会越来越依赖软件,像我们这样的研究和我们的事情可能引发的其他研究将至关主要。毕竟,没有伟大的软件工程师(一个某处座位上的屁股, 输入“提交”),就不可能存在伟大的软件。
致谢作者要感谢参与我们研究的 Microsoft 软件工程师。这项事情得到了 Microsoft、Google 和国家科学基金会 (NSF) Grants CCF-0952733、CNS-1240786 和 IIS-1314399 的部分支持。
参考
略。
出版者注施普林格·自然 (Springer Nature) 对已出版舆图和机构从属关系中的统领权主见保持中立。
保罗罗力(Paul Luo Li)是美国华盛顿州雷德蒙德 Microsoft 核心操作系统和智能边缘组织的首席数据科学家。他得到了博士学位。2016 年得到华盛顿大学信息科学学士学位,2007 年得到卡内基梅隆大学软件工程硕士学位。除了研究“什么造就了伟大的软件工程师”,Paul 还揭橥了关于软件可靠性工程、大型规模实验系统、局部差异私有数据的统计剖析,以及 AI 和 ML 的许多其他领域。
艾米·柯(Amy J. Ko)是华盛顿大学信息学院的副教授,她在那里研究编程的人性化方面。她最早的事情包括自动回答有关程序行为的问题以及支持调试、程序理解和重用的技能。她后来的事情研究了开拓职员和用戶之间的交互,以及通过帮助系统在网络范围内聚合用戶意图的技能;她与他人共同创立了 AnswerDash,将这些想法商业化。她最近的事情调查了编程技能和学习这些技能的新方法,包括编程措辞知识、API 知识和编程策略。她得到了博士学位。2008 年在卡内基梅隆大学人机交互研究所得到博士学位,2002 年得到俄勒冈州立大学打算机科学和生理学名誉学位。
安德鲁·⻉格尔(Andrew Begel)是美国华盛顿州雷德蒙德微软研究院 Ability 小组的首席研究员。他得到了博士学位。Andrew 于 2005 年得到加州大学伯克利分校打算机科学博士学位。Andrew 专注于研究和帮助自闭症患者实现就业并促进社交互动。Andrew 还探索了软件行业不断变革的事情⻆色,并研究了人工智能技能对软件工程日益增⻓的影响。








