1、
最近,国外有一篇文章,标题很有趣,叫做《软件吃掉软件》[1]。
作者认为,大型软件和通用软件越来越强大,将会取代小软件和专门软件,相当于把后者都吃掉了。
他以自己的经历举例,云服务就取代了很多小软件。
“我亲眼目睹了这种情况发生的速度。我的第一份工作是在一家小型创业公司,我们拥有大量的物理服务器。现在,很难想象有任何一家Web创业公司会直接管理服务器,人们都是在亚马逊AWS控制台上点击几个按钮和链接。”
框架的发展,也使得从头编写代码的需求越来越少。
“程序员曾经需要从头开始构建东西,但是软件库的发展速度超过了我们的使用速度,甚至软件可以自己生成新的软件,这也是为什么你看到如此之多的“无代码”或“低代码”解决方案突然出现的原因。现在,自己编写代码的理由越来越少,你要做的只是将不同的产品集成在一起。”
他的结论就是,软件自动化技术的发展,可能将会减少对软件工程师的需求,未来的程序员可能会比现在少。
2、
我对这个话题很感兴趣,因为这是在预测未来的重大变化,而且跟就业趋势直接相关。如果未来软件的规模化和自动化,会抑制对程序员的需求,那么就不应该鼓励年轻人都来当程序员。
HackerNews论坛对这篇文章进行了热烈的讨论[2]。大部分人(都是职业程序员)的看法是,这种观点已经说了几十年了,根本是杞人忧天,实际情况恰恰相反,程序员变得越来越多。
“10岁时,我开始用Qbasic编码。我告诉爸爸,长大后想成为一名程序员。他告诉我,计算机可能很快就会实现自动化,就像他的工程行业一样,那时我会不得不找另一份工作。
但是,23年过去了,市场对程序员的需求不断上升,并且似乎仍在上升。
我想说,我们离软件自动解决大部分需求的这种抽象水平,还很遥远。正如文章所说,k8s、docker、kafka、databricks、redshift这些新工具,取代了很多程序员。但是,它们其实引发了更多对程序员的需求。
那些必须由程序员解决的问题,只是转移到了新的地方。”
就像上面引文所说,现实情况是需要编程解决的问题不是越来越少,而是越来越多,导致了程序员的增加。原文提出的两个论据,都站不住脚。
首先,云服务确实使得企业免去了服务器管理,但是你仍然需要有了解docker、kubernetes、数据库分片和索引、故障转移、备份、消息队列等等技术的人员。即使这些东西现在更加集成,更易于组合,但要弄清楚它们如何相互作用,如何设置,仍然是很复杂的一件事。
其次,“无代码开发”只能解决一些通用的软件问题,迟早会出现需要定制的情况。那时,就需要有程序员来修改代码,用户才能继续使用。
总之,世界正在变得越来越自动化,而自动化的本质是软件,所以对程序员的需求只可能越来越多,不可能越来越少。
3、
不过,论坛上面也有少部分人赞同原作者的观点,认为程序员越来越多只是过去的情况,未来未必如此。现在可能是软件开发“突变”的一个时间点,未来的发展可能不同于此前的情况。
市场需要更多了解docker和kubernetes这样新工具的人,这个是没错。但是,主要是大公司才需要这样的人,小公司用不到kubernetes。小公司面对的复杂性是有限的,只要使用大公司提供的简单解决方案即可,需要自己开发的部分几乎没有。
而且,如果公司的业务重点不在技术方面(你要知道大部分公司都不是互联网公司),使用“无代码方案”是最有效的。因为无需在软件工程上花费很多钱,就可以快速应用。
历史上,每当一个领域出现大量需要编程解决的问题,就会诞生一个通用的解决方案,解决掉90%的场景。然后,这个领域对程序员的需求就会快速减少。
“30年前,开发图形界面GUI很困难,VisualBasic改变了这一点。
20年前,制作一个Web应用很困难,PHP改变了这一点。
10年前,写一个复杂的网页布局很困难,Bootstrap改变了这一点。
现在,机器学习很困难,PyTorch正在改变了这一点。
每个棘手的问题最终都会产生一个有效解决方案,解决掉90%的场景。对于大多数公司而言,这个解决方案已经足够了。剩下的10%场景,其中一部分由某些公司付钱给程序员来解决,另一部分永远不会解决。”
所以,如果新的领域层出不穷,那么就会需要更多的程序员。但是,这些领域对程序员的需求都不会持久,一旦产生了解决方案,需求就会迅速降低。
4、
看完了上面的讨论,我的想法是,市场对程序员的需求,未来怎么变化,不能简单地回答增加或减少,而是取决于两个因素。
(1)人们需求增加的速度,能否超过软件自动化的进化速度。
现有的场景最终都会有通用的解决方案,需要雇佣程序员的情况,确实将越来越少。程序员的就业,主要依靠新出现的场景。而且,新场景的增加速度,必须超过软件自动化的进化速度,否则旧的解决方案也许会自己升级成新场景的解决方案。
(2)软件开发的难度,必须超过机器学习的进化速度。
程序员的数量,还跟软件开发的难度有关。难度越低,就会有越多的人从事这项工作。以前,你必须懂得计算机的底层硬件和汇编语言,才能开发软件,所以程序员很少。现在,软件开发越来越容易,已经不需要了解底层,只需要懂得某个框架即可,所以越来越多普通人变成程序员。
未来的编程肯定会变得越来越容易,但是,越来越容易的编程,也意味着机器可以轻而易举地代替人,来完成这些工作。所以,软件开发的难度必须超过机器学习的水平,否则需求的增加只会导致更多的机器自动编程,而不会导致更多的程序员雇佣。
(完)
References
[1]《软件吃掉软件》: