24小时热门版块排行榜    

CyRhmU.jpeg
查看: 427  |  回复: 1
当前主题已经存档。

cqxf

[交流] 我眼中的最佳C++入门书籍(兼评国内电脑书市)

我觉得《The C++ Programming Language》是C++入门者的最佳读物。理由如下:

1,入门书籍的选择一定要慎之又慎,不然会大大影响初学者对C++的认识。好比在一块木板上钉一颗钉子,如果开头几锤子敲下去就敲歪了,那么以后要想纠正就非常困难了。很多人最后放弃学习C++,就是因为他们被一些不好的书所误导,以至于他们还没有来得及领略C++的恢宏与壮美就鸣金收兵了。这种情况非常令人可惜。有鉴于此,只要有人问我初学C++应该选那本书,我就会毫不犹豫地推荐由C++创始人Bjarne Stroustrup执笔的鸿篇巨制:《The C++ Programming Language》!之所以向大家推荐这本对于初学者而言可能略显艰深的书籍,是因为:选择C++作为学习对象的人一般都是下定决心专业从事软件研发的技术人员。一般而言,他们对计算机领域的各种基础知识是具备一定功底的。如果初学者并不想在程序设计领域深入地走下去,那么,我不会推荐他学习C++,而会推荐他去学习其他语言。

2,不像市面上常见的一些强调学习过程短平快的编程书籍,学习这本书不要贪图速成。因为C++本来就不是一门可以速成的语言。所谓的速成无非是仅仅学会C++的一丁点皮毛。《The C++ Programming Language》这本书可以长时期放在你的枕边伴你入眠,它将伴随着你度过编程生涯的每一个成长阶段。因此买这本书的投资是绝对划算的。表面上看,学习这样的经典著作可能会很慢,会很吃力,但是我相信这才是真正的捷径,因为它不会让你走弯路,不会让你在学习过程中一次又一次地纠正自己在阅读其他低质量C++书籍过程中所慢慢形成的错误观念,所以说:似远实近!

3,OO观念的初步建立是学习C++的前提,必须时刻用OO观念去理解C++的设计决策。OO观念的核心有三条:封装,继承,多态。网上关于OO基本观念的介绍也是多如牛毛。初学者不必急于一下子完全理解它们,因为OO观念的深刻理解只能从长时期的思考和实践过程中获得。这本书的最大特点就是在引入C++各项语法特征的过程中特别注重交待清楚它们的来龙去脉,尤具价值的是,书中每一章后面都给出了极其实用的编程建议(Advice),这些编程建议是国内那些C++作者不可能写得出来的。我这么说绝对不是崇洋媚外。如果说中国的IT技术水平落后国外20年的话,那么中国的IT教育水平至少要落后国外30年。中国目前在IT技术写作领域没有哪一个称得上是大师级别的原创技术作家,大多是靠剪刀加浆糊吃饭的。档次低一点的,直接抄袭和拼凑国外名家的作品;档次高一点的,熟读一下技术标准和规范,然后再翻译成中文,就变成著作了。

4,读完国内作者写的C++书籍之后,你很难获得一种C++究竟强大在何处的认识,好像你只不过是在熟悉一种普通编程语言的语法细节罢了。很多人发出这样的疑问:绝大多数C++的语法概念其他语言也有,比如函数的概念,结构的概念,子程序的概念,类的概念等等,那么究竟是什么样的的特性使得C++成为了目前最具有影响力的编程语言之一呢?这是那些国内C++书籍所不能告诉你的。国内C++书籍大量的着墨点基本上全部落在各种编程语言都具有的这些共性上面,基本上没有看见过有哪本书专门介绍过C++所独具的“特性”。为什么这些作者不讲呢?那是因为C++独具的“特性”通常隐藏于C++的整体设计之中,如果不是像Bjarne Stroustrup那样的骨灰级C++大师,一般的中国作者绝对不可能具备俯瞰C++设计全局的能力。

5,各种编程语言的语法共性基本上人人都可以在很短时间内熟练掌握。关于C++的入门语法介绍,网上免费资料暴多,初学者完全可以一边跟随着这些入门资料的指导,一边在电脑上敲敲打打,从而快速度过学习一门语言的语法熟悉阶段。一旦初学者在短时间内熟悉了C++的基本语法,那么这些国内作者编写的C++书籍基本上就可以束之高阁了。因为这些书籍大多没有什么思想价值,作为技术手册参考一下勉强可以,但如果用来深入掌握C++就只能说是缘木求鱼了。况且这些书通常并不便宜,一般也要30-50元人民币。同学们一般资金有限,所谓好钢要用在刀刃上,与其买一本利用价值不高的书,还不如加一点点钱去购买真正经典的书籍。所以我绝对不会推荐初学者去购买国内作者写的C++书籍。

6,不是说中国在IT领域没有高手,就我所知,中国的技术高手还是有不少的,但是愿意把自己的宝贵经验和心得体会用笔写成书的高手我就极少看到过了。首先,这些经年累月积累下来的知识财富对于一个吃技术饭的人来说实在太宝贵,写成书公开对作者而言实在太吃亏。希望大家承认并接受这个事实。知识本来就具有财产的属性,不然“知识产权”一词从何而来?其次,写书很花时间,基本上是一件燃烧自己照亮别人的雷锋行为。当然,这里的写书指的是作者毫无保留地把自己的精华经验写出来而不是为了敛财而瞎编。最后,目前在中国,通过奉献自己的技术经验来获得合理的收益和报酬还不现实,中国还不具备产生专职技术作家的土壤,原因是多方面的,大家都明白。

7,为什么国外有那么多高手愿意写书呢?原因有多种。一、国外有良好的知识产权保护制度,技术高手可以通过写书来获得不低于当一个资深工程师的收入。二、国外的技术积累实在太雄厚,有些东西在中国可能是技术秘密,但是对于国外作家而言,算不上是技术秘密,因此可以写成书公开。三、对某些作家而言,他公布自己的经验越多,对自己越有利。比如Bjarne Stroustrup,很显然,对他来说,全世界使用C++的程序员越多,他的地位就越不可动摇。所以,Bjarne Stroustrup完全可以把自己关于C++的一切技术思考和经验毫无保留地告诉给全世界的C++程序员。微软和SUN免费公布自己的技术规范也是同样道理。所以在国外,作者,读者,出版商共同构成了一个良性循环的知识生态系统。毫无疑问,这样的结果必定是多赢。但是,请牢记,真正有商业价值的技术你绝对不可能通过买书学习来获得,比如,你绝对不可能在市面上买到Adobe公司关于字体引擎的算法讲解书籍。要是你恰恰需要这些技术怎么办?回答是:购买!买不起或者买不到就只有脱下外套挽起袖子自己来搞了。没有技术的封锁就没有技术的进步,这又是一个需要用辩证法来解释的问题。

8,我相信,只有通过精读C++创始人撰写的这本书,你才可以最准确地理解和把握C++区别于其他语言的精髓。Bjarne Stroustrup不仅仅介绍了C++的语法,更重要的是全面阐释了C++各种基本设施的设计动机以及在应用过程中应当注意避免那些问题。这本书不仅仅告诉你How,更重要的是他会告诉你Why!况且,世界上没有哪个人能比Bjarne Stroustrup更加了解C++!世界上也没有哪个人能比Bjarne Stroustrup把C++阐释得更加清楚!这就是我为什么强烈推荐此书的最根本理由!我觉得学习C++的过程中最好时刻审问自己:C++中的某些规范为什么要这么制定?比如:为什么要搞运算符重载?为什么要保留广受诟病的多重继承机制?等等。思考这些问题就是在揣摩C++标准委员会的设计意图,而这些设计意图实际上深刻地反映了工业界所面临的各种现实问题。

9,是否懂得C语言并不是学习C++的前提。不仅仅是因为C++本身兼容C语言,更重要的是C++所倡导的程序设计观念是和C语言完全不同的。C语言在某种意义上是对CPU模型的抽象。尽管C++完全保留了C语言的机器模型,但是C++更加注重对现实世界进行抽象。为此,C++创始人Bjarne Stroustrup专门写过一篇著名的文章:《Learning Standard C++ as a New Language》(把标准C++作为一种全新的语言来学习)

上面是我对lamster兄关于如何选择C++学习入门书籍的观点所进行的探讨,本帖纯属学术讨论,观点不同之处还望lamster兄多多包涵。更加欢迎lamster兄提出自己的宝贵意见。先行致谢!

下面是我在另外一篇帖子里的发言,由于与本帖相关,所以附录到下面:

************************************


   
逍遥狼 wrote:
请问各位高手,在C++的书籍,那几本比较经典??国外的,国内的都列举点  



国内作者写的C++书籍一本也不要买!

我的推荐书单如下:

入门阶段:
《The C++ Programming Language》或者《C++ Primer》其中一本。不必两本都买。
《Essential C++》
《The C++ Standard Library》候捷译本《C++标准程序库》

提高阶段:
《Effective C++》和《More Effective C++》
如果你将来从事核武器控制之类的软件设计,加上下面这两本书:
《Exceptional C++》和《More Exceptional C++》
如果你从事3D游戏设计,那么程序的效率远比程序的安全更重要。上面两本书可以忽略。当然,基本的防范编程你应该了解。

研究阶段:
《The Design and Evolution of C++》裘宗燕译本《C++语言的设计和演化》
《Inside The C++ Object Model》候捷译本《深度探索C++对象模型》
《ISO/IEC 14882》这是C++语言的国际标准文件,它上面提到的所有C++书籍的技术源头和归宿,也是解决各种C++疑难问题的最高法律文件。

上面的书籍并没有包括完所有的C++优秀书籍。考虑到你的阅读时间和精力,我忽略掉了很多比较优秀的书。但是,如果你把上面这些书籍读完了,那么C++的各种主流思想和先进技术就已经被你尽收眼底了。

个人建议:努力学会用C++思考(Thinking in C++),而不是仅仅着眼于学会C++的语法细节!这样你才不会在学习过程中走过多的弯路。

最后提醒你一句:上面的所有书籍都可以找到电子版,如果你囊中羞涩,那么这些电子版书籍可以解您燃眉之需。

[ Last edited by mainpro on 2005-12-5 at 12:59 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hqwxyz

新虫 (初入文坛)

1

有道理,我看过国内作者的C++后写程序还是C的思路。用了运算苻重载的技术也只是让主程序显得简洁一些,复杂部分留给了重载类,没什么意思。所以,至少国内的书不要先看吧。
2楼2005-09-27 16:06:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cqxf 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见