3.2 硬件的天下
在编程语言的排行榜中,一般Java、C、C++列居前三。与Java不同的是,C/C++是底层语言,与硬件结合度比较高。可以用来进行一些更贴近硬件的开发(主要是性能上),所以在ARM开发/智能家居/物联网/智能硬件等嵌入式行业应用广泛。而C++相比于C,引入了类的概念。我们知道,Java是一个纯面向对象的编程语言,在Java中,一切皆对象(这与在Linux中“一切皆文件”的概念差不多)。而相比于Java, C++不是完全面向对象,它保留了部分面向过程的东西。比如“指针”这个概念在C++里依然强大。下面来看看C/C++的3个具体应用场景。
❑ C语言最主要的使用领域应该是Unix系统开发以及某些Unix系统软件的相关开发,所以常见的开源技术的源码,如Nginx,大多数都是用C语言编写的。因此在云端实践中,更多的是下载常见开源的源码包,使用Make编译及“Make Install”进行安装,这也是云端实践中做得最多的事情。
❑ C语言在嵌入式开发中,依然居于“舍我其谁”的霸主地位,主要是因为C语言跟底层硬件的结合度较高。在诺基亚王国鼎盛时期,也是山寨机流行的年代,我曾在无锡一家从事手机增值服务业务开发的公司做Java开发,但公司的研发主要还是基于C语言的,主要是基于MTK平台做手机的嵌入式开发。我印象最深刻的就是,每次C语言开发团队加班就是等代码编译。手机硬件端主要负责基于LBS/GPS的定位功能,而Java后端平台端主要负责数据展示查看、数据管理方面的功能(手机通过HTTP请求跟后端Java平台做数据同步交互)。后来随着Android的崛起,进入了智能机时代,那家公司也面临转型的问题,最终业务转型失败,湮没在历史的潮流中。另外,在互联网行业中,对嵌入式工程师需求量最大的一家公司就是华为。华为技术有限公司是一家生产销售通信设备的民营通信科技公司,对于华为交换机,搞过运维的、对硬件有过接触的人基本都听说过,华为需要大量的嵌入式研发人才来进行开发。
❑ MFC让C++跟Windows系统底层结合得特别紧密,所以C++在游戏领域特别火。我们看到热门游戏的客户端,十之八九是用C++编写的。或者Windows下的一些软件/工具,十之八九也是用C++编写的。另外,大多数游戏外挂程序也都是利用MFC和C++开发的。以前我对游戏外挂特别痴迷,很好奇具体是通过什么样的技术手段来实现的。其实原理也很简单,主要是通过进程钩子的方式将DLL放进游戏进程中去,修改游戏参数达到“外挂”的效果。