最近跟一位朋友交流关于技术的发展,他的观点是未来还会出现全栈,甚至 javascript
全栈有可能会取代目前前后端协作的开发模式,当时对这个话题很感兴趣,就探讨起来,交流的过程中引发了我对技术未来潮流观点的思考,所以就打算写下这篇文章,记录我当时的思考和观点。以下只是我的个人观点,有不同意见欢迎交流和探讨。
未来不会出现全栈逆袭
经常会听到 javascript
要统一前后端,全栈会再次出现,例如当时 NodeJS
的出现就是朝着这个方法发展的,但是结局大家也是有目共睹,NodeJS
根本无法应用复杂业务和大型应用的后端能力,针对这个观点我个人是持否定态度的,我的结论如下:
- 全栈再次出现是不符合市场规律:正是因为社会的发展需求才会带来精细化分工协作,分工的本质也是为了提高生产效率,关于这点在亚当斯密的《国富论》中第 1 篇反复提到过的理论,我就不重复了,不仅仅全栈不会逆袭,前端,后端还会衍生出更多的精细化分工岗位的出现,例如 算法岗,大数据,SRE,DevOps,DBA,App,小程序开发等等细节技术岗位
javascript
统一前后端的时代不会到来:每种语言都有它优缺点和适用场景,但想要用一种技术方案来解决所有问题,美名曰提高生产力,但本质上是想逃避和不敢面对前后端协同,还有 API 设计的问题
主流技术很少会变化
至于和朋友聊过未来的技术变化,我对技术和工具的看法是这样的,不成熟的技术才经常变化,主流技术很少会变化。
每年关注 TIOBE 的排行榜发现一个有趣的现象,头部的几个主流的技术栈基本是恒古不变的,是会有一些细微的竞争,但是不会有大的变化,例如:C/C++/Java,但是底部的其他语言变化是比较大的,经常有其他语言加入进来,也有其他语言排名下降出局。例如:C#/.Net/PHP/Groovy/Dart 等等…,其实技术的潮流,就非常类似我们看到的世界 500强的排名,头部的公司永远是那几家,例如:微软、苹果、亚马逊、谷歌,Facebook 等,反倒是排名越靠后的变化越大。其实编程语言也遵循经济市场的运行规则,就是 马太效应,强者恒强。
为什么这么说 ?
因为越是流行的编程语言,会吸引开发者的使用,那么就有更多的开发者为他贡献工具库、文档、插件、开发工具等,丰富它的生态,因为生态的丰富,带来使用的方便,从而会吸引更多的新人,包括学校也会选择它作为教学语言,为它源源不断的贡献开发者的,这就是为什么说技术潮流是马太效应,强者恒强的本质。因为它的生态建立起来后是很难被替换的。
什么情况下会发生变化 ?
如果只是在同维度竞争,那么主流的技术不太会出现很大的变化,例如:现在出了一个新的后端编程语言,性能比 Java 快,你觉得大家会换技术吗?很多人是不会换的,为什么 ?
因为仅仅是一些性能的优化,语法的优化,也很难让大家放弃现有的生态环境,例如 Go 现在就面临这种情况,性能很好,语法也很好,但是不可能替代 Java,因为它的生态是没办法超越 Java,他们只能在不同维度存在,避开竞争关系。
就是说如果你想要相同赛道去竞争超过巨头,基本是不可能,就算你能做出更好的搜索引擎,你也不可能替代 Google,你能做出更好用的手机,你也不可能替代苹果,类似案例,不胜枚举。。除非新的竞争者是从其他维度过来,进行的降维打击,例如特斯拉(新能源,航空领域),这就是为什么Go 为什么只能在 PaaS 层发挥自己的作用了。在相同赛道上应用层是很难和 Java 竞争的。想想当年的 Plan9 想要通过实现一个更好的操作系统来替换 UNIX 最终失败就是一个很好的例子。
就是现在有一家公司推出一台新手机,价格更便宜,性能比 iPhone 更快,但是因为它是新的系统,没有 App Store,所有软件需要重写和迁移,那么我相信只有小部分的人才敢于去使用,而且不会作为主力机(生产环境)来使用。但是你会说给他一些时间,他的生态会慢慢建立起来,例如 Go,但是不同的是,那些主流的技术他们不会等待,他们也在完善自己的生态,只有很低的概率会被超越。
技术迭代的三个必要条件
新的技术必须是要从三个维度全面的碾压,才有可能替代现在的流行技术方案,如下:
- 近乎碾压的性能和效率, 例如苹果 M1 芯片的效率和功耗比,近乎碾压英特尔的芯片
- 差不多的生态:光有性能,几乎不可能让大家去迁移,在新的技术上必须要有几乎相同生态环境和工具使用,这也是为什么苹果花那么大力气开发 rosetta 2 的原因,就是为了把英特尔的生态迁移过来
- 大公司的长期的资金支持和信用背书,这个就不多说了。例如 Go 语言背靠 Google ,M1 背靠苹果,Java 背靠 Oracle 等等,很多技术理念很先进,但是因为缺乏大公司的支持而失败的不胜枚举
最后总结
所以基于以上的结论,我认为起码未来10年内不会出现全栈逆袭,主流技术也不会发生大的变化。人们总是说技术是多变的,但是变化的都是那些不成熟的技术,主流成熟的技术是很少变化的,例如:C/C++/Java/Javascript,从目前的行业趋势来看(TY,Java,Go,Rust),我愿意相信未来会是强类型,静态编译型的天下,性能什么的还好,代码的可读性对于团队协作真的太重要了。所以我的结论是,尽量选择主流的技术栈和遵循行业的选择,这样风险更小,而且在生态的加持在也会让你的应用更加的健壮。随意不要盲目去追寻新潮和炫酷的新技术,用好成熟和主流的技术栈才是一个工程师对产品和系统质量负责的态度。