上一篇讲了程序员为什么喜欢写脚本,为什么喜欢分享自己写的脚本,最终如何通过这些开源代码逐渐构建出更大的项目的过程。反馈很强烈,对这个话题有兴趣的人很多,这次继续说这个话题。

如果对科技和软件行业的历史有一些了解,你大概会知道一些有趣的事情。在软件销售领域,除了程序员的开发工具,其他行业的专业软件价格都高的惊人。几十年前,开发工具还是一门好生意,利润很高,几家提供开发工具的软件公司经过了好几场大战,最终过去那些显赫的名字,逐渐消失了。微软虽然某种意义是那场战争的胜利者,但也不再和过去一样能从开发工具获取不错的利润。同时,在图像处理领域,Adobe的套件不仅始终处于垄断地位,价格也没什么变化。Adobe除了增加一些小功能,让软件更加好用,这些年最大的改进应该是从软件销售转移到云服务,这可不单单为了用户使用方便,云服务可以让那些买一套软件用10年再也不升级的用户持续付费。算下来10年使用成本反而还增加了。AutoCAD有什么变化吗?3D solid有什么变化吗?都差不多,变化不大,但继续安享高额利润。

曾经的软件行业利润最大的那些公司,只有为程序员服务的那些被杀死了。程序开发领域,这些年的变化可谓翻天覆地,程序员们构建出来的项目规模已经千百倍于那个年代,复杂性,工具的先进性都不可同日而语。但这些工具和软件,反而变成免费或者非常便宜了。为什么不同行业差距这么大?因为程序员们几乎在自己需要用到的所有领域,都以开源的方式创造出了商业软件的代替品。在这个领域工作的人们有了选择权,这些开源软件起初并不好用,但是它确实能用,又免费,还有代码可以自己改,对于很多情况,虽然简陋,但这也是足够了。在这个领域的商业公司受到了这些免费产品的竞争,利润率自然下降,其他不能自己制造工具的行业,比如设计师们用的那些软件,受到的挑战就小的多,仍然被大公司主导着产品开发进程。

和其他行业不同,程序员工作的目的之一就是提高自动化水平,甚至取代自己的工作。换句话说,大概没有什么专业人员和程序员这样,以砸自己饭碗为工作目标。人们通常会注意到,数字化和计算机的发展慢慢取代/改变了很多行业,杀死了很多职业,但一般不会注意到,程序员杀死最多的职业其实是自己这个职业。一代又一代更好的工具和架构被发明出来,通常就代表靠上一代工具生存的那些职位消失了,如果停止学习,在这个行业里面很难有人能5年之后还能继续工作。当然,还是有很少一部分人能用一个技能维持很多年的工作,但他们通常聚集在其他行业中,比如为金融保险或者企业信息系统提供服务和支持的职位。在真正纯粹的IT技术和互联网产业,技术的更新换代速度相当快。

在其他工程领域,工程师们当然也创造自己使用的工具,无论是机械还是电子,很多工具和方法也是工程师发明的。但是受现实世界资源限制,他们创造工具和推广标准的速度不可能那么快,创造工具的成本也过高,很难和程序员这样,把制造工具和改善效率做为一种日常活动。在软件行业,有极大比例的程序员是同时制造产品和工具的。互联网普及到今天这个状态之后,在新一代程序员里面要找到完全没为开源项目贡献过任何代码的人也不太容易了。大家多少都会在工作之余或多或少贡献点什么。像程序员这样,一个职业中大部分劳动者都在制造工具的情况,其他行业是很少见的。

工程师和科学家不同,他们可能并不能创造历史上的关键节点,但是可以在有限的资源内作出最好的实现。软件领域就是这样,较低的工具成本让更多人容易进入这个领域,从而有了更加富裕的劳动力和创造力,让工具和基础设施的完善变得更加容易和快速,整个行业是滚动向上发展的。等行业水平发展到一定程度之后,它就成了完整的体系,这时候这些工具的使用范围和影响力就不仅仅限于计算机行业了。我们现在就能看到这种现象,几乎所有行业都在依赖类似的基础工具。一个比较直观的典型例子就是scipy, 它是用Python语言实现的科学计算包,现在几乎所有理工科的研究工作都会用到它。别管什么专业的研究生,要做数据研究,就得会写点Python,因为要使用它做计算。但scipy这个在科学研究领域已经是必须使用的东西,并不是科学家开发出来的,而是程序员Jim Hugunin发起的,在最开始的时候,它还很不完善,性能也不好,但至少是可以用的,随后越来越多的工程师,大学教授等等加入项目,逐渐完善它,最后变成今天比较完善的状态。

除了某个开源程序包的影响,现在几乎所有学科都面临做大规模的计算现实问题。这时候他们会和计算机行业使用同样的系统基础,因为再也没有更好的廉价解决方案了,甚至不廉价的解决方案也很难有。既然用了这些解决方案,因此衍生出来的运维,部署,并行化,监控……一系列的现实问题,自然也就都和计算机行业完全一致。无论是架构还是脚本,或者是现在使用云计算服务以及容器,这些被软件工程师们创造出来的架构方式和工作方式,最终也被其他行业采用了。

程序员从对自己工作效率不满意开始,逐渐创造工具和方法论,最终形成一套完整的体系可以被其他行业使用。大部分人在做这些事情的时候,并没有改变其他行业的野心,只是为了解决自己的问题。但这个行业比较良好的工程意识逐渐让这些解决自己问题的思路和工作成果可以被抽象出来,推广开,影响更多的人。也提高了其他行业的效率和作出更重要成果的机会。这些都是软件行业给世界的礼物。

甚至程序员直接使用的工具,比如编辑器或者版本管理工具,对其他行业也是有很大帮助的。可能这些工具的思路和界面对于非程序员还不够友好,但是花一点时间学习,就会感觉到他们的优势。比如,我一直四处劝说文字工作者尝试使用github,尤其是多人协作的项目,这可以让他们协作效率大大提高。遗憾的是至今说服成果还不大,可能对于他们开始学习难度还是很大,还需要更多的辅助工具和教学方法。不过我相信这些工具早晚会变得更加普及。

现在我们所生活的这个世界,间接被程序员成果影响的行业太多了,绝不仅仅是手机上看到的这一点点纯互联网领域的变化。从医疗到制药到材料,金融和经济以及社会,几乎所有领域都需要靠计算来决策,实现计算的背后靠的仍然是程序员创造的这些基础工具。

人们应该感谢这些总想砸了自己饭碗的家伙们。


参考备注