为什么要学习C++程序

开发 后端
对于每一个IT行业的从业人员,无论是开发人员、项目经理、还是测试人员,掌握了C++程序这们语言会使我们的编程工作更简单和更轻松。

 随着时代的进步科技的发展对C++程序学习的人群也大大的增加了,好下面文章就对C++程序做深一层的解析,还有对于C++程序中的复杂性说明,希望能给大家带来想要的信息。

首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。

当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。

底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。即便是C++的反对者也许也很难找到理由说“我还是不用C++程序”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。

值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++程序,并为之找一堆理由。

我假定你不是这样的人。不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。

当然,到现在你可能还是会说。我还是不用C++,因为我可以用D;或者如果你本来做的项目就不需要C++,你则可能会说,我用Python。首先,如果你的项目能用Java/Python乃至Ruby做,那么用C++是自讨苦吃。

因为能用那些语言代表你的项目在效率上本身要求就不高,那么用一门效率上讨不到太大好处,复杂性上却绰绰有余的语言,有什么价值呢?其次,如果你的项目效率是很重要的,你可能会说可以用D。

然而现实是D在工业界尤其是国内被运用得非常少,几乎没有。而C++却有大量的既有代码,已经使用C++去做他们的产品的公司,在很长一段时间之内几乎是不可能用别的语言重写代码的,正如Joel所说,决定重写一个非平凡的代码基==自杀。所以,我们至少要注意以下两个明显的事实:

事实1:C++程序在工业界仍有稳定的核心市场。

这个事实大概不需要多加阐述,很多大公司的核心技术还是要靠C++来支撑的(见Bjarne主页上的C++应用列表)。所谓事实,就是未必是大家最愿意承认的情况,但又不得不承认。C++程序积累了庞大的代码基,这个代码基不是一朝一夕能够推翻的。D从语言角度来说的确优于C++,但最关键的就是还没有深入工业界(也许根本原因是没有钱支持,但这不是我们讨论的重点)。而C呢,根据Bjarne本人的说法,他的观察是主流工业界的趋势一直是“从C到C++”的,而不是反过来,至少在欧美是如此。在国内我们则可以通过CSDN上的招聘情况得到一个大致类似的信息。

事实2:C++程序员往往能享受到有竞争力的薪酬。

是的,这不是一篇不食人间烟火的技术文章。这个事实基于的逻辑很简单:物以稀为贵。Andrei Alexandrescu这次来中国SD2.0大会的时候,在接受采访时也说过:“***钱的软件(如MS Office)是C++写的”。孟岩也在blog上提到这么个事实,我想他作为CSDN的技术总编,业界观察肯定比我清晰深刻。所以我这里就不多废话了。

当然,以上逻辑并不就意味着在怂恿你去学C++,一切还要看你的兴趣。所以如果你志不在C++身处的那些应用领域,那这篇文章并非为你而写。

责任编辑:chenqingxiang 来源: 电子工业出版社
相关推荐

2010-01-22 15:14:37

学习C++

2022-11-28 09:58:58

C++开发

2015-05-25 15:31:56

C语言学习和使用 C 语言

2021-11-19 09:49:00

CC++语法糖

2015-05-12 11:04:42

Java EE学习Java EE

2017-04-05 18:10:05

R语言开发Ross

2012-06-18 14:51:09

Python

2021-03-08 11:28:59

人工智能深度学习Python

2018-08-02 15:24:05

RPCJava微服务

2010-11-03 09:22:00

C语言

2024-01-24 11:24:03

C++编程异常处理

2010-01-21 10:34:08

SUN-JAVA认证

2021-12-03 17:22:09

CC++编程语言

2010-01-28 15:38:57

学习C++意义

2015-07-20 10:11:08

程序员幸福

2010-10-09 09:20:08

.NET

2015-11-02 09:19:10

程序员JavaScript

2021-01-27 22:31:36

HTML编程Web

2009-05-26 09:00:59

ScalaJava面向对象

2015-08-06 10:14:15

造轮子facebook
点赞
收藏

51CTO技术栈公众号