现在的位置: 首页 > 综合 > 正文

c++学习之路

2018年02月15日 ⁄ 综合 ⁄ 共 4707字 ⁄ 字号 评论关闭

混沌阶段

混沌是什么阶段,就是刚刚跨入软件开发这个领域。无论使用哪种语言,编过的程序都是寥寥,感觉什么东西都很新鲜,但是却也说不出来究竟有些什么东西可以学。

C++程序设计》--
钱能
如果你刚刚听说过世界上存在一门叫做C++编程语言,而且由于种种原因需要尽快地了解C++语法知识的话,这是本教材恐怕是最合适的了。不要误解,我完全没有贬低这本书的意思,因为C++本身的复杂性,很少有图书适合真正的新手入门的。就算是B.S推荐的入门书《Essential
C++
》,被被它不到300页的外表欺骗了,如果你还没有建立起一些C++的基本概念,它真的不适合你,我保证。怯怯的说一句,我初学C++用的书是《21天精通C++》,虽然它是垃圾书(毫无疑问),但我想当时什么都不懂的我如果看的是B.S推荐的入门书,是不是会有自信进入软件这一行将是一个很大的疑问。

入门阶段
已经有了一些软件开发的经验,懂得程序究竟是怎么一回事,但是对C++编程接触较少

The C++ Programming languageA:Bjarne Stroustrup T:裘宗燕

C++ PrimerA:Stanley B.Lippman T:潘爱民

作为一名真正的C++程序员,如果手头上这两部著作都没有的话,那么你C++语言的专业性是值得怀疑的。注意,我的用词是拥有(集体拥有亦可),而不是看过,因为很多过来人的经验表明,就算是有了10多年的开发经验,也总能从这两部著作中找到一些启发。

这两本著作功能相近,都是C++大全类书籍的泰山北斗,不过他们也有各自的特色。贯穿于整部《The C++ Programming language
》中,B.S不遗余力地于各个细微之处教导读者如何编写正确C++程序,这其中的价值,远远高于其表面的语法讲解。而《C++
Primer
》,则在章节排布上颇费了些心思,使读者一气读来通畅舒服而欲罢不能。以上两本著作任选其一皆可,虽然用有趣这个标准来衡量这两部书并不恰当,但如果你是一个初学者,而且对自己读书的耐性又不是特别自信的话,个人比较推荐《C++ Primer》,反之如果你希望毫无遗漏的接受大师教诲的话,《The
C++ Programming language
》是不二之选。我自己的就是潘爱民、张丽翻译的《C++ Primer
第三版》,感觉里面有几个小的翻译瑕疵,不过无伤大雅。

提高阶段
熟悉绝大多数C++语言的语法,已经用C++编写了一定数量的程序,这些程序中有不少存在着突然崩溃或是其他令人难堪的问题,但是自己也说不上来究竟是为什么。于是让别人给自己做个评价,得到的答案却是,原来自己的C++水平跟精通毫不搭界,称为熟悉都勉为其难。

Effective C++A:Scott Meyers T:侯捷

More Effective C++A:Scott Meyers T:侯捷

Exceptional C++A:Herb Sutter T:卓小涛

C++编程规范》-- Herb Sutter,Andrei Alexandrescu T:刘基诚

首先先来看看语言本身掌握程度的提高,以上四本都是采用条款式来对C++语言各个方面进行讨论的。文中列出的每个条款都凝聚了作者多年的经验精华,熟知并且能在自觉不自觉地情况下熟练的运用这些条款是每一个称职的C++程序员必备条件。

但是,看这几本书是颇需要一些技巧的,这里说的技巧不是指C++编程技巧,而是阅读技巧。因为这几部书并没有一个贯穿始终的主线,也缺乏足够的练习帮助读者加深印象,如果仅仅是打开来一气读下去,很可能会看了后条忘了前条。所以,我觉得一个比较好的阅读方法是,每阅读完一条或是少量的几个条款,就到自己以前做的项目代码中去检查,看看这些条款中提到的问题是否能和某些代码对应上,然后尝试用条款中的建议去改进这些代码看看是否有效。这里有个问题,如果书中有些条款内容自己之前并没有涉及到怎么办,很简单,记住有这么一个条款存在就可以了,等将来遇到了相关开发,再翻出来实践,保准记忆深刻。

《泛型编程与STLA:Matthew H.Austern T:侯捷

C++标准程序库》A:Nicolai M.Josuttis T:侯捷等

学习一门语言,仅学习它的语法是没有任何用处的,还需要掌握支撑这门语言应用的各种各样的库。其中C++标准库STL是必须掌握的一个。《泛型编程与STL》从机制上深入的阐述了STL中很多设计上的细节问题,作为一个需要常年在STL上打拼的C++程序员,熟悉STL的使用方法固然是必须的,同时能够从原理的角度去了解STL也是必不可少的,值得注意的是,《泛型编程与STL》除了对STL的机制又比较深入的讲解外,同时也是一份STL的参考,如果要求不高,那么用它来做参考资料也是可以的。

说道参考资料,STL方面最具影响力的就是这本《C++标准程序库》了,STL中事无巨细,都在这本大部头里有详细描述。毫无疑问,一个专业C++程序员,会将这本书放在伸手就可以够到的地方,以便随时可以抓过来查阅。

More Exceptional C++A:Herb Sutter T:於春景

C++
必知必会》A:Stephen C.Dewhurst T:荣耀

C++ GotchasA:Stephen C.Dewhurst

以上三本书也是久负盛名了,不过这里仅作为提高阶段的第二梯队推荐。下面就分别介绍一下,不过很多是个人观点,如果触犯了你的立场,那么我深感抱歉,同时谢绝论战。

More Exceptional C++》当中充满了各种各样隐藏在C++深处的技巧,毫无疑问,掌握这些技巧将对C++水平的提高很有帮助,至少可以在不知道这些技巧的同行面前,卖弄一下会很有成就感,不过也有人提出这些技巧的实用性有待证实。

与《More Exceptional C++》不同,《C++
必知必会》中讨论的知识点是非常实际,而且相当重要的,从其名字当中的必知必会就可以看出来这本书的定位,之所以没有将其放到推荐的第一梯队,是因为虽然口碑很好,但是毕竟出版时间较晚,还没有经过时间的考验。算然如此,但在推荐时,总还是有些犹豫,是否应该将它放到第一梯队中更合适呢!

至于《C++ Gotchas》,会将它放在第二梯队原因很简单,目前还没有中文译本,而且我也完全没看过,本来不想推荐的,但是很多人都强烈以及强迫推荐之,所以...

深入阶段
进入这个阶段的人编写C++程序已经不成问题,开发过程中的大部分问题都可以很快地找到关键并加以解决。但是,面对像类似Loki库代码时,会被震撼的说不出话来...,那好,恭喜,这里推荐的书目正好合适你。

Imperfect C++A:Matthew Wilson T:荣耀

是的,它出版很晚,违背了前面提到的时间考验问题,但我无法抑制想要推荐它的冲动。这本书所发挥的作用是其他几乎所有C++书籍都没有达到的,它将教会你两件事情:一是将C++漂亮的应用于现实世界;二是将这门语言以及编译器等附属品随心所欲的掌控于股掌之间。相信我,只要看了第一个条款,就再也放不下它了!

C++设计新思维》A:Andrei Alexandrescu T:侯捷等

很遗憾的告诉大家,本书的作者,现在还是一个学生!!!很明显,他完全颠覆了我对学生应该是什么样子的基本概念,希望大家在知道这个事实的时候不至于遭受太大的打击。本书讨论的内容毫无疑问的可以放在C++程序设计的顶点,至少是之一,如果你还认为C++泛型编程只不过是研究室里的玩具,那么阅读并理解这本书吧,相信等接下来你追踪C++0X发展的时候,对其在泛型方面大跃进式的改造就不会感到意外和不可理解了。对了,顺便说一句,在C++中,OO仅仅只是一个选择而已,随着C++的不断发展,它是否还是第一等的选择尚在讨论。

《深入C++对象模型》A:Stanley B.Lippman T:侯捷

没错,就算不清楚编译器是如何将一个个C++类和对象编排为指令码和数据块的,也并不会妨碍你编写出漂亮的C++程序,可是偶尔出现在调试器中怪异的内存数据一定让你头痛过吧。当你空闲下来查阅一下过往的代码,突然迸发出一个念头想要C++多态究竟是怎么做到的;或者说突然接到一个任务,要将一堆该死的C++对象序列化发送到另外一台计算机上时。你一定会想知道C++编译器究竟背着我们做了一些什么,让cpu这种只知道来一条指令执行一条的单细胞动物懂得如何处理繁杂的C++对象系统的,那么,请认真地阅读本书吧。实际上,当你编写了足够多的程序并解决过足够多的实际问题,阅读这本书可以说是非常顺畅的,就好像跟一个老朋友聊天,虽然近况不很清楚,但总有很多共同话题。反之,如果事先没有积累足够的编程经验,看这本书简直就是一种自我折磨。

TO BE THE ONE
噢,不可思议,前面那些书籍的内容对你来说都已熟悉不过,由衷地赞叹一声,你已经是国内屈指可数的C++专家了,但是,要想写一本《C++设计新思维》或者《深入C++对象模型》这样深度的书,可能还是会觉得有些力不从心吧。为什么,为什么呢!原因肯定有很多,当中有一个很重要的就是,你所掌握的这些知识是经过了别人加工后传授给你的了,要想在这些已经被别人精炼过的知识点上有所突破,是一件非常非常非常困难的事情。既然你现在所知道的这些知识点是被别人提炼过的,那么就必然还有剩下尚未展示出来的东西,那些东西放在什么地方呢?

ISO C++ Language Standard

跟所有的标准文档一样,ISO C++标准也一如既往地晦涩与枯燥,但是每一行当中都可能蕴藏着丰富的含义。阅读这样的东西是需要勇气的,但是它所带来的回报也绝对不会让人失望,关于这个,问问上面那些高阶书籍的作者就知道了

特别推荐
这里推荐的书目并不一定是关于C++语言本身,而是大多数经验丰富的专业程序员共同推荐的,语言本身固然重要,但是掌握正确的程序设计方法甚至更为重要。

《代码大全》A:Steve McConnell T:金戈等

这真的是一个大部头,内容涵盖了软件构建过程的各个细节,几代软件人从中汲取了大量的营养,而使自己更加迅速的步入专业程序员行列。我们急切需要的是什么,使经验,从什么地方得到,从实践中得到!是的,《代码大全》无法替代你从实践中获取经验这个过程,但是当你途经软件构建的各个环节时,它会细致的告诉你在各个细节上,什么是证明有效的,什么是证明无效的,当你将自己的体验和这些知识加以比对,将获得前所未有的前进速度。

C++语言的设计和演化》A:Bjarne Stroustrup T:裘宗燕

如果仅仅把C++当作一个工具来使用的话,这本书帮不上任何忙,但是如果认定了C++将是你一个重要的伙伴,那么有一件事情你一定要做,就是了解它的过去,从中看到它的未来。相当另类,《C++语言的设计和演化》讲述的是和其他书籍完全不同的C++的一个侧面,就是C++的文化,你可能在和C++常年的相处当中,对他强大的力量赞叹不已,也会对它的一些坏脾气无可奈何,这本书会告诉你它力量的来源以及坏脾气的肇因,当了解了这些历史之后,相信你和C++相处起来将会更加的融洽。

《程序员修炼之道》A:Bjarne Stroustrup T:马维达

无论你之前的程序观是怎样的,在你阅读这本著作的时候都要仔细认真地体味其中的深意,如果你能够认同作者的那些观点,那很好,你已经懂得如何成为一个真正的软件开发专家了;如果其中有些观点你经过认真思考后还不认同,并且能够有足够的理由能够证明作者的观点是错误的,那真是太好了,你在那个方面多半已经是一个真正的专家了。仔细阅读,并且慎重的思考,这本书能够给你带来的益处无可替代。

 

抱歉!评论已关闭.