English

从四本书学习C++

2009-10-14 来源:中华读书报 作者:■张蜀 我有话说

最近在某软件开发网站看到一个帖子,帖主准备告别C#转向学习C++。这个写帖的哥们儿,是在老板告诉他今年只能给他长三百块工资后作出这个决定的。我们都很缺钱啊,看来C++在程序员心目中是一个可以带来高薪的编程语言。类
似的帖子,可以在各种程序员活跃的论坛上经常看到,或许正是这个帖子,成为了我写作本文的初衷。

C++比较难学,这里面有许多原因,但是我认为最大的原因是C++思想复杂难解,往往使初学者误入迷津。甚至一些著名人士也在说错话,比如有一个人写了本ThinkinC++,那很可能是错的,你去看了越看越糊涂。一个最著名的错误是,C++是最为典型的面向对象的编程语言,很多人确实是从C++学习面向对象编程的,因为说得多了,它几乎被当做真理。

当然这不是真的。准确地说,C++是一种混合编程语言。它只是使得C语言具有了面向对象的特性。这让我们不得不谈到C。一般地讲,我们认为C和C++都是万能语言,但是这两个万能的确意义不同。C因为它的指针,映射了冯诺依曼机,而天下的计算机又多符合冯诺依曼机模型,这使它看起来是万能的。而C++,却是模仿人类的解决问题的思维,试图寻找一种普遍统一的方法,来达到万能,也就是使用概念编程。

这种用一个或几个概念描述世界的想法,最早来自古希腊,一直到19世纪末,麦克斯韦在经典物理中,还试图用几个微分方程解释整个宇宙。后来的事情,我们大家都知道,出现了爱因斯坦的相对论和量子力学,世界比我们所想象的要复杂。从计算机科学的角度说,图灵机的可计算模型使得在计算机上形成人类的概念思维注定只是一种幻觉。C++确实能够形成概念,比如某个对象m,它做了一个A的事情,然后它又做了一件B的事情,你很容易使用C++写出m->A,以及m->B;但是非常不幸的是,你无法预料m->(A+B)会发生什么,这句子的实际效果与你脑中想象的A+B,可能大相径庭。而且这是致命的,你无法通过增加一些Effective或者减少Gotchas而有所修补。

概念可以通过强制映射而获得,但它们基本是不可运算的。这其实也就宣告了它不可能成功,就像《纯粹理性批判》不可能成功一样。那么我们应该怎样认识C++呢?实际编程中C++毕竟是非常有用的语言,就像海德格尔对康德哲学的重新解释那样,语言是存在之家,即使作为一套形而上学体系它不成功,但它却承载了存在。C++在本质上应被理解成一种与C一样的语言。它构成了与C不同的谱系,甚至可以简单地把它看成C的一个库。我们可以克制地使用C++,也可以疯狂地使用C++,语言形式的纷繁复杂或简约并不是关键,当我们只把C++当做一种语言,而不是一个形而上学体系时,一切就简单了。基于这样的理解,我特别推荐如下四本学习C++的书籍:

1.《C程序设计语言》,(美)Brian W.Kernighan,Dennis M.Ritchie著,徐宝文、李志译,机械工业出版社,2004年1月,30.00元

这是C语言发明人写的书,很经典。

但,这不是C吗?对,我就是要推荐一本C的书。如我上面所述理由,而且作者是图灵奖获得者,你可以从此书学习C或C++,而且也可以学习到作者对计算机技术的整体理解。中文的翻译,网上有人翻作C语言圣经,翻得很好。它是C语言的圣经,也是C++的圣经。

2.《C语言解惑》,(美)Alan R.Feuer著,杨涛译,人民邮电出版社,2007年5月,25.00元

这本书是贝尔实验室用来教授C语言的小册子,非常棒,因为它非常简单。

3.《C++ Cookbook中文版》,D.Ryan Stephens等著,金名等译,清华大学出版社,2007年10月,59.00元

这是我推荐的几本书里,唯一的一本讲到面向对象的,同时也讲到了Boost,不用怕,作者没有想形成一个解决一切问题的体系,他只是把C++当做一门语言,一个工具。Lippman曾经非常羡慕《Learing Perl》,想写一本让人看一眼就知道C++是怎么回事的书,我觉得这本书几近他的目标。

4.《程序设计基础》,吴文虎著,清华大学出版社,2006年7月,28.00元

这是我选的书中唯一一本中国人写的书。吴文虎先生曾经任中国信息学奥林匹克队教练,对计算机教育深有体会。这是他在清华上课的教材,是讲程序设计的,也可以当做C++的教材。这种在使用中学习C++,在解决问题中学习C++,恰恰是学习C++最为正确的途径。

最后我想送给准备学习C++的朋友们,也包括开头提及的网友,一句来自Ruby发明人松本行弘的编程格言:Creative and enjoy your life.这也许是我们所有程序员的信仰,祝你好运气!

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有