从计算机的发展来看,程序员越来越不用关注底层硬件的知识,开发变的越来越简单。归根结底,是因为虚拟化做的越来越好。文件系统将硬盘虚拟化,我们通过访问文件系统就操作了磁盘。进程和线程将CPU虚拟化,任何计算任务被加载到进程中来使用计算资源。Socket将网络访问虚拟化,简单的socket命令就可以方便的操纵网络。整体上来看,操作系统将计算机虚拟化,我们通过访问操作系统就可以控制计算机。
在分布式和云环境下,虚拟化也无处不在。Hadoop是对计算能力的虚拟化,通过提供map-reduce方式能方便的利用集群的CPU资源。云计算中IAAS、PAAS、SAAS也是将一些公共能力虚拟化,使得我们能够更方便、更灵活的使用云上的硬件资源。
- IAAS: 基础设施即服务,通过租用服务器、存储和网络硬件节省维护成本和办公成本。
- PAAS: 平台及服务。云厂商通过搭建一些基础的平台使得开发者能够方便的在上面开发,比如小程序平台、google的app-engine。
- SAAS: 软件及服务。云厂商提供一些基础的服务使得开发者能够直接应用,比如微信的授权登录服务、Mysql分布式数据库存储服务等。
从IAAS到SAAS,虚拟化越来越细。从大而全的服务到微服务,虚拟化同时越来越模块化。近来比较火的概念技术中台,本质是上也是一种虚拟化,中台类似于海陆空三栖支援,前台类似于特种兵。由于有了海陆空的强力支援,特种兵能够在最短的时间内攻城拔寨。所以技术中台需要虚拟化各种公共的能力(分布式数据库、推荐平台、机器学习平台、FatureStore等),前台能够利用中台迅速的完成服务应用的搭建,快速试错。
虚拟化屏蔽了底层的实现,大大节省了程序开发的复杂度。随着技术的发展,程序员未来可能会更像组装工人,将各种零件组织在一起形成产品。所以程序员未来最重要的技能是什么?