
调查9万名程序员后
我们发现了一堆不为人知的秘密

Stack Overflow的年度开发者调查是面向全球开发者的规模最大、最全面的调查,每年的调查内容会涵盖开发人员最喜欢的技术以及工作偏好等内容。今年是Stack Overflow连续第九年进行开发者调查,吸引了将近9w名开发人员参加。
作为全世界最流行,最顶级的技术问答社区,Stack Overflow的开发者调查具有相当的权威性。今年的调查中有不少亮点,还有很多“万万没想到”,比如Rust才是最受喜爱的编程语言,但Python增长最快,已经超过Java在开发者最喜爱的编程语言榜中排名第二;中国的开发者最乐观,他们认为现在的人会比父母辈拥有更好的生活;学术研究工作者的薪酬较低,对工作的满意度也最低,积极寻找新的工作机会主动性也较强。
以下是本次调查报告的一些主要结果。
● Rust是最受喜爱的编程语言,Python则是增长最快的。今年Python超过Java在开发者最喜爱的编程语言榜中排名第二。
● 超过一半的受访者在十六岁时编写了第一行代码,但这种情况因国家和性别而异。
● DevOps和SRE专家是薪酬最高、经验最丰富、对工作最满意的人员,并且他们正在寻找寻找面向更底层业务的新工作。
● 中国的开发者最乐观,他们认为现在的人会比父母辈拥有更好的生活。法国和德国等西欧国家的开发者对未来最悲观。
● 在考虑阻碍生产力时,不同类型的开发者有不同的挑战。男性认为非开发工作有挑战,而女性受访者更多地认为不良的工作环境会对她们造成阻碍。
● 数据表明Stack Overflow每周为开发人员节省30到90分钟的时间!以下是一些开发者和技术相关的调查结果。
一半开发者是全栈开发人员

约有50%的受访者是全栈开发人员,约17%的受访者认为自己是移动开发者。很多人认为自己的工作是多个角色的组合,最常见的是后端、前端和全栈的相互组合。高度相关的组合包括数据库管理和系统管理,DevOps和SRE,学术研究员和科学家,以及设计和前端开发。
80%的人编程是爱好

许多开发者是在工作之外编写代码。大约80%的受访者表示他们将编程作为业余爱好。个人其他身份的职责可能减少对编程的参与度:有孩子或其他人需要照顾的开发人员不太可能将编码作为一种爱好,女性受访者也不太可能将自己的代码视为业余爱好。
近一半的开发者编程经验不足10年

大多数开发者的编程经验不到5年,近一半的受访者表示自己的开发经验少于10年。
超一半开发者在16岁时写下了第一行代码

无论是网页制作还是Hello World,总体而言有超过一半的受访者在十六岁时编写了第一行代码,但这其中差异很大。与印度和巴西相比,澳大利亚和英国等国家的平均初始编程年龄要早两年。这其中也有性别的差异:女性编写第一行代码的平均年龄要晚于男性。
90%的开发者为男性
总体来看,90%的受访者都是男性。在美国,印度和英国等地区,学生中的女性开发者比例高于专业开发者中的女性比例。

75%的专业开发者年龄小于35岁

调查结果显示,75%的专业开发者年龄小于35岁。
年龄、经历和国家的关系

发展中国家如印度的开发者平均年龄为25岁左右,而发达国家如美国、英国、澳大利亚的开发者平均年龄为32岁左右。而每个国家开发者的经验和平均年龄正相关。
70%开发者自认为能力高于平均水平
近70%的受访者表示他们的能力高于平均水平,而不到10%的受访者认为他们的能力低于平均水平。
男性比女性更为认可自己的能力。

10年经验的开发者对能力更自信

初级开发人员对自己的能力评估较为保守,认为自己的能力达不到平均水平,而且这种影响在有了10年经验后才会好转。初级开发人员中存在冒名顶替综合症:普遍的自我怀疑,有不安全感以及害怕被欺骗。受访者中,男性比女性群体更加自信。
业余生活
这是Stack Overflow连续第二年询问受访者是否有孩子或其他家属要照顾,近40%的受访者表示有,数据比去年增加。

那些表示没有家属要照顾的开发者平均年龄较小,经验较少。超过60%的10年+经验的开发者有子女或其他家属。
开发者在使用什么社交媒体

在开发者群体中,Reddit和YouTube排第一和第二。但是在现实生活中,Facebook是全球最受欢迎的社交媒体,而reddit在全球排名中甚至没进前10。
技术和工具
最受欢迎的编程语言
编程语言、脚本语言和markup语言
JavaScript连续第7年蝉联最常用的编程语言,但Python的排名再次上升,略微超过Java。Python是当今增长最快的主要编程语言。

Web框架

jQuery是这些Web框架中使用最广泛的。相比起Angular,今年更多的开发人员在使用React.js。
其他框架、库和工具

Node.js是最常用的。越来越多的开发人员在使用.NET而不是.NET Core,深度学习框架中,TensorFlow比Torch / PyTorch更受欢迎。
数据库

MySQL蝉联最常用的数据库第一名。PostgreSQL第二,SQL Server第三。
最喜爱和最想学的
语言

Rust连续第四年成为受访者中最受欢迎的编程语言,紧随其后的是Python,这是当今发展最快的主要语言。这意味着,按比例,更多开发人员希望继续使用这些语言而不是其他语言。
VBA和Objective-C是今年最可怕的语言。最可怕的意味着目前使用这些技术的开发人员中有很大一部分表示没有兴趣继续这样做。
Web框架
React.JS和Vue.JS是开发者最喜爱和最想学的框架。Drupal和jQuery是最可怕的框架。
其他框架、库和工具
.NET Core和Torch / PyTorch在各自的生态系统(分别为.NET和Tensorflow)中的使用率都低于其他对标产品,但更受开发人员的喜爱。Chef和Cordova则当选这一类别中最可怕的工具。


数据库
Redis连续第三年成为最受欢迎的数据库,这意味着与其他数据库相比,更多开发人员希望继续使用Redis。Couchbase和Oracle是最可怕的数据库,MongoDB连续第三年成为开发者最想使用的数据库。
开发环境和工具
最受欢迎的开发环境





Visual Studio Code是今年开发者环境工具中占主导地位。开发人员类型和角色在工具选择方面存在差异,但Visual Studio Code是所有类型开发者的首选。为移动应用编写代码的开发人员更有可能选择Android Studio和Xcode。Vim是DevOps和SRE开发者的流行选择,数据科学家更有可能在IPython / Jupyter、PyCharm和RStudio环境中工作。
开发者主要操作系统
约一半受访者选择Windows操作系统,剩下的人的选择MacOS和Linux各占一半。
容器使用



当被问及他们如何使用Docker或Open Container Initiative等容器技术时,大约一半的受访者表示他们没有使用任何此类技术。那些使用容器的人最常将其用于开发工作。
现实世界的区块链
组织如何使用区块链技术?

我们调查的大多数受访者表示,他们的组织没有使用或实施区块链技术,报告显示区块链最常见用途不在于货币。另外,表示其组织正在使用区块链技术最多的是印度开发人员。
开发者对区块链技术的看法

当被问及他们对区块链技术的基本看法时,我们调查的受访者对其广泛的用途持乐观态度。然而,持乐观态度的人主要集中在年轻、经验不足的开发人员。受访者越有经验,就越有可能表示区块链技术是对资源的不负责任的滥用。
收入最高的技术
全球收入最高的相关语言是什么?
在全球范围内,收入最高的相关语言是Scala,平均收入为14.3W美元;其次为Clojure,平均薪酬为13.9W美元;再次是Go,平均薪酬为13.6W美元;机器学习中受欢迎的Python收入为1.16W美元,JavaScript为1.1W美元。

相关联的技术
技术之间有什么关系?
技术之间相互关联,形成一个生态系统,同一名开发人员往往会使用该生态系统中的多项技术。该网络图通过显示哪些技术彼此相关度最高来证明这一点。我们在左侧看到一个大型集群,这表示Web开发(使用JavaScript、HTML /CSS、TypeScript和React.js)通过SQL连接到微软的技术(使用C#、Visual Studio和.NET Core)。在左下角,我们看到一个移动的星座,将Java、Kotlin、Android和SQLite连接到iOS和Xcode。今年,我们观察到一系列运营技术,如Docker、AWS和PostgreSQL通过Linux连接到Python生态系统网络。其他较小的相关集群还包括Scala / Spark /Hadoop、C / C ++ / Assembly以及更小的技术,如特定语言的IDE或框架。

就业
就业状况

超过90%的专业开发者至少有兼职工作,全职工作的开发者占比最大,为73.9%,而专业开发者全职工作的占比更大,为84.2%。
就业地理分布
公司类型&行业
软件开发人员在技术领域内外的各种行业中工作。在我们今年列出的行业选项中,更多的专业开发人员表示,他们从事通用软件开发(未另行规定)、IT和金融/银行业务。在咨询、政府和非营利组织等行业工作的开发人员拥有多年的专业编程经验,而从事Web开发或SaaS工作的开发人员整体编程经验的中位年数约为开发者整体编程经验的一半。



公司规模
开发人员在各种规模的公司工作,小型企业到大型企业组织都有。与包括欧洲在内的世界其他地区相比,美国更多的软件开发人员在大公司工作。开发人员越有经验,他们就越有可能在一家大公司工作。平均而言,每增加一年的专业编码经验,组织规模增加30人。

职业价值观


正如我们在前几年发现的那样,开发人员对他们的职业生涯往往比对现在的工作更满意。工程经理和高级工程主管、SRE和DevOps专家对工作的满意度最高。工作满意度最低的开发人员包括学术研究人员、教育工作者、科学家和设计师。
开发者对管理者的信心
工程管理是一门技术学科,它影响开发人员和他们每天所做的工作。幸运的是,超过80%的受访者对他们的管理者了解他们在做什么比较或非常有信心。

开发者需要成为经理赚更多钱吗?

当谈到他们对把工程管理作为职业的看法时,有一半的受访者认为他们不一定需要成为人事管理来继续涨薪。
开发者未来想转向管理层吗?

受访者对自己的职业规划存在分歧,没有单一的回应占主导地位。那些说自己不想成为管理者的开发人员专业编程经验是那些想要成为管理者的开发者的两倍。目前对转向管理层感兴趣的开发人员可能走上这条职业道路,或者有些人会改变他们的想法!
找工作
求职状态

只有15%的受访者正在积极寻找工作,但近四分之四的开发人员有兴趣了解新的就业机会。
求职状态地理分布

谁在积极找工作?

在专业开发人员中,那些担任高级工程主管、DevOps专家和SRE的人找工作的积极性最低。在学术界和数据科学家(我们知道经常重叠的类别)工作的开发人员正在找工作的占比最高。
开发者距上一次换工作多久了?
超过一半受访者表示距上一次换工作在两年之内;软件开发者换工作是常态。
面试经历
我们今年向专业开发人员询问了他们上次成功获得工作的面试过程,以及他们经历过哪些任务类型或面试。最常见的经历是接受高级人员和经理的采访,只有不到40%的受访者表示他们被要求写代码。女性更有可能被要求完成一个带回家做的项目(更多的是前端和数据科学),并且不太可能和男性一样被要求解一道和申请工作相关的脑筋急转弯。



我们还询问受访者是否曾被要求在面试中解Fizz Buzz,近15%的受访者表示有过这种经历。
更新简历状态

当被问及他们最后一次更新简历时,我们的受访者大多表示开始找新工作是动机。那些重新进入劳动市场的人表示,原因包括其他领域的职业变化、从军队退休,以及全职照顾孩子。
工作中优先考虑的因素
最重要的工作因素

我们要求受访者比较两个薪酬、福利和工作地点相同的工作,并考虑哪些特征会影响他们在两者之间做出选择。在考虑工作时,不同类型的开发人员应用不同的优先级策略。在技术领域属于少数派的开发人员群体在评估新工作时将办公环境和公司文化列为最关注的点,并且更有可能表示组织的多样性是他们最关心的问题。
总体上来说,选择工作时,语言、框架和其他技术是开发者最优先考虑的因素,其次是办公室环境和企业文化。
开发者远程工作的频率?

大约12%的受访者表示他们是全职工作,比两年前的数字略有增加。全职远程工作的开发人员的专业编程经验平均比从未远程工作的人大60%。每个月少于1次远程办公的开发者占比最大,为43%。
开发实践
开发者的工作构成

我们询问受访者是否使用时间表或规范来安排规划他们的工作,只有20%的人表示他们的工作与这样的规划文档密切配合。那些采用更灵活方法或不使用任何时间表或规范的人更有可能拥有更长时间的专业编程经验;严格按照时间表或规范工作的开发者往往相对经验更少。
产出最大的挑战

当被问及他们对生产力的最大挑战是什么时,开发人员最常见的回应包括分散注意力的工作环境、会议和与开发无关的工作。性别少数群体受访者不太可能表示负责非开发工作对他们来说是一个问题,而是不良的工作环境。
开源软件的质量

很少有受访者认为OSS(开源软件)比专有或闭源软件差,但是认为OSS通常质量更高和认为两种类型软件质量相当的人占比大致相同。不出所料,为开源做贡献的开发人员更有可能表示OSS质量更高。
代码评审
你会把代码评审作为工作的一部分吗?

每周评审代码时间

大多数受访者表示他们将代码审核作为工作的一部分,因为这是软件工程的重要组成部分。不过,这不是大多数开发者每周工作的主要内容。大约四分之三的开发人员表示他们每周花费五个小时或更少的时间来审查代码。
单元测试
你的公司进行单元测试吗?

工作满意度和单元测试的关联

我们询问受访者他们的组织是否进行开发单元测试,他们绝大多数赞成单元测试,无论目前是否在进行测试。事实上,进行单元测试的公司的开发人员工作满意度也略高。
编程时来点音乐集中精神

网络显示56,643个回复中最常出现的词汇;较大的点表示使用频次更大,较重的连接线表示更常一起使用的词。
当被问及什么音乐类型或艺术家更能帮助他们集中注意力时,受访者的回答包括各种各样的音乐,如古典音乐、电子游戏或电影配乐,比我们知道的更多种类的重金属音乐,以及没有歌词或人声的音乐。还有少部分受访者表示他们更喜欢安静的环境以集中注意力。
收入
不同开发者类型的薪资
工程经理、SRE、DevOps专家和数据科学家/工程师薪水最高。从印度到欧洲再到美国,全球平均收入最高的岗位非常一致。

不同开发者类型的薪水和经验

当然,拥有更多经验的开发人员可获得更多报酬。但是,某些类型的编程工作在相同的经验水平下获得的报酬更高。相同经验水平下,数据相关的开发人员(数据科学家和工程师)以及从事DevOps和站点可靠性工作的开发者收入更高,而学术研究人员和教育工作者收入较低。
不同语言的薪酬和经验
出现在该图表中蓝线上方,使用Clojure、Scala、Go、Rust和R语言的开发人员,在相同的经验条件下获得更多报酬。然而,使用蓝线下方语言的开发人员,如PHP、汇编和VBA,即使有多年的经验,报酬也更少。此图表中圆圈的大小表示与其他开发人员相比,使用该语言的开发人员数量。

每周工作小时数
今年,我们第一次询问受访者他们每周工作多少小时,四分之三的人表示他们每周工作时间少于45小时。高级管理人员、产品经理和工程经理,以及东欧,印度和美国的开发人员更有可能长时间工作。


