马克·吐温曾在给记者的一封信中写道:“有关我死亡的报道有些夸张”。马克·吐温的这句俏皮话用在软件技术从业人员身上是再合适不过了。年复一年,技术专家们掀起了一轮又一轮舆论浪潮,宣称这个或那个技术或趋势已经死亡,或者,如果足够幸运的话,正在走向死亡的路上。
我倾向于认为这是一种相对较新的现象,但早在 2009 年,Jeff Atwood 在他的 Coding Horror 博客上就提到了这个话题(https://blog.codinghorror.com/software-engineering-dead/)。Atwood 引用了著名软件工程师 Tom DeMarco 的一篇文章,DeMarco 在文中写道:“软件工程是一种思想,它的时代已经过去了”。(具有讽刺意味的是,指向 DeMarco 这篇文章的超链接现在已经失效了)。所以,这对软件行业来说,这显然不是什么新鲜事。
事实上,这些说法告诉了我们很多与身份认同感、变化和科技力量有关的信息。宣告某些东西死亡是在表达一种不安全感和好奇心,有时甚至是一种纯粹的反感。
看看 Quora 上的这些问题——它们都反映了技术焦虑和兴趣的一种奇怪的组合:
DevOps 已死?(https://www.quora.com/Is-DevOps-dead)
React.js 已死?(https://www.quora.com/Is-React-js-dead-1)
Linux 已死?为什么?(https://www.quora.com/Is-Linux-dead-Why)
Web 开发走到穷途末路了吗?(https://www.quora.com/Is-web-development-a-dying-career)
这些问题不是凭空产生的,它们是对不同领域现有观点的回应。从某种程度上说,它们是有价值的:提出这些问题并使用这些隐喻是评估技术价值的一种方法。
话虽如此,我们或许应该对它们持保留态度。它们可能表达了社区对某些特定方法或工具的感受,明确地说就是:说某样东西已经死了或即将死去,通常是在表达一种观点或者寻求身份认同感。
这听起来可能有点令人感到沮丧,但不管怎样,它为如何看待不同的技术在不同时期的价值提供了一种评估方式。但更为关键的是,我们需要知道为什么有些人会说这项技术或者那项技术已经死掉。他们到底想要表达什么?
“某某技术已死,因为企业不再招聘这方面的人才”
你可能会听到人们说某项技术已经死了,其中的一个原因是企业不再招聘这方面的技术人员。它们不再出现在招聘启事上,也不再“被需要”了。
毫无疑问,这种说法是有道理的,因为随着时间的推移,需求的确会发生变化,但“没有企业再招聘某某技术开发人员”的说法通常是站不住脚的。
例如,尽管有很多人传言 JavaScript“已死”或者离“死期”不远——就像几年前的这篇文章(https://medium.com/hackernoon/the-javascript-phenomenon-is-a-mass-psychosis-57adebb09359)声称 JavaScript 开发者已经走火入魔地认为“JavaScript 是一门优秀的编程语言”——但今年早些时候的一项研究(https://recruitingdaily.com/key-2019-developer-hiring-trends-an-analysis-of-112654-coding-tests/)表明,70%的公司正在招聘 JavaScript 开发人员。
所以,JavaScript 离死还很遥远。
研究还显示,48%的公司正在招聘 Java 开发人员。虽然这一比例在过去十年中下降了,但仍然足以推翻 Java“已死”或“垂死”的说法。
软件技术生态系统的演化不是按照时间顺序来的
研究报告指出,“技术的演化不是发生在技术栈之间,而是在技术栈内部”。这表明,科技世界并不像人们通常认为的那样完全符合达尔文进化论。这不是生与死的问题,而是不同的生态系统在不同的时间以不同的方式发生进化。所以,可能有一些技术会死亡,但和其他很多事情一样,这实际上有点复杂……
“某某技术已死,因为没人学它了”
如果一项技术没有人在学,说明这项技术已经死亡或者正在走向消亡,不是吗?从某种程度上说,是的。这看起来似乎很明显,但仅仅因为看起来没有人在学习,并不意味着真的没有。在某些开发者社区里,说人们还在学习 Java 显得有些奇怪,但面对如此巨大的雇主需求,还是有成千上万的人在努力学习。他们有可能刚刚开始自己的职业生涯——但你不能小看了这些存在已久的编程语言,它们是技术人员进入更专业的角色和更“专属”的领域的垫脚石。
如果说技术的变化和波动是在技术栈内部发生的,那么人们学习新库或新框架恰恰说明了这个技术生态系统是如何演变的。
一项技术只在毫无用处的时候才真正死了
但即便如此,说一项技术已死还为时过早。尽管学习 React 或 Kotlin 的人可能比学习其他技术的人多,但这并不能掩盖这样的一个事实,即在特定的场景中,那些技术仍然可以发挥作用。
另外,当人们正在学习某一项技术时,它可能正处在一个炒作周期中。对于一项技术,人们谈论得越多,就有越多的开发人员对它感兴趣。当然,这并不意味着他们一定会实际项目中使用它,或者会有大型企业采用它。在考虑技术生命周期时,有很多不同的因素在起作用——有时候,我们的比喻并不能真正说清楚正在发生的事情。
“它已经死了,因为我们有其他更好的选择”
在考虑一项技术是否死亡或衰退时,有一个重要的东西我还没有提到:我们总有其他的选择。
当你使用了一种工具、语言、框架或库,那是因为它们最能满足你的需要。如果因为某种原因使用一项技术取代了另一项,我们就会很自然地认为之前的选择在某种程度上已经过时了。
我们可以在基础设施领域看到这种思考模式——从虚拟机到容器,再到无服务器,当我们从一个阶段进入到另一个阶段,支撑这些不同阶段的技术可能会被认为已经“死”了。
但事实并非如此。虽然容器化解决方案可能比虚拟机更受欢迎,无服务器被认为是容器的替代方案,但这些方法仍然都在发挥着重要作用。实际上,你甚至可能会在相同的软件架构中看到这些不同的方法——在某些地方可以使用虚拟机,但在其他地方无服务器会是更好的选择。
因此,随意使用“死亡”这个词是一种误导。事实上,这只是说这些话的人在发出某种信号:某项技术不再适合他们了,而另一项技术更适合他们现在正在做的事情。
技术虚荣心
从别人的经验中学习可以说是一种最好的技术学习方式(比面对一堆手册或干巴巴的文档要好得多)。但当我们在使用“死亡”这个词来描述一项技术的时候,可能会把这项技术有趣或有价值的东西给隐藏了起来。为了展示自己的专业,我们关闭了探索的道路,而虚荣心只会助长具有潜在破坏性的炒作周期。
所以说,如果 Kotlin 对于你来说是一个好的选择,但这并不意味着 Java 已死或将死。实际上,随着应用场景的增长,工程团队和企业需要更加多样化的解决方案来满足日益多样化的需求。
如果一项技术确实消亡了,但它肯定不是一个线性过程。各种各样的应用场景一直在演进,它们相互影响。也许,随着 Kotlin 应用场景的增多,最终我们可能会看到它取代 Java。
“技术 X 的薪水更高,所以技术 Y 一定会死”
有人认为某些技术比其他技术更值钱,所以其他技术正在逐步消亡。这种观点带有一定的迷惑性,而且很危险。
尽管有一些调查报告对哪些技术的报酬最高进行了研究,但其中有很多缺乏严谨的上下文。
尽管《福布斯》的这篇文章(https://www.forbes.com/sites/karstenstrauss/2017/03/31/the-tech-skills-that-earn-the-most-money-in-2017/#27fafb787c1b)可能看起来很有见地(HBase 工程师的年薪超过 12 万美元),但它并没能让你全面地了解为什么这些技术对应这样的薪水。而且,更重要的是,它忽略了这样的一个事实,即这些技术只是人们在某些工作岗位上使用的工具。实际上,更准确地说,大数据工程师和架构师要求的工资很高,但普通的 Kafka 开发人员并不会得到同样的待遇!
人才缺口和行业需求
或许关注一下工作岗位的具体变化可能更实际。我的意思是,关注一下收入最高的全栈开发人员或架构师在使用什么工具,至少这样更有意思。但即便如此,这也不一定能告诉你某项技术是否已经“死亡”。它只会告诉我们两件事:哪里有人才缺口,以及企业在做些什么。
这可能会让你了解到一些事情是如何演变的——如果你是一个正在找工作的开发人员或工程师,这可能对你会有所帮助,但这并不意味着某些技术已经死了。
Java 开发人员的薪水可能不高,但这并不意味着这门语言已经死了。事实情况可能正好相反,它说明有大量的程序员可供雇主选择,他们活得很好。炒作周期可能会为我们提供新的机会和新的解决方案,但不一定能提供我们现在需要的解决方案。
那么一项技术什么时候会死?
这是一个很重要的问题。事实上,确实有一些技术死亡的例子。
但这个问题仍然有一些复杂,例如,即使某项技术的新版本已经发布,但个体项目和社区仍然需要一段时间才会用上新发布的版本。
即使供应商或维护者不再支持“已经走到生命尽头”的技术,但一些项目仍然在使用它们。从某种意义上说,它们成了僵尸技术,在有关它们存亡的争论结束之后,还能存在好几年。
理论上,版本控制应该是我们用来管理技术生命周期的一种正式的方式。但是,即使是这样,我们的系统仍然无法正确地埋葬和淘汰旧技术。这一事实表明,在现实当中,真正让一项技术消亡是非常困难的。当社区想要扼杀某一项技术,总会有其他力量,不管是因为出于意愿还是纯粹的惰性,总想要保持它的活力。
结论:一项技术很难被杀死
也许这就是为什么我们喜欢说某些技术已经死了:这样做既是在表明某种身份认同感(例如表明自己是哪一类开发人员),也是在消除差异和复杂性。当你想说某项技术已经“死”了,问问自己到底想要表达什么。如果你无意中听到有人宣称某个框架、库或语言即将消亡,那么想一下他们想要表达什么。
原文链接:
What do we really mean when we say that software is ‘dead’ or ‘dying’?
评论