现在,是时候谈一谈 2020 年及以后的软件工程状况了。
本文以 GitHub Octoverse 数据为基础,加上我作为一个拥有十年经验的软件工程师的经验和观察。软件工程在过去 20 年来实现了爆炸式的增长,而且这种势头似乎还在保持。据《财富》(Fortune)数据显示,2019 年全球前 15 家科技公司的总收入达到了创纪录的 1.67 万亿美元,比 2018 年增长了 2%。今天的软件公司比以往任何时候都要多。
此外,现有的非软件公司在产品中引入了更多的软件组件,从汽车到洗衣机,无所不包。未来是软件的天下,但并非所有的软件都是平等的。确定软件最有前途和发展最快的领域,可以帮助你实现事业和项目的腾飞。投资于一个发展中的领域,可以帮助你更容易找到一份工作,并获得更高的报酬,帮助你为项目筹到资金。那么,闲话少叙,直入正题。
编程的发展
2019 年,有 1000 万开发者新人进入了 GitHub。我猜想大部分新用户都是来自美国以外的地区,但即便如此,这仍然是一个巨大的数字。非常感谢 GitHub,能够在几乎没有任何问题的情况下,将规模扩大到这样的程度,我对 GitHub 表示敬意。
这些新开发人员为来自世界各地的 4400 多万个仓库做出了贡献。80% 的代码提交来自美国以外的国家和地区。同样,在美国以外的国家和地区,科技行业也在快速发展,GitHub 的数据也表明了这一点。也许在几十年内,硅谷将会有多个竞争者争夺世界软件工程中心的头把交椅。
还有一点要注意,GitHub 的数据并不能代表整个世界,但它能很好地反映出总的趋势,因为它是世界上最大的代码托管提供商。
去年,在全球财富 50 强企业中,近 70% 的企业为开源做出了贡献。70% 这一数字是巨大的,根据 GitHub 的数据,这一数字还在不断增长。不仅如此,去年 GitHub 上有 290 万个组织,这个数字听起来大得离谱,但随着越来越多的公司将软件组件引入到他们的流程中,即使再大的数字也将会变得司空见惯。
开源的发展
平均而言,GitHub 上的每个开源项目都有来自 41 个不同国家和地区的贡献者。这再次表明了美国以外的国家和地区的增长速度。
继美国之后,开源的使用在中国、印度和德国加快了速度。中国的开发人员分叉(Fork)和克隆的项目比去年增长了 48%。我想,没有人会对中国软件的增长感到意外。问题不在于中国是否会超越美国,而是在于何时超越美国。
开源使用情况
如果我们从大洲层面来看,亚洲已经领先于美国和欧洲。然而,看到南美洲和非洲远远落后,单单是欧洲的贡献还不到三分之一,这三大洲的人口加起来有 16 亿,出现这样的状况,是令人悲哀的,也有些令人惊讶。
提示:我专门写过一篇如何正确使用 GitHub 进行软件开发的文章。在这篇文章中,我提供了完整的 GitHub 工作流程,同时在我的 android-docker 开源项目上完成了一些实际工作。同时,我还提供了一些关于高效使用 GitHub 的实用评论和技巧。如果你想阅读的话,链接文末。
顶级库
在每一种编程语言的前 50 名开源包中,包括 JavaScript、Python、Ruby 等,都有大量的依赖项目。例如,尽管平均每个直接贡献者不到 40 个,但流行的 npm 包可能是数以百万计的其他仓库的依赖项。顶级依赖包有 Java、Python 和 JavaScript,这一点毫不奇怪。它们是目前排名前三的编程语言,我并不认为这一状况很快就会改变。
热门项目
随着开源运动风起云涌,人们对开源的贡献也越来越大。我强烈建议大家为开源项目做出贡献。这是一个进入开源社区并获得宝贵经验的绝佳机会。此外,你还可以在简历中列出你所创建和贡献的项目,这是一个很大的加分项。
你可以在表格中看到,去年贡献最多的项目也是最有用的项目之一。例如,Visual Studio Code 是最好的编程文本编辑器之一。TensorFlow、React Native 和 Kubernetes 也是如此。它们成为了无价的工具,人们喜欢它们并希望用自己的贡献来改进它们也就不足为奇了。
顶级编程语言
现在,是时候分析一下编程语言了。不难看出,作为 Web 的主要支撑语言,JavaScript 仍然排名第一,这并不令人震惊。我预计 Python 会在某个时候超越 JavaScript,但具体什么时候,我们还得拭目以待。事实上,在 GitHub 之外,Python 可能已经是第一大编程语言了。和以往一样,Java 与 PHP、C++ 一起并驾齐驱。
让我感到惊讶的是,TypeScript 的迅猛崛起。我曾预言,一旦 TypeScript 所有好的特性最终都出现在 JavaScript 本身中,它就会像 CoffeeScript 和其他许多东西一样被丢弃。相反,只有少数几个 TypeScript 特性最终出现在 JavaScript 中,包括私有字段 / 静态字段、可选链接和 null 合并。TypeScript 保留了它的独特特性,并继续在市场上大行其道。然而,我仍然认为,使用简单、现代的 JavaScript 会让 TypeScript 以简单和干净的方式脱颖而出。TypeScript 增加了大量的复杂性,包括工具和依赖项(即第三方类型定义包),我认为这并不值得。另一方面,我不是预言家,所以我们只能拭目以待,看看它是否与 CoffeeScript 有同样的命运。
数据科学与机器学习
2019 年是数据科学和机器学习的一年。我完全期望,在几乎整个十年中,它将会以同样的轨迹持续下去。分析和理解海量数据具有很大的价值。尤其是与机器学习相结合,这两者所产生的的价值可能会超过计算机科学的其他所有分支。我想说的是,唯一能让数据科学和机器学习退居幕后的是量子计算的突破。否则的话,在计算机科学这个最热门的分支领域投入一些时间是个好主意。就像我常说的那样,如果你投资一项正在发展的技术,你就能随之成长。
机器学习在生活的方方面面都有应用。利用机器学习预测购物行为并提供定制的推荐就是一个很好的例子。像 Siri 和 Alexa 这样的虚拟个人助理,像 Google 和 Microsoft Teanslate 这样的自动化翻译服务,垃圾邮件过滤器、自动化客户支持等等,都越来越多的以机器学习为基础。
云计算、DevOps 与安全软件
系统的复杂性和规模越来越大。此外,像机器学习这样的特定任务需要非常规的服务器硬件,如 TPU,即张量处理单元(Tensor processing units),这是一种定制设计的硬件,用于加速机器学习任务。这就导致了企业内部需要进行大量的工作来容纳服务器并手动维护它们。解决这个问题的最明智的做法是使用 DevOps 工具实现服务器部署和维护的自动化。将这些服务器迁移至云计算供应商那里也是合理的,这样你就不必再看别的裸机服务器了。
随着对云托管和 DevOps 需求的增加,这些技能在市场上越来越受到青睐。如果你有从事硬件和网络工作的愿望,那么尝试一下云服务提供商和 DevOps 工具,是一项不错的投资。大多数云服务提供商都提供了慷慨的免费套餐,因此,你可以在 Google Cloud、Amazon Web Services、Azure 或其他任何较小的云服务供应商创建一个免费的账户,并立即开始试验和学习。
显然,将你所有数据都搬到云端上,会带来重大的安全隐患。这增加了任何从事 DevOps 或云的人对安全意识的需求。此外,这也增加了对专用软件和网络安全工程师的需求。投入时间去了解云计算和 DevOps 决策的安全影响至关重要。如果你打算面试 DevOps 或任何基础设施的职位,你应该会非常强调安全性。
总结
软件的发展如盛壮之时的骐骥,一日而驰千里。它正在融合到其他所有的行业领域。既然软件是一个不断发展的领域,那么学习编程并提高自己的软件工程技能,在未来会有巨大的回报。此外,找出软件发展最快的领域,并将时间投入其中,可以让你获得更好的发展。不断学习,努力寻找一切可以利用的机会,或者是可以在不断发展的软件领域中,找到可以为小众服务的产品,当这个小众成为主流时,你最终可以将一个成功的产品掌握在你的手中,这可能成为你未来的成功。如果失败了,那将是成为产品专家之路的一次巨大的经历。
本文引用的资源:
GitHub Octoverse
Wikipedia:最大的信息技术公司列表
Stack Overflow 年度开发人员调查
Hired:软件工程师状况
本文提到的文章:
《如何正确使用 GitHub 进行软件开发:我的完整开发工作流程》
(How to Correctly Use GitHub for Software Development - My Full Dev Workflow)
原文链接:
https://quanticdev.com/articles/software-engineering-in-2020/
评论