AI、自动化,这些技术进步不仅威胁到到了其他行业的工作,甚至有声音认为,连开发这些技术的程序员其自嘲的“码农”地位都将不保。比方说,OpenAI前研究科学家Andrej Karpathy就认为,在AI引领的软件2.0趋势下,传统程序员真的有可能要失业了。不过,跟Tyler Elliot Bettilyon相比,这些都是对程序员未来的片面看法,相对而言,他对程序员未来的工作前景分析更加全面客观,值得从业者好好看看,思考未来作何选择。
我的一位朋友最近提出了一个问题,这样的问题我在不同场合都听说过,只是形式各不相同:
你是否认为IT和一些低端的编程工作会重蹈渡渡鸟的覆辙?看起来一场大规模的就业泡沫似乎就要破裂了。在我看来,技术和低端计算机科学相关工作之所以还“久负盛名”并且拿到不菲的报酬的其中一个原因,是那些荒谬的行话以及公众对计算机的无知,但这两个在未来10年都会消失……
这个问题同时指向了两点,一是技术工作的未来,二是对软件工程领域的普遍误解。虽说有大量“荒谬的行话”没错,但是还有同样多的困难问题等着那帮有着合适技能组合的人去解决也是事实。一些软件工作绝对是要消失的,但在很多年的时间里有着合适经验和知识的一些程序员仍然会继续享有声望并且拿到可观的报酬;作为例子可以看看最近AI研究人员薪水的爆发以及可用人才的相应短缺就知道了。
在不断变化的技术业能够保持与时俱进是个挑战。通过审视取代现在哪些程序员的技术可以预测出市场的那些岗位会消失。此外,要想预测特定技能薪酬和需求变化我们应该考虑学习编程群体的壮大情况。就像Hannah指出“公众对计算机的无知”导致了那些会编程的人工资高企一样,大众对计算机的认知正在逐年变得更加娴熟。
日益走向商品化
对自动化取代工作的恐惧既不新鲜也不是杞人忧天。在任何领域,尤其是在技术领域,市场力量都会推动着企业朝着自动化和商品化发展。Gartner的炒作周期曲线就是对这一现象的很好诠释。
Gartner 2017炒作周期曲线
随着时间延续,特定想法和技术把生产力推进到了“高原期”,最终实现自动化。但凡回顾历史就能得出结论,自动化是有能力摧毁特定的就业市场的。从作物收割到,到汽车装配,不同行业的技术发展正在不断替代和增强人类劳动力,降低成本。一位教授曾经在自己的编译器课程上总结说,“以史为鉴,看看纺织业和钢铁业:你是想建造机器和工具呢,还是想操作那些机器?”
在这里“机器”的隐喻是指计算机编程语言。这位教授其实是问:你是想用JavaScript开发网站呢,还是想开发驱动JavaScript的V8引擎?
网站的创建工作已经由WordPress等工具自动化了。而另一方面V8的竞争对手也越来越多,其中一些正在解决开放的研究问题。语言会来了又走(想想看现在还有多少分Fortran的工作?),但总会有人开发下一种编程语言。我们是幸运的,因为编程语言的实现也是用编程语言写的。作为软件的“机器操作者”把你推上了一条成为“机器制造者”的道路,这是过去的钢铁厂工人所没有走过的。
语言、解译器以及编译器的不断增多向我们表明,每一台摧毁工作的机器也提供了对这些机器进行改进、维护等的新机遇。尽管消失的工作的列表正在变得越来越长,但是人类全体都认为“我想已经没有工作可以做的了”的那个历史性时刻还没有到来。
Pinsetters
商品化会向我们所有人袭来,不仅仅只是软件工程师。在整个历史长河中,人类劳动力都在不断被非人类的东西取代或者增强,导致工作所需的人更少,对技能的要求更低。自动汽车和自动卡车只是这个伟大的人类传统的一时之兴。如果创造和自动化的周期是生活的现实,接下来我们自然要问:哪些工作和行业有危险,哪些又暂时无忧呢?
谁自动化谁?
AWS、Heroku等类似托管主机平台永久性地改变了系统管理员/DevOps工程师的角色。互联网企业过去绝对需要自己的服务器专家。其中一些精通Linux;一些懂得如何用Apache或者NGINX配置服务器;有的不仅会对服务器、路由器等各种物理组件进行布线,而且还懂配置路由表以及各种必要的软件来让服务器供大众在web上访问。尽管现在仍然有一群人懂得干这一行,但AWS正在令其中一些技能变得过时——尤其是对经验要求更低的一些事情以及硬件类的事情。对于灵通物理基础设施的人来说,Amazon(以及Netflix、Google等)内部还有非常赚钱的角色可以担任,但是中小企业方面对这些角色的需求已经大为减少。
像SalesForce、Tableau以及SpotFire这样的“商业智能(BI)”工具正在开始占领历史上属于软件工程师的地盘。这些系统已经减少了对内部数据库管理员的需求,但作为一种通用技能同时也增加了对SQL的需求。BI还减少了对内部报表技术的需求,但增加了对“集成工程师”的需求,后者的工作是将来自企业的数据流交给第三方平台进行自动化处理。一度为Excel和电子表格所统治的数据管理领域正在逐步被推向Python或者R这样的脚本语言以及SQL上。一些工作会消失,但对能够写软件的人的需求总体上来说是增长的。
就更接近软件而言,数据科学是商品化的一个很好的例子。Scikit.learn、Tensorflow以及PyTorch都是、方便大家编写机器学习软件的软件库。事实上,用同一个数据集跑许多有着不同参数集、同时赌气算法实现几乎一无所知的机器学习算法是有可能的(当然这么做是不明智的,这里只是说可能性)。我敢打赌未来几年商业智能公司会尝试将这些类型的算法集成到自己的工具里面。
从很多方面来说数据科学就像5到8年前的web开发——这是一个蓬勃发展的领域,因为“技能鸿沟”,你能够获得的效果知识很少。后来,随着web开发训练营的关停整合,数据科学训练营又在原来的地方冒出来。收购了原来的web开发训练营(Dev Bootcamp)的Kaplan现在就是设立了一个数据科学训练营(Metis),并且决定关闭DevBootcamp,同时维持Metis的运转。
内容管理系统是工具里面因为自动化而取消对软件工程师需求的最明显例子之一。SquareSpace和WordPress是当今最流行的CMS系统之一。这些平台显著降低了只有一点前端web开发技能的人的价值。事实上,做网站并把它放上网的门槛已经低了很多,低到毫无变成经验的人也能够每天都成功地发布新网站。这些人没法做出服务数十亿人的、交互性极强的网站,但是替自己的企业制作网站为客户提供所需信息绝对是可以的。一个可爱的登录页,再加上如何寻找公司、如何联络自己这样的信息对于当地饭店、酒吧或者零售店来说已经绰绰有余。
如果你的企业不是以“互联网业务”为主,想弄个过得去的网站放到网上从来都没有像现在这么容易。因此,可迅速做好网站并放到网上的 web承包商产业一度欣欣向荣,但现在已经变得没那么赚钱了。
最后,在这种情况下如果忽视计算机的物理方面的话这种态度近乎自大。用Mike Acton的话来说:“软件不是平台,硬件才是平台”。搞软件的人至少要学习一点计算机体系结构和电气工程的知识才算是明智的。硬件的一次大动荡,消比如费者级的量子计算机的出现将会改变软件工程的一切。
量子计算机仍然还有很长一段路要走,但对GPU的兴趣在增加,同时朝着并行化的方向发展是即将到来的转变。 CPU的速度近几年来一直停滞不前,而在当时,对机器学习和“大数据”的渴望似乎已经达到无可遏止的地步。随着对大型数据集的处理需求与日俱增,OpenMP,OpenCL,Go,CUDA等其他并行处理语言和框架将继续成为主流。为了在短期内快速提高竞争力,显著并行化将成为全面需求,而不仅仅局限在高性能的小众应用领域,比如操作系统,基础设施以及视频游戏等。
人人都在学编码
网站无所不在。2017 Stack Overflow调查报告指出,约15%的专业软件工程师正在“互联网/Web服务”公司工作。美国劳工部预计Web开发的增长率比平均岗位需求增长速度高很多的情况仍将继续(2014年到2024年间为24%)。鉴于其可视性,这个行业很大一部分的关注点都会落在“填补技能鸿沟”上面。编码训练营几乎只教Web开发,而Udemy、Udacity以及Coursera等类似市场上也充斥着Web开发的课程。
整个Web开发技术栈的自动化程度越来越高,入门级的新程序员大量涌入Web开发领域,这导致部分人预测软件开发人员将会面临一个“蓝领”市场。有的人甚至更加激进一点,认为把这个产业推向蓝领市场是大型科技公司设计的战略。当然,其他人会说我们正朝着又一次泡沫破裂进发。
对特定技术需求的变化已经不是新闻。技术的语言和框架总是会有此消彼长的情况。Web开发目前的化身(“JS为王”)的走势最终会像2000年代早期的Web开发走势一样(还记得Flash吗?)所不同的是,这次在当今流行的web开发框架上很多人都有着明确(且主要)的教育经历。在你决定给自己贴上“React开发者”标签之前,请记住曾经有人自认为是“Flash开发者”。如果把你的职业生涯吊死在一种语言、框架或者技术上无异于玩轮盘赌游戏。当然,要预测哪些技术还将继续发展下去是相当困难的,但是如果你打算找个东西全力以赴的话,我建议可以按照Lindy效应(对易损的东西来说,每多活一天,都会缩短其寿命;相反的,对于不易损的东西来说,每多活一天,都将更拉长其存在寿命。)选出一些已经经受住了时间考验的语言,比如C语言。
下一代人将具备一种事实上的技术素养水平,这是X世代乃至千禧世代所不具备的。其结果之一是,这些人将会使用下一代的CMS工具。这些工具会变得更好,年轻的工作者也会用得更好会更好地使用它们。随着充满渴望技能熟练的年轻人进入就业市场,这两个因素的结合绝对会降低低水平的IT和web开发技能的价值。高中也在迎头赶上,开始提供计算机科学和编程课程,一些受过良好教育的高中学生一旦毕业可能就会马上以编程实习生的身份加入劳动大军。
另外一大群的新人是MBA和数据分析师。一度由Excel主宰的岗位列表正在开始把SQL列为“具备更好”,甚至变成了“岗位要求”。诸如Tableau,SpotFire,SalesForce等基于Web的指标体系在继续取代电子表格作为报表生成主要工具的地位。如果这种情况持续下去,更多的数据分析师将会开始学习如何直接使用SQL,因为这要比把数据导出到电子表格更加简单。
想要超越同行在职场继续往上爬的人正在网上学习数据库和统计变成语言方面的课程。有了这些新技能之后,通过机器学习和统计库的学习,他们就可以把自己定位成数据科学家了。走这条路的话看看Metis的课程就是很好的例子。
最后,获得计算机科学和软件工程学位的人数在不断攀升。比如说,普渡大学报告说,其计算机课程课程的申请量在5年间已经翻了一番。康奈尔大学的计算机科学毕业生也出现了类似的爆发式增长。鉴于软件的发展和普及,这种趋势并不令人惊讶。年轻人很难会想象出计算机在我们的未来发挥的作用会越来越小,所以为什么不去学习一些能提供工作保障的东西呢。
稀有与期望
现在这个行业的一个普遍的观点是,你在大学四年计算机科学课程中受到的教育大多是不必要的东西。我已经多次在编程训练营的大厅里,web开发商店里听到过这样的说法,甚至像Eric Elliott这样的业界知名人物都这么说。不过反方意见也很流行,有的甚至说“所有的程序员都应该拿到硕士学位”。
我的观点跟Eric Elliott一样,我认为学习编程应该有更多的选择,而4年的学位未必许多人的最佳选择。同时,我也同意William Bain的观点,即跨编程领域的基础技能对职业寿命至关重要,但是除了大学课程,目前你很难在其他地方找到这些信息。我曾经写过,作为长期职业生涯的基础,有抱负的工程师应该学习什么样的技能,并且解释了为了帮助分享这些知识,我加入了Bradfield。
不同形态和规模的编码学校正变得愈发的无处不在,这里面有很好的理由。你不用了解大O符号、晦涩的数据结构以及算法细节也能学习编程。然而,尽管斯坦福大学的新鲜热辣的毕业生确实也能跟刚出Hack Reactor出来的人竞争一些工作,但这种情况只在一个或两个子行业中出现。编码学校和训练营的毕业生还没有申请嵌入式系统、密码/安全、机器人、网络基础设施或人工智能研究和开发方面的工作。但这些领域就像web开发一样正在迅速发展。
一些与编程相关的技能已经开始从“稀有技能”向“基准期望”过渡。相反,建立像AWS这样强悍的引擎的工作已经非常普遍的。推动技术发展的大公司——比如Amazon、Google、Facebook、Nvidia以及Space-X等——通常不会找“对JavaScript有基本了解”的人。 AWS每天为数十亿用户提供服务。为了支撑这种载荷量,AWS基础设施工程师需要对网络协议、计算机架构有深入的了解,并且要有多年的相关经验。就像任何学科一样,这里面有业余爱好者和工匠之别。
这些知名企业正在解决研究问题开发真正建立真正开拓能力疆界的系统。然而,即使在基本的编程技能越来越普遍的情况下,他们仍然很难填补其中的空缺。可以编写算法来预测基因序列变化从而带来想要结果的人在未来将会非常值钱。可以对卫星、航天器和机械自动化编程的人将继续受到高度重视。这些领域并不适合采取前端web开发那种“3个月密集学习计划”的人才速成,至少还没有像样的成功先例。
因为计算机科学开头是“计算机”这个词,所以我们可以认为,到2025年,所有的年轻人天生就能理解计算机。不幸的是,计算机的普及并没有造就对数学、计算机科学、网络基础设施、电气工程等有着事实上的了解的新一代人。会用计算机跟计算研究是不一样的。尽管数学自创始伊始就已经存在,但十分精通统计学的人仍然相对较少,而计算机科学也是一样的陈旧。 Euclid发明了好几种算法,其中之一是在每次发出HTTPS请求时使用;每次我们登录网站都要用HTTPS这一事实并不会自动让任何人了解这些协议是如何工作的。
双峰工资分布
更成熟的专业领域往往会有双峰的工资分布模式:相对较少的从业人员赚走了相当多的钱,其中大多数人的工资都不错,但并没有处在前1%之列。美国全国法律就业组织收集的数据可以十分清晰地反映出这一现象。大部分法学毕业生的工资在45000美元到65000美元之间,这是很高的工资了,但很难跟“顶尖专业人士”联系在一起。
法律专业的工资分布情况
我们往往会认为,所有的法律毕业生都有可能成为一家律师事务所的合伙人,但事实上他们有很多条路可以走:律师助理,文员,公设辩护人,法官,企业法律服务,合同写作等等。计算机科学专业的毕业生也有很多选择,从Web开发到嵌入式系统不等。基本的编程技能会继续成为一种期望,而不是“锦上添花”,我怀疑编程工作也会出现类似的分布情况。
尽管还会有一批程序员靠着不断推进技术极限而赚到很多的钱,但是为新的以计算机为中心的经济提供动力的中级程序员队伍将会越来越壮大。Web开发人员的平均工资肯定会随着时间的推移而下降。说虽如此,但我怀疑“程序员”的岗位总量只会继续增长。随着人工的供给侧开始满足需求,希望我们将看到各种中级编程工作将会出现有益的繁荣。对于那些正在开辟无限可能的程序员来说,他们还将继续拿到顶级的职业工资。
不管你是属于哪一类的程序员,从事技术行业意味着终生都要继续教育。如果你想成为第二类程序员,你就得加大投入,去学习如何创造机器,而不仅仅是使用机器。