程序员这个职业会是另一个即将破灭的泡沫吗?

琳琅数码之家 2017-12-09 20:22:05

一位朋友最近向我提了个问题,这个问题我曾经在不同的论坛上听到过,虽然问题的形式不太一样:

“你认为 IT 和一些低级别的编程工作最终会消失吗?这个工作看起来有点像一个巨大且即将破裂泡沫。我认为,科技和低水平计算机科学相关工作能够“受人尊敬”以及保持高薪的唯一原因是这个行业中充斥着晦涩难懂的专业术语和公众对计算机的无知,而这两种情况在未来的 10 年里都将消失。”

这个问题既跟技术工作的未来相关,也是对软件工程领域误解的一个常见例子。虽然这个行业里确实有很多“晦涩难懂的专业术语”,但其中也存在着相当多的难题正等待着具备相应技能的人去解决。一些软件相关的工作正在慢慢地消失,但真正具备一定经验和知识的程序员们将继续会受人尊敬,也能拿到较高的报酬。最近的 AI 研究员薪水大爆炸和相应人才的缺乏正是印证了这一点。

在不断变化的技术环境中保持相关性可能是一个挑战。看看当前那些用来取代程序员的技术,我们就能够预测有哪些工作在将来可能会消失。此外,要预测薪酬和技能需求的变化,应该把未来会有越来越多的人学习编程这个情况考虑进去。正如Hannah所指出的那样,“公众对计算机的无知”使得会编程的人的工资很高,而公众对计算机的了解会越来越深入。

持续向着商品化发展

对自动化取代人类的恐惧既不新鲜也没有根据。在任何一个领域,特别是在技术领域,市场的力量都会推动企业走向自动化和商品化。 “Gartner炒作周期报告”就是对这种现象进行情景化的一种方式。

2017 Gartner 炒作周期 

随着时间的推移,一些特定的想法和技术最终必将走向自动化这个“生产力高地”。纵观历史,我们可以得出结论,自动化有能力摧毁特定的就业市场。在不同的行业,从作物收割到汽车装配技,先进的技术将不断增强甚至取代人力,进而降低成本。一位教授曾经在编译原理课上这样说:“以纺织业和钢铁行业为例:你是要创造机器,还是要操作这些机器?

在这个比喻中,“机器”是指计算机编程语言。这位教授真的在问:你想用JavaScript创建网站,还是要构建支持JavaScript的V8引擎吗?

今天,网站的创建可以用WordPress或其他平台来自动进行。而另一方面,V8正在成为越来越多解决开源研究问题的竞争对手。编程语言会突然流行起来,也会慢慢衰败下去(现在还有多少Fortran相关的职位呢?),但总是会有人去创造下一个编程语言。 幸运的是,编程语言是用编程语言自己来编写的。作为一名软件业中的“机器操作员”,你将走上一条“机器创造者”的道路,而过去的钢铁工人并非如此。

层出不穷的编程语言、解释程序和编译器告诉我们,每一个破坏工作的机器也带来了改进、维护这些机器的工作机会。尽管越来越多的工作岗位已经不复存在,但人类历史上还没有出现过一个集体诉说“我们没有任何工作可做”的时刻。

摆放保龄球球瓶的人 

商品化正面向我们所有人走来,而不仅仅针对软件工程师。纵观历史,人类的劳动一直被非人类所取代,或者是所需的人数减少,以及所需掌握的技能要求降低。 自动驾驶的汽车和卡车 这个当前最时髦的东西正说明了这一点。 如果创造和自动化这种循环反复是生活中存在的事实,那么接下来要回答的问题自然是:哪些工作和行业会面临风险,而哪些不会?

谁把谁自动化了?

AWS、Heroku和其他类似的托管平台已经永远改变了系统管理员和DevOps工程师这样的角色。互联网企业过去完全需要有自己的服务器管理员,包括:精通Linux的人,会配置Apache或NGINX服务的人,一个不仅会在物理上连接服务器、路由器和所有其他物理组件,还能够配置路由表以及所有让服务器在互联网上可访问的软件的人。尽管由人来操作更加专业一点,但AWS正在淘汰其中的一些技能,特别是那些无需多少经验水平以及物理侧方面的工作。虽然亚马逊(包括Netflix和Google)在网络基础设施方面拥有丰富的专业知识,但在中小型企业中这方面的需求要少得多。

SalesForce、Tableau和SpotFire等“商业智能”工具也逐渐开始侵占原本由软件工程师占据的空间。这些系统减少了对企业内部数据库管理员的需求,但同时也增加了把SQL作为通用技能的需求。它们减少了对企业内部报表制作技术的需求,但是增加了对“集成工程师”的需求,因为他们能让数据自动地从企业流向第三方软件平台。之前由Excel和Spreadsheets主导的领域越来越多地被像Python或R这样的脚本语言所主导,并朝着用SQL进行数据管理的方向发展。有些工作已经消失,但是对编程人员的需求总体上还在增加。

数据科学这个实际的案例在一定程度上跟软件商品化非常类似。 Scikit.learn,Tensorflow和PyTorch都是通用软件库,开发者使用这些库可以很容易地构建机器学习应用程序,而无需从头构建算法。实际上,人们可以使用很多不同的机器学习算法来运行数据集,而这些算法可以有许多不同的参数集,并且使用者无需深入理解算法是如何运行的(虽然这么做并不明智,但这是有可能的)。我可以打赌,商业智能公司将在未来的几年内将这些算法集成到自己的工具中。

数据科学在很多方面就像是5-8年前的网页开发。这是一个蓬勃发展的领域,只要懂得一点知识你就能入门。随着网站开发培训班的关闭,数据科学培训班如雨后春笋般地冒了出来。Kaplan曾经购买了原来的网络开发培训班(Dev Bootcamp)并启动了数据科学培训班(Metis),现在决定关闭DevBootcamp,但继续维持Metis的运营。

内容管理系统是让企业自动远离对软件工程师需求的流行工具之一。 SquareSpace和WordPress是当今最受欢迎的CMS系统。这些平台的存在显著降低了那些只具备一点点前端Web开发技能的开发者的价值。事实上,现在制作网站和上网的障碍已经大大降低,没有任何编程经验的人每天都在发布网站。他们不是在为互联网提供数十亿人访问的互动网站,而是为自己的企业搭建网站,为客户提供他们所需要的信息。一个包含如何找到企业以及如何与企业联系的可爱登陆页面,对于当地的餐馆、酒吧或零售店来说已经完全足够了。

如果企业的主要业务并不是“互联网业务”,那么,在互联网上搭建一个网站并不简单。因此,曾经一度非常繁荣的网站承建商这个行业,虽然它们能帮你在互联网上快速建立起一个简单的网站,但也开始变得越来越不赚钱。

最后,在这种情况下,无视计算机的物理特性就是一种自大。用Mike Acton的话来说:“软件并不是平台,硬件才是平台”。软件相关人员至少要学习一点计算机架构和电气工程知识才是明智的。消费级量子计算机的出现将会改变软件工程的一切。

量子计算机还很遥远,但人们对GPU以及并行化趋势的兴趣正日益增长。 CPU速度的提高已经停滞了好几年,但机器学习和“大数据”的飞速发展不可抑制。随着处理大型数据集的需求越来越多,OpenMP、OpenCL、Go、CUDA和其他一些并行处理语言和框架将成为主流。为了在短期内提高竞争力,全方位的并行化是将成为主流,这不仅仅体现在操作系统上,还体现在基础设施和视频游戏等领域中。

每个人都在学习编程

网站无处不在。 2017年的Stack Overflow调查报告指出,约有15%的专业软件工程师都在“互联网/网络服务”公司工作。据劳工统计局预测,网络开发岗位人数的增长速度将继续高于平均水平(2014年至2024年平均水平为24%)。由于该行业的的知名度较高,人们纷纷关注起“技能差距的弥补”上。编程培训班现在几乎只教网站开发,而网站开发在线课程也已经抢占了Udemy、Udacity、Coursera和其他一些在线课程的市场。

网站开发技术的自动化程度越来越高、大量入门级网站开发程序员的涌入,使得有人预测网站开发对于软件开发人员来说将成为一个“蓝领”市场。有人进一步指出,推动该市场的蓝领化是大型科技公司的一个战略。而其他一些人则说,我们正在为另一个即将破裂的泡沫而努力。

对特定技术的需求发生变化并不是新闻。 语言和框架的发展总会遇到上升期和下降期。目前的网站开发(“JS为王”)会重走2000年初的网站开发之路(还记得Flash吗?)。 在决定给自己贴上“React开发者”这个标签之前,请记住,曾经有人认为自己是“Flash开发者”。把自己的事业限制在一个特定的语言、框架或技术上就像是一场赌博。当然,要预测哪些技术能保持相关性是相当困难的,但是如果你想迎难而上,那么我建议你以“Lindy效应”为依据,并选择像C语言这样已经经受住了时间考验的东西。

未来一代年轻人的技术素养肯定更高,这是X一代甚至千禧一代的人们所不具备的。同时,CMS工具也会变成更好,以方便年轻人更好的利用这些工具。这样,更多的年轻人会进入这个行业,从而导致低水平IT和网络开发技能的价值大大地降低。另外,高中也会开始提供计算机科学和编程方面的课程,一些受过良好教育的高中生可能会进入劳动大军,在毕业后立即成为一名编程实习生。

另外的一大批编程新军是MBA和数据分析师。曾经的职位描述中要求会用Excel,而现在开始改为会用SQL,或者是熟练使用SQL。诸如Tableau、SpotFire、SalesForce和其他一些基于Web的度量系统将取代电子表格成为报告生成的主要工具。如果这种情况持续下去,那么就会有更多的数据分析师去学习SQL,因为这比将数据导出到电子表格中处理更简单。

那些想要转入IT行业或者想在岗位上更进一步的人来说,在网上学习数据库和统计类编程语言是一个不错的选择。在有了这些新技能之后,他们就可以把机器学习和统计库方面的库结合来,把自己定位为数据科学家。

最后,获得计算机科学和软件工程学位的人数正逐年攀升。例如,普渡大学宣称,他们计算机科学课程的申请数量在五年内翻了一翻。康奈尔大学也报道了计算机科学毕业生数量大爆炸的新闻。鉴于软件的增长和普及,这一趋势并不令人惊讶。对于年轻人来说,他们很难想象计算机在我们未来生活中充当的角色将越来越小,所以为什么不研究一些能够保住我们饭碗的东西呢。

稀缺和期望

在这个行业中,现在有一个很普遍的观点,认为在大学四年的计算机科学课程中学到的知识大多是没什么大用处的。我在培训班、在线开发商店,以及一些大人物例如Eric Elliott的作品中都看到过类似的观点。当然,反对意见也很多,有人甚至说:“所有的程序员都应该有硕士学位””。

我的想法跟Eric Elliott一样,我认为对于编程来说,还是有更多其他的路可以选的,而4年的大学生活可能也不是某些人最佳的选择。同时,我也同意威廉·贝恩的观点,即跨学科领域应用的基础技能对于职业生涯的长期发展来说是至关重要的,而且在大学课程之外还很难找到相关的知识。我以前曾经写过有关一个有抱负的工程师在漫长的职业生涯中应该学习哪些基础技能。

不同规模不同形式的编程学校到处都是,并且他们的广告词让人无法拒绝。在那里,你无需涉及底层细节、算法和数据结构,即可学会编程。然而,虽然斯坦福大学的毕业生确实会与来自Hack Reactor的毕业生争夺一些工作,但这仅限于在一两个子行业里。编程学校和培训班的学生目前还没有进入嵌入式系统、密码与安全、机器人,网络基础设施或人工智能等行业的研究和开发工作中去。然而,在像网页开发这样的领域中,这方面的发展十分迅速。

一些与编程相关的技能已经开始从“稀缺技能”转向“期望标准”。推动科技发展的大公司,例如亚马逊、Google、Facebook、Nvidia、Space-X等等,通常不会招聘对JavaScript只是基本了解的人。 AWS每天为数十亿用户提供服务,为了支撑这种负载,AWS基础架构工程师需要深入了解网络协议和计算机体系结构,并拥有多年的相关经验。与其他学科一样,IT业中也有业余爱好者和工匠。

这些著名的公司正致力于解决研究性的问题,以及构建某种真正能够突破边界的系统。然而,即使在基本的编程技巧越来越普及的情况下,他们仍然很难招到合适的人来填补空缺。能够编写算法来预测基因序列变化的人将会受到这些公司的追捧,在未来的价值将非常高。能够给卫星、航天器和机械自动化编程的人将继续受到企业的高度重视。这些领域并不适合成为像前端网络开发那样的“三个月速成班计划”。

计算机科学脱胎于“计算机”这个词,一些人预计,到2025年人们对它会有天生的理解。很可惜,计算机的普及并没有造就出真正理解数学、计算机科学、网络基础设施、电气工程等学科的新一代。计算机素养与计算机的研究是不一样的。尽管数学已经存在,但统计学素养较高的人仍然比较少,计算机科学也一样。 Euclid发明了多种算法,其中有一个算法在每次发送HTTPS请求的时候都会用到。但事实上,每次我们使用HTTPS登录网站的时候,并不会自动了解这些协议的工作原理。

双峰薪水分布图

成熟专业领域的薪水分布图往往有两个波峰:相对较少的人赚取了相当多的钱,他们中大多数人的薪水都很高,但在收入的前1%中却看不到他们的身影。美国国家法律安置协会(National Association for Law Placement)收集的数据证明了这种情况。大部分法学毕业生的工资在4500美元到65000美元之间,虽然工资很高,但很难跟“顶尖专业人士”联系在一起。

拥有法学学位的人的收入分布图,来自于美国国家法律安置协会 

我们往往会认为,所有的法律专业毕业生都有可能成为一家律师事务所的合伙人,而事实上他们有很多的职业方向:律师助理、文员、公共辩护、法官、企业法律服务、合同写作等等。计算机科学专业的毕业生也有很多的道路可以选择,从网页开发到嵌入式系统。由于基本的编程技能仍然是“期望”,而不是“具备”,因此,我猜测编程这个职业的收入分布图也会出现类似的情况。

虽然总会有一批IT界人士花费大量的资金来推动技术的发展,同时也会有越来越多的IT中产阶级人士为新的以计算机为中心的经济提供支持。网页开发人员的平均收入肯定会随着时间的推移而下降。也就是说,“程序员”的职位总数只会继续增长。对于那些正在重新定义可能性的程序员来说,他们将继续获得顶级工资。

无论你在这个行业中身处哪个角色,从事技术职业就意味着你要活到老学到老。如果你想让自己的收入出现在第二个波峰上,那么你可能需要研究如何创造机器,而不是简单地操作它们。

0 阅读:0

琳琅数码之家

简介:数码科技爱好者