如何把握未来技术的演进方向
纵观技术发展的历史长河,技术的发展让人眼花缭乱。随着技术的发展成就了一大批创业公司,但也有一批公司因为技术而关门大吉,正所谓成也技术败也技术。
那么我们应该怎样去把握技术的发展趋势,增加成功概率。未来意味着不可控,如果单纯去预测那么跟赌博没啥区别。俗话说以史为鉴,可以知兴替。那么我们是否可以从技术发展历史去寻找到一些规律来帮助我们去把握技术演进方向?那就是痛点和硬件。
这就像是推动技术演进的两股动力,在推动技术不断的演进。痛点更像是主动演进,而硬件却像是被动演进。如程序语言的发展就是在不断解决痛点的主动演进。计算机的编程语言始于 0 和 1,但是使用 0 和 1 编程对人太不友好,而且非常容易出错且难度非常大。于是为解决当下痛点技术开始演进至汇编语言,但是汇编语言需要编程人员对计算机的运行原理了如指掌才能编写出好程序,同时不同的操作系统汇编语言还存在差异。此时人们迫切需要一种更友好的高级程序语言,所以技术继续演进,于是高级语言出现了,里面包含了一些基本控制结构、开始拥有数据类型,如 Fortran。但是随着软件不断的发展人们又开始迫切的希望可以提高软件的开发效率,于是早期语言的集大成者 C 语言出现了,它提供了对于计算机恰当的抽象,屏蔽了计算机硬件的诸多细节。之后人们痛点变成了如果应对需求的复杂性问题。于是面向对象的设计语言 C++和 Java 出现了。
接下来我们从硬件发展的方向看看对于技术演进的影响。C++的出现在当时很长一段时间都是行业的主流。他们屏蔽了计算机的很多细节,但是始终有一个问题没有解决,那就是内存管理,但是受限于计算机的硬件性能,所以都没有成功。后来随着计算机的性能大幅提升,Java 是这个阶段的胜利者,胜利的原因在于面向对象和内存管理。在当时,面向对象和函数式编程是当时的两股清流,但是函数式编程也在发展,却始终落后于面向对象编程,也是受限于 CPU 硬件,直到后来的 CPU 多核出现,这两股清流终于回合了。后来面向对象语言逐渐的将函数式编程也纳入了自己的编程语言中,如现在的 JDK 就包含了很多函数式编程。以致于后来的出现的新语言直接就是二者的融合,如 Scala。再如十几年前的小型器,当时是供不应求。但是成本太过昂贵,一台小型机就要 100 万美元,而 Inter 服务器却走的是廉价的道路,我们知道硬件的发展是遵循摩尔定律的,所以随着硬件的发展让小型机没有任何优化可言,直到最后的去 IOE 浪潮出现。也就是使用分布式架构+开源软件”替代传统的“集中式架构+商用软件”。逐渐演变成分布式架构和云计算如此流行的局面。
孙子兵法中有句话:求之于势,不责于人。也说明了势的重要性。在物理学中也可以称之为能,它是大千世界变化的动力源泉。对于技术领域的演进也是如此,而软件行业的痛点和硬件的发展是软件演进的前置变量,这些变量为软件的演进积攒“势”。
评论