16

软件吃软件,编程工作会越来越多吗? - 阮一峰的网络日志

 3 years ago
source link: http://www.ruanyifeng.com/blog/2020/05/will-programmers-increase.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

软件吃软件,编程工作会越来越多吗?

最近,国外有一篇文章,标题很有趣,叫做《软件吃掉软件》

作者认为,大型软件和通用软件越来越强大,将会取代小软件和专门软件,相当于把后者都吃掉了。

bg2020052607.jpg

他以自己的经历举例,云服务就取代了很多小软件。

"我亲眼目睹了这种情况发生的速度。我的第一份工作是在一家小型创业公司,我们拥有大量的物理服务器。现在,很难想象有任何一家 Web 创业公司会直接管理服务器,人们都是在亚马逊 AWS 控制台上点击几个按钮和链接。"

框架的发展,也使得从头编写代码的需求越来越少。

"程序员曾经需要从头开始构建东西,但是软件库的发展速度超过了我们的使用速度,甚至软件可以自己生成新的软件,这也是为什么你看到如此之多的"无代码"或"低代码"解决方案突然出现的原因。现在,自己编写代码的理由越来越少,你要做的只是将不同的产品集成在一起。"

他的结论就是,软件自动化技术的发展,可能将会减少对软件工程师的需求,未来的程序员可能会比现在少。

我对这个话题很感兴趣,因为这是在预测未来的重大变化,而且跟就业趋势直接相关。如果未来软件的规模化和自动化,会抑制对程序员的需求,那么就不应该鼓励年轻人都来当程序员。

Hacker News 论坛对这篇文章进行了热烈的讨论。大部分人(都是职业程序员)的看法是, 这种观点已经说了几十年了,根本是杞人忧天,实际情况恰恰相反,程序员变得越来越多。

"10岁时,我开始用 Qbasic 编码。我告诉爸爸,长大后想成为一名程序员。他告诉我,计算机可能很快就会实现自动化,就像他的工程行业一样,那时我会不得不找另一份工作。

但是,23年过去了,市场对程序员的需求不断上升,并且似乎仍在上升。

我想说,我们离软件自动解决大部分需求的这种抽象水平,还很遥远。正如文章所说,k8s、docker、kafka、databricks、redshift 这些新工具,取代了很多程序员。但是,它们其实引发了更多对程序员的需求。

那些必须由程序员解决的问题,只是转移到了新的地方。"

就像上面引文所说,现实情况是需要编程解决的问题不是越来越少,而是越来越多,导致了程序员的增加。原文提出的两个论据,都站不住脚。

首先,云服务确实使得企业免去了服务器管理,但是你仍然需要有了解 docker、kubernetes、数据库分片和索引、故障转移、备份、消息队列等等技术的人员。即使这些东西现在更加集成,更易于组合,但要弄清楚它们如何相互作用,如何设置,仍然是很复杂的一件事。

其次,"无代码开发"只能解决一些通用的软件问题,迟早会出现需要定制的情况。那时,就需要有程序员来修改代码,用户才能继续使用。

总之,世界正在变得越来越自动化,而自动化的本质是软件,所以对程序员的需求只可能越来越多,不可能越来越少。

不过,论坛上面也有少部分人赞同原作者的观点,认为程序员越来越多只是过去的情况,未来未必如此。现在可能是软件开发"突变"的一个时间点,未来的发展可能不同于此前的情况。

市场需要更多了解 docker 和 kubernetes 这样新工具的人,这个是没错。但是,主要是大公司才需要这样的人,小公司用不到 kubernetes。小公司面对的复杂性是有限的,只要使用大公司提供的简单解决方案即可,需要自己开发的部分几乎没有。

而且,如果公司的业务重点不在技术方面(你要知道大部分公司都不是互联网公司),使用"无代码方案"是最有效的。因为无需在软件工程上花费很多钱,就可以快速应用。

历史上,每当一个领域出现大量需要编程解决的问题,就会诞生一个通用的解决方案,解决掉90%的场景。然后,这个领域对程序员的需求就会快速减少。

"30年前,开发图形界面 GUI 很困难,Visual Basic 改变了这一点。

20年前,制作一个 Web 应用很困难,PHP 改变了这一点。

10年前,写一个复杂的网页布局很困难,Bootstrap 改变了这一点。

现在,机器学习很困难,PyTorch 正在改变了这一点。

每个棘手的问题最终都会产生一个有效解决方案,解决掉90%的场景。对于大多数公司而言,这个解决方案已经足够了。剩下的10%场景,其中一部分由某些公司付钱给程序员来解决,另一部分永远不会解决。"

所以,如果新的领域层出不穷,那么就会需要更多的程序员。但是,这些领域对程序员的需求都不会持久,一旦产生了解决方案,需求就会迅速降低。

看完了上面的讨论,我的想法是,市场对程序员的需求,未来怎么变化,不能简单地回答增加或减少,而是取决于两个因素。

(1)人们需求增加的速度,能否超过软件自动化的进化速度。

现有的场景最终都会有通用的解决方案,需要雇佣程序员的情况,确实将越来越少。程序员的就业,主要依靠新出现的场景。而且,新场景的增加速度,必须超过软件自动化的进化速度,否则旧的解决方案也许会自己升级成新场景的解决方案。

(2)软件开发的难度,必须超过机器学习的进化速度。

程序员的数量,还跟软件开发的难度有关。难度越低,就会有越多的人从事这项工作。以前,你必须懂得计算机的底层硬件和汇编语言,才能开发软件,所以程序员很少。现在,软件开发越来越容易,已经不需要了解底层,只需要懂得某个框架即可,所以越来越多普通人变成程序员。

未来的编程肯定会变得越来越容易,但是,越来越容易的编程,也意味着机器可以轻而易举地代替人,来完成这些工作。所以,软件开发的难度必须超过机器学习的水平,否则需求的增加只会导致更多的机器自动编程,而不会导致更多的程序员雇佣。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK