常见的错误观点
- 操作系统和驱动程序都是C写的,学好C足够了。
- Linus大神都认为C++一无是处,还学习它干嘛?
- C++在应用层用得多,学嵌入式的没必要学。
- 我以后就做驱动开发,没精力也没必要学习C++了。
一些历史
Unix操作系统诞生之初是直接用汇编语言写成的。
随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。
1971年, Ken Thompson和Dennis Ritchie对B语言进行了改良,使其能够直接产生机器码,C语言诞生。
Unix开始用C语言重写,同时C语言在实践的过程中得到发展。
C语言的特点
C语言是在实践的过程中逐步完善起来的
- 没有深思熟虑的设计过程
- 残留量过多低级语言的特征
C语言的目标是高效
- 最终程序执行效率的高效
软件方法论的发展
面向过程程序设计
数据结构 + 算法
- 主要解决科学计算问题,用户需求简单而固定
- 特点
- 分析解决问题所需要的步骤
- 利用函数实现各个步骤
- 依次调用函数解决问题
- 问题
- 软件可重用性差
- 软件可维护性差
面向对象程序设计
由现实世界建立软件模型
- 将现实中的事物直接映射到程序中,可直接满足用户需求
- 特点
- 直接分析用户需求中涉及的各个实体
- 在代码中描述现实世界中的实体
- 在代码中关联各个实体协同工作解决问题
- 优势
- 构建的软件能够适应用户需求的不断变化
- 直接利用面向过程方法的优势而避开其劣势
C语言的加强
当面向过程方法论暴露越来越多的缺陷的时候,业界开始考虑在工程项目中引入面向对象的设计方法,而第一个需要解决的问题是:高效的面向对象语言,并且能够兼容已存在的代码。
C语言和C++并不是对立的竞争关系。
C++是C语言的加强,是一种更好的C语言。
C++是以C语言为基础的,并且完全兼容C语言的特性。学习C++并不会影响原有的C语言知识,相反学习C++可以让我们学到更多的软件设计方法。
学习C++的优势
学习C++可以为以后学习其他语言做准备,下面是现代软件产品的架构图:
现代软件产品具有如下特性:
- 系统一般是由多种语言写成的
- 系统架构的目标是拥抱用户需求变化
- 系统拥有较好的移植性
- 系统能够方便的部署和更新
操作系统的修改和驱动程序的开发在现代软件产品中占据的比重越来越小。
学习C++的意义
- C++是一种更强大的C,通过学习C++能够掌握更多的软件设计方法
- C++是Java/C#等现代开发语言的基础,学习C++后能够快速掌握这些语言
总结
- 所有的软件系统都是为了满足用户需求而开发的
- 对于一个开发团队而言,在短期内开发出用户满意的软件系统是其核心竞争力的体现
- 对一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现
- 对一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是其核心价值的体现