你好,C++(2)1.3 C++世界版图1.4 如何学好C++
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的正常访问。
你好,C++(2)1.3 C++世界版图1.4 如何学好C++的更多相关文章
- 你好,C++(3)2.1 一个C++程序的自白
第2部分 与C++第一次亲密接触 在浏览了C++“三分天下”的世界版图之后,便对C++有了基本的了解,算是一只脚跨入了C++世界的大门.那么,怎样将我们的另外一只脚也跨入C++世界的大门呢?是该即刻开 ...
- php基础的一点注意事项
1.要弄懂"~"运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的 另外正数和负数的补码不一样,正数的补码,反码都是其本身,即: 正数9 ...
- javascript基础部分
javascript基础部分 1 数据类型: 基础数据类型(通过typeof来检测):Number,string,undefined,null,boolean,function typeof只能检测 ...
- Spring中bean的配置
先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经 ...
- java基础笔记(2)----流程控制
java流程控制结构包括顺序结构,分支结构,循环结构. 顺序结构: 程序从上到下依次执行,中间没有任何判断和跳转. 代码如下: package com.lvsling.test; public cla ...
- 前端框架(二)DIV多选复选框框的封装和MySql数据库存取
图能够包括的寓意和含义是文字不能比拟的,先有一个效果图你也就知道这篇文章的主要内容是关于什么问题的.省去了一大堆文字的累述.看以下这张图: watermark/2/text/aHR0cDovL2Jsb ...
- 学习HTML 第五节.简单交互 加个按钮
学习HTML 第五节.简单交互 也许你和我一样,对页面排版的兴趣小于网页交互,那么我们就先略过一些章节,直接先学一下简单交互. 前面点击图片打开链接的网址,已经是最简单的交互方式了,复杂的方式则需要用 ...
- JSP/Servlet开发——第七章 Servel基础
1.Servlet简介: ●Servlet是一个符合特定规范的 JAVA 程序 , 是一个基于JAVA技术的Web组件. ●Servlet允许在服务器端,由Servlet容器所管理,用于处理客户端请求 ...
- Python脚本开发练习
打印乘法口诀表 #!/usr/bin/python #coding=utf-8 print("Hello,World....") print("你好,欢迎来到Python ...
随机推荐
- 【转】单独编译android framework模块出现的问题
原文网址:http://blog.csdn.net/leonan/article/details/8629561 全编andorid后,单独修改编译一个framwork模块,make snod会有如下 ...
- 【转】Android Building System 总结 - 一醉千年 - CSDN博客
原文网址:http://www.360doc.com/content/15/0314/23/1709014_455175716.shtml Android Building System 总结 收藏 ...
- Google Map API学习1
这一段时间公司一个新产品上线, 做超市代购的 这样,就需要计算每个门店也就是超市,距离小区之间的距离. 我们用的是Google Map 1.批量对地址进行编码,也就是将地址批量转化成对应的Goole ...
- Python操作Excel_随机点菜脚本
背景: 中午快餐,菜单吃了个遍,天天纠结于不知道点啥菜. 想起读书考试时,丢纸团选答案,于是用python写个随机点菜脚本玩玩. 功能: 菜单为Excel,一个Sheet ...
- history对象back()、forward()、go()
history对象back().forward().go()方法history.back() 功能:加载历史列表中的前一个URL(后退). 语法:history.back() 调用该方法的效果等价于点 ...
- Delphi中WebBrowser拦截网页Alert对话框消息(转)
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, O ...
- C# 保存窗口为图片(保存纵断面图)
源代码例如以下: #region 保存纵断面截图 private void button_save_Click(object sender , EventArgs e) { SaveFileDialo ...
- android 41 Environment
assets通常存储音频视频文件,但不要太大. Environment可以获取sd卡的相关信息,sd卡的根路径:/storage/sdcard activity.java package com.sx ...
- linux_2.6内核内存缓冲与I/O调度机制:
http://blog.csdn.net/kaiwii/article/details/7030178 到底是BIO还是BH?答案是BIO与BH
- Objective-C中的@Property详解
Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...