为什么你招聘不到程序员,以及软件如何定义现实世界

jopen 9年前

为什么你招聘不到程序员,以及软件如何定义现实世界

文/霍炬

2015 年,互联网创业从火热到“寒冷“,但有一件事全年都没有变化,就是大家都觉得招聘不到程序员。我没有确切的数字知道 2015 年这一年程序员的薪资增长的比例,但是我确切的知道,在 2015 年,一个有3~4 年工作经验的年轻程序员,在北京和上海能拿到的薪水已经接近 2010 年盛大创新院给我的薪水了。要知道,2010 年盛大为了创建创新院,给出的是业界顶级的薪水,而且那时候我已经有 8 年的工作经验了。这不过是 5 年前的事,今天,3 年工作经验的程序员薪水已经到了这个水平。在中国,大概唯一增长率可以比的上北上广房产的,就是程序员的薪水了。

很多人人根本拒绝相信这件事,不仅仅这个行业之外的人,甚至连这个行业之内的人也觉得非常不可思议。但所有人不得不面对的一个事实是:当你需要程序员的时候,会发现根本招聘不到程序员。那个“所有都准备好了,只差一个程序员就可以开工了” 完全不是笑话,我知道无数个项目,都是真的就差一个程序员了。

但是,他们就是招聘不到这个急需程序员。

还有很多人的看法是,过几年程序员就好招聘了,现在只是泡沫时期罢了。甚至还有人认为,过几年我们就不需要程序员了,因为有更多的工具可以帮助生成软件。不好意思,这两种想法都不是 2015 年才有的,从 1995 年,甚至 1985 年,这两种看法就存在了。30 年来,泡沫起了一轮又一轮,破了一轮又一轮,自动化工具也确实出了一个又一个,更多的平台也被建立起来,确实某种程度人,一些人可以“不需要写程序”,也能 *开始* 进行互联网创业。但是,几十年来程序员的需求始终是上升的,符合需求,能写出可用代码的程序员从来没好招聘过,这个职业一直处于一种古怪到近乎疯狂的供不应求阶段。回头来看,就算是 2008 年金融危机的大崩溃时刻,全世界范围内,程序员好招聘也只持续了半年。美国 H1b 签证只有 2008 年没用满,之后每一年都要抽签才能获得,无数中国和印度的程序员急盼签证。

“不需要写程序就可以进行互联网创业”,这个倒是某种意义上是实现了。不过并不是有自动生成软件的工具,而是各种应用平台发展起来了。比如,一个专心内容创业的人,用微信公众帐号就可以开始,一行程序都不用写。但是不要忘记,这些平台背后,仍然是无数程序员的工作成果。就算是用微信公众平台开始了创业,如果规模发展的大一点,终究还是要写一些程序的,要么是自己的 App/社区,要么是 HTML5 做的各种活动,或者是用微信 SDK 接口做的各种自动化功能。总之,早晚你还是要写点程序的。如果换个角度看,像微信公众平台这类应用,只不过是把过去没有写程序能力的人拉了上来可以有个开始,等其中的强者被筛选出来之后,他们又回到要雇程序员的境地。这么一看,这些平台不仅没有减少程序员的职位,反而扩大了需求。如果没有公众平台,可能很多创业者压根到不了需要程序员支持这一天,也赚不到钱去养活一个程序员,现在,他们中的成功者终于可以活到这一天,加入竞聘程序员的行列了…

这个世界对程序员的需求几十年没降低,按照我的观点,甚至未来几十年也不会降低,薪酬也只会持续上升。各种社交平台上,也会见到各种恶毒嘲笑讽刺程序员的人和段子(基本来自传统行业,他们大概觉得自己一辈子也不需要好好的和程序员打交道吧),这些人显然是不相信我这个看法的。无论相信不相信,眼前的情况就是这样的。为什么程序员会这么难招聘,背后的原因是什么?要回答这个问题,我一般会推荐对方看一篇文章,叫做《软件正在吞噬整个世界》,这是 2011 年美国著名风投 Andreessen Horowitz 创始人 Marc Andreessen 写的文章。今天看来,这篇文章的意义显然被低估了,Andreessen 写过很多文章,但这无疑是最重要的一篇,也是对未来的指向最清晰的一篇。但别说 2011 年,就算是今天,也很少有人真正理解它的重要性。这篇文章并不长,看完我这篇,推荐找来再读一遍,相信你会有新感受。

我一直非常推崇这篇文章的看法和远见,但是,我觉得他用的“吞噬”(Eating)这个词并不好,它没有能精确体现真实情况,我更愿意使用的词是“定义”(defining)。“软件定义现实世界”,这算是我发明的一个新词。我这篇文章要写的,就是关于软件是何如定义现实世界的。

今年 3 月份的时候,我在杭州和一个朋友聊天,我们叫她夕总,是做传统行业的。她很惊讶程序员为什么这么难招聘。我给她大致描述了越来越多的行业开始使用软件来替代传统人力劳动的状况。她恍然大悟的说:“啊,我知道了,我家小区过去是个老大爷负责收停车费,现在变成了完全自动刷卡进入。所以,很多个老大爷被软件替代了,软件又需要程序员来开发和维护?” 这个例子找的非常准确,从一个具体的案例来看,就是这样的。她敏锐的抓住了现实世界最基层的情况。我也继续用这个例子做为背景说下去。

图片:以前是这样的

为什么你招聘不到程序员,以及软件如何定义现实世界

图片:以后都是这样的了…

为什么你招聘不到程序员,以及软件如何定义现实世界

当我们用一套停车场管理系统,替代了停车场管理员(那个老大爷)之后,整件事情改变了什么?它并不仅仅是节约了一个老大爷的人力成本这么简单,仅仅节约人力成本的价值并不大,因为基层体力劳动的人力成本是相当有限的,节约 20 个老大爷的工资,也未必能比得上一个程序员的工资支出。

比节约一个人的人力成本更重要的是,我们用软件来规范了停车场的行为,即所谓“定义”。在使用软件之前,停车场管理员是有很大权利的,很多人都知道,给停车场管理员塞一包烟,他可能就会少收你 20 块钱停车费。甚至很多停车场管理员会直接把停车费塞到自己口袋里面,如果你没要停车发票的话。停车场的运营是没办法监督这种行为,要监督,就需要付出巨大的人力,甚至冒很大风险。有了软件系统之后,一切都不一样了。不再需要去监督这种往自己口袋里面塞钱的行为了,只要软件没有能被他们找到的漏洞,一切都变成了非常规范的行为。开车来的车主进入停车场的时候取卡,系统拍下车牌照,出停车场的时候自动计时收费,付钱之后停车场出口才打开,车才能离开。这个过程可以完全没有人力参与,就算是保留那个停车场老大爷的职位来做应急工作,他的行为也是严格被软件规范的。不交钱,停车场出口不打开,车就没法离开停车场,这是一条被明确定义了的基本规则,除非暴力去破坏停车场设施,否则,一切都是被软件管理的,人改变不了什么。从此,整个过程中不会再有钱的损耗,停车场运营方会获得更多收益。这些收益中的一部分,就变成了软件公司的利润,软件公司利润的一部分,变成了程序员工资。

这就是软件企业为何有巨大盈利,程序员工资为什么这么高的原因。仅从这个例子看,软件没有创造新的价值,但是在若干传统行业中,软件夺回了一部分人本来不应该拿到的钱,把这些钱重新变成了利润,程序员分享了这部分利润。在这个停车场的例子中,按道理说,停车场管理员的收入只应该是一份工资,不包括偷偷塞到口袋里面的停车费,但是如果没有软件,这种行为是没法阻止的,一定会有很大一笔钱流到不应该获得它们的人手里。另外一方面看,在车主这边,他们的行为也被定义了。过去很多人是愿意接受 10 块钱买一包烟,省 20 块钱停车费这种设定的。但在软件管理之下,这种利益交换没机会发生了。在这个停车场的案例中,参与业务的两方行为都被软件重新规范和定义了。

整个过程可以这样看:在软件企业的帮助下,现实世界的资金流向被重新分配了。这就是“软件定义现实世界”。软件重新定义了社会规则,定义了人的行为。当然,目前软件还只是体现了业务人员的意愿,在这个阶段,更确切的说法是:软件帮助人们重新定义社会规则。

这只是个开始。我们站的高一点看这个已经被软件接管了的停车场。你会发现,关于它的细节都被隐藏了,你只知道它存在着接口(Interface)。所谓接口,就是对资源的一种抽象,我们知道它提供什么,比如在这里例子中,可能是停车场有多少空车位,已经停有多少车,每天有多少收益,停车场的位置在哪…等等,具体的细节,被装进了一个黑箱子里面,我们不再关心它。比如,一个软件管理的停车场还有没有看车老大爷,这就算细节,在这种视角下,我们不再关心这个人是否存在,也不关心他在做什么,因为已经用软件定义好了他的行为,这时候我们只关心提供结果的接口即可。

在软件世界中,知道了接口,就可以使用这一份资源。从此,我们把这个停车场可以看作软件世界里存在的一个单元(Unit),刚才说了,它的现实状况已经被装进黑箱子屏蔽掉了。如果你只有一个这样的单元,它只能用来规范基本行为,但如果你在相邻街道再有一个这样的“停车场单元”,这时候就能开始有一些新的变化了。比如,停车场单元A已经几乎停满了,但停车场单元B还空着一半车位,这时候就可以通过软件来调整资源,让车主尽量往停车场B停。具体手段有很多,比如通过智能手机发送一条消息,告诉正在开来的车主,停车场A要排队 10 分钟,停车场B排队 1 分钟就可进入。自然可以分流一部分人到停车场B。甚至是把停车场B的停车价格降价 10%,吸引更多人前往。这些实时的,根据资源剩余情况的动态配置,利用传统手段是不可能做到的。一方面是传统手段没法快速反馈信息,另外一方面,传统方式的审批决策流程过长,要降价总要有个负责人批准一下吧?从而让实时的动态调整变得不可能。但在一个被软件定义的世界里面,是可以做到的。在这种模式下,如果我们再屏蔽掉具体的引导办法(降价,排队时常通知之类),甚至可以把A和B两个停车单元合并成一个看,即,在软件层面上,我们有了一个更大的停车场单元。

再继续下去,如果有更多的资源具有了接口,他们之间还可以发生什么交互?比如,两个停车场旁边有两个规模和品质相似的餐馆A和餐馆B,它们也具有了接口,软件世界里面,我们抽象出餐馆单元A和B,知道它们的座位有多少空余,知道今天厨房有什么材料,知道价格…那么,停车单元A报告自己已经满了的时候,这时候餐馆B是不是愿意暂时降价 10% 来吸引更多客源?如果餐馆B通过降价,成功把自己空余的资源卖掉了,他是否愿意分享一部分利润给停车场,以及分享一部分利润给帮助进行资源配置的软件运营方?

这些都是会在未来发生的事情。越来越多的现实世界资源通过一个接口,接入软件世界,成为一个抽象的单元,它们会直接发生相互的作用,这就是我们多年所说的“智能化”。所有的这一切,最终都需要软件实现。把一个现实资源抽象成接口这件事,在软件行业称之为“虚拟化”,一个 60 年代软件行业就使用的概念。通常这个词被用于云计算行业,云计算产业在真正的物理计算机上虚拟出了计算机、路由器、内存…把这些资源弹性分配给需要的用户使用。但实际上,现实世界的一切都是可以通过这种方式被虚拟化的。这就是未来被软件定义的现实世界。对于这样的世界,如果找一个更容易理解的例子,最适合的是游戏。未来的一切都像即时战略游戏所表现的那样,如果你玩过星际争霸,大概会记得拿鼠标点一下,派出一个 SCV 去采矿,用鼠标点一下工厂,坦克就开始被生产出来。在这个过程中,操作者只需要知道点鼠标下达指令,之后收获指令的结果。点一下鼠标,几分钟之后得到一辆坦克,至于工厂里面具体如何生产一辆坦克,SCV 如何获得矿石,这些细节被屏蔽掉,不用在关心。将来现实世界,传统行业的一切都会变成这样,甚至连下达指令的(玩游戏)的这个操作者早晚也会被软件替代。

我并不是在写科幻小说,在今天,很多行业已经实现了类似的效果。比如航空业,这个行业里面很多部分已经是高度虚拟化的了,他们已经可以用一个指挥系统调动各种地勤和支持资源去完成航空行业运转的各种流程。当然,他们也需要好多程序员来开发和维护这个系统…

说到这里,推荐一部非常符合这个主题的动画片,叫做《夏日大作战》,这部 2009 年的动画用图形化和更易懂的方式描述了这种未来的场景,非常好看。这是 2010 年,当时还在九城工作的布布推荐我的,我们都非常喜欢它,也一致认为这就是未来。(布布这个人也在笑来关于比特币的文章里面出现过,他跟笑来说不要挖矿,要花钱去买比特币…是一个非常传奇的家伙)

图片:夏日大作战

为什么你招聘不到程序员,以及软件如何定义现实世界

我们再站高一点,看之前描述的场景。现在我们有了若干的资源单元,他们分布在不同的行业,这些单元已经被软件定义好了,我们看作是黑箱。在软件之下,又定义了无数具体工作人员的行为。刚才的例子里面,除了停车场管理员,还有厨师,服务员…沿着这个思路继续想,还会有给餐馆进货,供应原材料的供应商,维修停车场设施的公司…所有这些,会会被虚拟化成软件世界中的一个单元。然后是各种被提供服务的人(所谓用户),他们有接收信息的方式,大到计算机,小到智能手机,或者各种嵌入式系统,比如特斯拉电动车驾驶舱里面的那块大屏幕…一个使用手机的用户,或者一辆特斯拉,同样都可以被抽象成一个带有接口的资源单元。所有资源单元的行为,都是被软件定义的,他们之间的交互方式和可能产生的结果,同样是被软件定义和调配的。这其中的每一层,每一部分,都需要大量程序员的工作。越来越多的现实资源被虚拟化,也就产生了更多的交互和更多的可能性,这些一样需要程序员去实现。今天,人类社会被虚拟化成软件的资源还只有极少的部分,我没有具体统计的数字,但大家只要想想自己每天的现实生活所需所用,至少能有个大概的感知,恐怕被虚拟化的资源连1% 都不到。未来的空间有多大?几乎是无限量的大。

现实世界能被虚拟化到什么程度呢,我之前几次推荐过科幻小说《雪崩》里面描述了未来的世界只剩下三种职业:娱乐业、程序员和 Pizza 快递员。这本写于 90 年代初的小说,早年看起来非常震撼,今天看起来…觉得他还不够极端。因为现在我们已经确知了,Pizza 快递员的工作会被无人机改变,娱乐业会被 VR/AR 改变。最后干脆现实世界只剩下了程序员这一种职业…软件并没有吞噬掉现实世界,而是重新定义了现实世界的所有资源。

图片:雪崩封面

为什么你招聘不到程序员,以及软件如何定义现实世界

所以,今天一切关于软件/互联网泡沫的看法都是过时的。现实世界的虚拟化已经快到了相当的程度,我们真的需要大量的程序员,未来仍然需要,有多少都不够用。因为程序员职业缺口太大了,早就不是有钱就能招聘到的了,甚至一个程序员因为公司要打卡,就会选择另外一家企业,因为他们可选择的余地实在太大了。很多企业远远没意识到问题的严重性,而聪明的企业,已经在忙着做“企业技术文化”工作了。如果你不是 BAT,又不是一个很酷的新公司,程序员们根本对你没有兴趣,到这个境地,花别人一倍的钱也未必能雇到人,所以就需要做技术文化工作,去宣传我们也是很酷的,我们也是能改变世界的…从而不至于在这种竞争中落后。

最近一段时间,我周围很多其他行业的朋友都跑来问我,是不是他们应该学写一点程序。我通常都回答,只要你有兴趣,学的下去,那就当然应该。就算不能成为职业程序员,在这个软件定义一切的行业里面,理解程序如何产生,理解程序员如何工作,那就一定会有一份更好的职业机会等着你。为什么不学呢?

以上这些,就是难以雇到程序员这种状况产生的基本面,因为这个职业缺口确实太大了,未来这种职业缺口不仅不会减少,毫无疑问还会继续扩大下去,甚至可以夸张一点的说,人类世界现代化的速度,很大程度被程序员数量不够制约…

来自: mp.weixin.qq.com