查看原文
其他

不服,使用空格比使用Tab的人,薪水到底高在哪了?

2017-06-22 David Robinson 程序人生

感谢雁惊寒的翻译


根据Stack Overflow 2017开发者调查的原始数据,对所属国家地区、开发者类型、编程语言等多个维度进行统计分析。


最终得出使用空格的开发者比使用Tab的赚的钱更多这个结论。

我就是不服。


前一篇:Stack Overflow 报告深度解析



你是使用Tab还是空格进行代码缩进的?


这是软件开发者之间的一场“圣战”,众多辩论和玩笑的永恒主题。我使用的是空格,但我从来没有想过这个的重要性。但是今天,我们将发布Stack Overflow 2017开发者调查的原始数据,一些分析表明,空格与Tab的选择比我之前预想的更为重要。


有28657名自认为是专业开发人员(而不是学生或从前的程序员)的调查对象提供了Tab与空格使用情况的调查结果。在这个组内,有40.7%的人使用Tab,41.8%的使用空格(其中17.5%的人两者都使用)。其中,有12426人还提供了自己的具体收入。


对这些数据的分析让我们得出一个有趣的结论:对于代码缩进,使用空格的人比使用Tab的人赚的钱更多,即使他们拥有相同的编程经验。




实际上,使用空格的开发人员的中位数工资为59140美元,而使用Tab的开发人员的中位数工资为43750美元。请注意,所有的结果都从受访者的货币兑换成了美元。回答“两者都使用”的开发者与回答“Tab”的人的收入几乎差不多,因此,在下面的分析中,我把他们剔除了。


这是一个有趣的结果,但并不是完全令人信服。当我第一次看到这个结果时,我认为它可能会受国家或编程语言等因素的影响。例如,人均GDP低的国家的开发者更有可能使用Tab,并且他们的平均工资往往比较低。


我们来看一下这种情况是否在每个国家都存在。下面是受访度最多的几个国家。





欧洲的影响较小,印度特别大,但它确实在每个国家都存在,这表明它不是唯一的影响因素。


还有另外一个前提条件,我们知道不同类型的开发人员经常使用不同的缩进,例如,DevOps开发人员更有可能使用空格和移动开发人员更有可能使用Tab,这往往是因为它们使用的是不同的编辑器和语言。“开发者调查”询问了每个受访者使用的编程语言(Python,Javascript等)以及他们是什么“类型”的开发人员(Web开发人员,嵌入式开发人员等)。


看到了吗,这些组中使用Tab和空格的差距是不是差不多是相同的?




是的,这个现象在每个开发者分组中都存在。(即使对特定国家/地区的开发人员,或者具有特定开发经验范围的开发人员进行筛选,也可以得到类似的结果)。请注意,受访者可以选择多种语言,因此,每个分组在互相之间都在一定程度上存在重叠。


我大概看了看其他几个影响因素(例如教育水平或公司规模),并发现了基本相同的结果:空格在每个分组中都击败了Tab。既然原始数据可以取到,我鼓励统计人员自己检查一下其他影响因素。


评估影响


如果我们控制了可能会影响到薪水的所有因素,那么Tab和空格的选择会对收入产生多大的影响呢?


为了回答这个问题,我使用了线性回归模型,并根据以下因素来预测工资收入。


  • Tab与空格

  • 国家

  • 编程经验年限

  • 开发人员类型和语言

  • 正规的教育水平(如本科,硕士,博士学位)

  • 是否贡献过开源项目

  • 是否把编程作为一个兴趣

  • 公司规模


从这个模型得到的结果可以知道,使用空格的人比使用Tab的人的薪水高出8.6%(置信区间(6%,10.4%),p值<10^-10)。(通过对工资对数的预测,我们能够评估每个因素对薪金的影响百分比,而不是具体收入金额)。换句话说,使用空格,而不是Tab,价值额外的2.4年的工作经验


结论


这确实是一个令人惊讶的结果,当我开始研究这些数据时,我并没有想到会是这个结果。即使控制了很多的影响因素,这个结果也是令人印象深刻的。作为一个尝试,我试图控制调查数据里面上文没有提到的其他影响因素,但很难使影响减小,基本上不可能使其消失。


相关性不是因果关系,我们无法确定我们已经控制了数据集中存在的所有因素。如果你是数据科学家、统计学家或分析师,我鼓励你下载原始调查数据并自行统计分析。如果你想要重现分析过程,你可以在这里找到代码。无论如何,我们都非常有兴趣能听到关于这种关系的任何假设。


前一篇:Stack Overflow 报告深度解析,是程序员都来看看


更多阅读 


观点 | 深度学习,先跟上再说

顶尖程序员的五种思维模式,你具备吗?

工作3年的程序员应该具备什么技能|值得收藏


所以,你是使用Tab还是空格进行代码缩进的?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存