1.3 C++世界版图
C++语言的发展过程,不仅是一个特性不断增加、内容不断丰富的过程,更是一个在应用领域中不断攻城略地的过程。在其30余年的发展过程中,C++在多个应用领域都得到了广泛的应用和发展。无论是在最初的UNIX/Linux操作系统上,还是在Windows操作系统上,甚至是在最近兴起的嵌入式系统上,C++都占有不可取代的一席之地,如图1-3所示。
图1-2 C++世界三分天下
1.3.1 Windows系统下的C++开发
自从盖茨在1985年用C/C++完成了Windows 1.0之后,C++就与Windows操作系统结下了不解之缘。不仅Windows操作系统底层是使用C/C++开发的,而且Windows操作系统上运行的大多数大型软件也都是用C++开发的。可以说,Windows操作系统中流淌的是C++的血液。虽然现在Windows操作系统上的程序设计语言有很多,但是,C++以其自身得天独厚的独特优势和历史的积淀,在Windows平台上仍然拥有不可撼动的地位。
1. 得天独厚的优势
Windows操作系统本身是用C/C++开发的,两者之间的亲近关系,使得C++调用Windows API(Application Programming Interface,应用程序编程接口,通常是操作系统或编程框架所预先定义的一些函数,以便于程序员访问系统所提供的功能)有着天然的优势。因此,在开发与Windows操作系统相关的程序时,往往会优先考虑选择C++语言。
2. 历史的积淀
由于历史的原因,有很多运行在Windows操作系统上的应用程序都是使用C++开发的,而这些应用程序现在依然还需要继续维护和升级。因此,C++在Windows操作系统上有着先发优势。
1.3.2 UNIX/Linux系统下的C++开发
如果说在Windows操作系统下C++还有其他的竞争者,那么在UNIX/Linux操作系统下,C++几乎就是开发语言的不二选择了。
作为程序设计语言,C++在UNIX/Linux操作系统下的优势非常明显。首先,UNIX/Linux操作系统本身是用C/C++语言开发的,这使得操作系统本身对C++开发非常友好。另外,UNIX/Linux操作系统上大多是服务器端的应用,这些应用强调的是高性能和高安全性,而这恰恰是C++语言的强项。大多数UNIX/Linux上的应用都是使用C/C++开发的,比如著名的网络Web服务器Apache、数据库服务器MySQL等。因此,如果想在UNIX/Linux操作系统上开发应用,在对性能提出较高要求的同时还要求有较快的开发效率,那么C++必定是首选的开发语言。
1.3.3 嵌入式系统下的C++开发
随着各种各样数码产品的流行,嵌入式系统也逐渐成为了热门的开发领域。嵌入式系统特殊的硬件限制,使得嵌入式系统对开发语言有着特殊的要求。比如,受制于执行单元的指令集较小的原因,只能实现语法相对比较简洁的开发语言;嵌入式系统的内存容量比较小,要求对内存进行良好的管理;嵌入式系统的CPU主频比较低,要求可执行代码简洁高效;同时,为了提高开发效率,要求采用高级开发语言等等。嵌入式系统对开发语言的这些苛刻要求,根本难不倒C/C++语言,而且正好是C/C++的优势所在。C/C++的语法比较简单,可以在嵌入式系统上得到实现;它接近底层,可以对内存进行良好的管理;其编译生成的可执行代码简洁高效;其自身是高级程序设计语言,开发效率可以得到保证。C/C++很好地满足了嵌入式系统对开发语言的苛刻要求,几乎成为嵌入式系统开发的唯一选择。
1.4 如何学好C++
既然C++如此强大,那么我们该如何学好C++呢?
几乎每个C++初学者都会问这个问题。然而,这个问题并没有一个所谓的标准答案。作为一个C++世界的导游,我可以介绍一些知识和经验给大家,让大家少走弯路,沿着正确的方向前进,轻松愉快地完成C++世界的奇妙之旅。只要把握好下面这两个原则,至于具体的学习方法,则需要我们大家自己去寻找。
1.4.1 “多读多写多思考”是学好C++的唯一途径
C++是一门实践性很强的技术,我们不可能仅仅靠看几本书就学好了C++。还记得当年我们在学习英语的时候老师总是教导我们要“多听多说多读多写”吗?同样,学习C++也需强调“听说读写”。对于编程语言而言,虽然没有“听”和“说”,但是“多读”和“多写”也是同样适用的,再加上一个“多思考”,这才是学好C++的唯一途径。
1. 多读
多读就是强调多阅读和学习别人的优秀代码,特别是一些优秀的开源产品(例如,文本编辑器程序notepad++、FTP文件传输程序FileZilla等)的源代码。通过阅读这些源代码,不仅可以学习它所用到的具体的语言知识、开发技术,还可以从中学习它的设计思想、编程风格等。正所谓“近朱者赤,近墨者黑”,向高手学习,是成为高手的捷径。
2. 多写
多写,就是多多地进行开发实践。编程是一门技艺,它来自于实践,也必须回归到实践中去。纸上谈兵是无法学好编程的。多写包括很多方面,比如,在开发环境中完成书本上的例子程序,重新实现网络上的例程,开发实现一些小程序等。多读的目的只是学习别人的知识和经验,多写的目的才是将别人的知识和经验内化为自己的知识和经验。同时,通过多写可以在实践中发现很多在“多读”的过程中被隐藏的问题,让我们的认识和理解更加深刻。同时,通过自己编写程序、调试程序,可以获得宝贵的第一手开发经验,培养自己的动手能力,从而成为一个真正的高手。
3. 多思考
做到了上面的“多读多写”,可以让我们成为一个不错的开发程序员,但是却不能让我们成为一个专业的软件工程师。
“多读多写”强调的是代码实现的能力,但是,要想成为一个专业的软件工程师,仅仅只会写代码是远远不够的。我们还必须拥有设计的能力,拥有对问题进行抽象、分析、设计算法并最终用程序解决问题的能力。而“多思考”正是为了给我们补上设计这一课。
简单地说,优秀程序的每一个组成部分(类或者函数等)都是为了解决某个问题而专门设计的。那么,面对优秀的代码,我们需要思考的就是,这是一个什么问题?为什么要设计成这个样子?还有没有其他更好的方法?只有这样,才能明白优秀的代码为什么优秀。在遇到类似问题的时候,才会触类旁通,设计出同样优秀的代码。
在这个世界上,从来就没有哪一门程序设计语言是仅仅通过读一两本参考书而学会的,正如没有哪一个人仅仅读了《小说概论》就能学会写小说。我们必须不断地阅读、学习、思考他人的优秀代码,并且不断地亲自动手实践,将编码进行到底,才能真正地掌握一门程序设计语言。
1.4.2 和Google做朋友
在开发实践中,与其说程序是编出来的,倒不如说是“搜”出来的。在实际开发的时候,如果遇到一个语法上的细节问题,就可以用Google搜索关于C++的教程;如果遇到函数使用上的问题,就可以用Google搜索这个函数的文档;如果遇到常见的开发任务,比如打开并读取某个文件,就可以用Google搜索已有的示例代码。甚至当遇到程序中的疑难杂症时,还可以用Google搜索有没有人遇到相同的问题,看看他人是如何解决这个问题的。总之,编程开发活动离不开Google。网络就像一个大金矿,而Google就是采矿的机器。善用Google、和Google做朋友,可以帮助我们充分利用丰富的网络资源来学好C++,用好C++。
知道更多:如何“FQ”访问Google
因为众所周知的原因,虽然Google对于每个程序员来说都是最为有用的网站,可是在国内却一直无法正常地直接访问。为了访问Google,程序员们不得不大费周折,有的采用收费的VPN,有的采用http代理作为中转,有的采用内置“FQ”功能的特殊浏览器。这些方法要么是太费银子,要么是太过繁琐。一种更加简单实用的方法是:首先将系统的首选DNS服务器修改为42.120.21.30(OpenerDNS项目提供的DNS服务器,可以正确地解析Google的网址),然后通过访问https://www.google.com网址,就可以以加密的HTTP协议访问Google,从而避免被防火墙阻拦而实现对Google的正常访问。