文章目录

C++学习的方法以及四大名著(荐)

转眼间学习和使用C++已经有近10个年头了,开始学习的时候走了不少的弯路,今天有些时间,希望写下这篇文章并且对开始学习C++的朋友有些帮助。当然我首先需要说明的是,这篇文章是根据本人的感受写的,可能不同的人有不同的观点,欢迎讨论。

开始学习C++的时候中国的互联网环境还不是很好,信息也比较闭塞,所以自己开始的时候是由Thinking in C++ 开始的,买了两卷本的英文版,废了好大的一番周折才算看完了,这个过程大约花费了近6个月的时间,当然期间也要花时间完成学业。后来就有这个根基开始了不断的写代码,做ACM的题,渐渐开始了C++真正的旅程。

时至今天我发现,其实这个过程可以更轻松,只要有过来人稍微点播一下,于是有了写这篇文章的想法。其实学习C++的读书顺序应该是这样的(对于有C基础的朋友):

C++ Primer

Effective C++

Exceptional C++

Inside the C++ Object Model

这就是我选的C++四大名著,那么我为什么选这四本书呢?

C++ Primer 这本书我看过第三版和第四版,目前这本书已经出到了第五版,不得不说,这本书太适合入门了,当然我指的是有C基础,而且基本上所有的语言特性都给予了说明,可以说是大而精。同等地位的书有C++ Programming Language Thinking in C++ 这两本书我也读过,但是个人认为,读了C++ Primer再看这两本书意义不大。

Effective C++ Exceptional C++ 这两本书并不厚,但是涵盖的知识面是一般的C++书籍所无法企及的,可以说如果没看过这两本书就不算合格的C++程序员,俗话说磨刀不误砍柴,这两本书就是磨刀的,但是这两本书都不简单,建议看完了C++ Primer再看。

Inside the C++ Object Model看这本书可能需要一点功力,薄薄的一本书,足够全力的研读一周,一旦通关了可以说对于C++的理解可以到达另一种境界。

关于这些书籍是读中文版还是英文版的问题

我的建议是买一本中文版,找一本英文的电子版(可以去买电子书),直接读中文版,然后感觉可能翻译有问题的地方对照着看。为什么这么说呢,因为根据我的经验,这样读书的效率更高。而直接读英文版和所谓的“评注版”意义都不大,读书的时候会相对的浪费精力,这个和英语水平没关系,除非英语你的母语。

关于标准库和泛型编程的学习

这方面确实是对C++语言的增强,但是编码难度相对较大,也特别容易被人忽视,但是C++发展到今天标准库和泛型编程已经和完整,而且确实可以提高生产力,建议在看看相关的书籍,有时间写篇这方面的文章。

总结

本问总结了学习C++的一些需要注意的问题,并且推荐了四大名著,相信只要按照顺序修炼,大家一定可以学好C++的,祝大家功力更上一层楼。



—————-–另一篇博文———————————–

人们常常问我有什么C++和编程的书籍推荐,也许是因为我在PowerDNS有一个关于“编写可读性良好的C++代码”的演讲。这篇博文可以作为我对上述问题的一个回答,同时也包含了一些更广泛的笔记编程。如果你有任何补充或喜欢的书籍但是我没有提到,请给留言提示,我打算一有新书就更新这个页面。


第一个注意项:如果你打算学习C++,请务必学习最新版的C++ 2011。这个版本的C++移除了许多由C++强大带来的一些痛苦之处。另外,也不用担心C++ 2014的书籍,大多数编译器已经开始支持它了。



学习编程


学习编程包含以下几个重要方面:


  • 了解语言的语法

  • 知道那些特性可以使用和何时使用

  • 写出可读性好的代码

  • 编译器可以理解,但是下一个人是否可以阅读呢?

  • 在一个更高层次设计结构良好的程序


为了学习一门语言,通常我们可以找到叫《X语言编程》的书。这也形成了一个潜规则:当你创建一门严肃的语言的时候,你需要编写这样一本书。学习语言有点像学习作文,但这并不意味着你能够突然变成一个著名散文作家!


对于C++,这里有两本相关的书:


  • 《C程序设计语言》 (Brian W. Kernighan, Denis M. Ritchie, TCPL)。这本书不是关于C++的,不过所有与C有关的东西都和C++有关。例如,这本书附带的例子都可以看作C++的例子,只是不是真正的C,因为C++比C的编译器要求更加严格。但是大部分编写良好的C程序都可以在C++下编译通过,TCPL是一本小书,并且被誉为X语言编程中最好的书籍。书中每一页都充满智慧。

  • 《C++程序设计语言》(Bjarne Stroustrup),一本杰出的书,书中的每一页同样充满智慧。这本书有1400页。Verity Stob对这本书有热烈的评论。在TCPL中,我们读到的是“C不是一个大的语言,因此也不需要一本长篇大论的书来讲解”,但是讲解C++的书却有1400页。尽管这本书很难一页一页地读下去(不过,我几乎读过了书中的每一页),但是我建议每个人都拥一本。它讲解了C++中的每一个方面,并且讲解得非常不错。有这本书可以作为C++的参考,你的编程生涯会受益良多。


我需要声明一点,《C程序设计语言》不是一本学习C++的入门书籍,这本书是用来指导你学习的,同时,《C程序设计语言》也单独提取了《A Tour of C++ 》篇章。


C++不仅是一门语言,也是指一个函数库。在《C++程序设计语言》中也讲解了C++标准库,为了全面了解C++标准库,我推荐:


  • 《C++标准程序库:自修教程与参考手册》(Nikolai Josuttis),和《C++程序设计语言》一样,这也是一本大部头的书。但是这本书涵盖了C++标准库的每一个方面(同时,也被称作C++标准模版库),第二版中涵盖了C++2011标准。


如果你之前从事高级语言比如python,perl或者java,C和C++可能让人生畏。不像其他语言,C/C++非常接近硬件。这也有一个优点,可以充分利用硬件优势,但也让你需要面对现实细节。Simon Tatham (作为Putty的开发者和编写《缺失代码怪味》的作者而知名,虽然他现在使用C开发)写了一篇非常棒的文档:《The Descent to C》,这会降低你的学习难度,甚至经验丰富的C开发者也可能受益一二。


如果你读了上面三本书和链接,你已经可以熟练掌握C++了,并且善用C++标准库。不过,你还没有学习如何使用和何时适合使用C++的特性。C++作为一门强大的语言,有句话说:“使用C,你犯错可能砸到自己的脚,而使用C++,你犯错可能导致你整条腿都废了“,这说的都是真的。


另外,C++强大之处在于你可以继续使用你之前语言的开发方式。“我可以在任何语言中写编写FORTRAN代码”。不过这样不利于你成为一个更好的开发者。


用好C++


这里也有三本书,作者都是Scott Meyers,这将大大简化一个立志于C++开发的人的生活:


《Effective C++ 》——列举了一些常见错误,有用的特性和编程中需要注意的事项。最近更新于2005年。

《More Effective C++》——和上面一样,不过讲述得更多一些,同样值得你去阅读。

《Effective STL》——最后更新于2001年,和《Effective C++》一样,不过关注于C++标准库。

如果你只想读其中一本,选择《Effective C++》,如果你想选择两本,再选择《Effective STL》。


需要注意的是,Scott正在准备一本新的书,全面覆盖了新的C++2014标准(这可以看着是对C++2011标准的改进,并且当前大多数编译器已经支持了C++2014)。一旦这本书出版,你应当第一时间购入,本书的预览部分已经看起来相当棒了。


更新:许多读者都推荐了Stanley Lippman的《C++ Primer》,我不了解这本书,不过它更新了C++2011标准并且收到了很多赞誉,请告诉我你的观点。



编写良好的代码


下面提到的书都讨论了代码风格,如果编写代码,不过它们其实范围更广。指导你如何编写可读性好的代码的书有:


  • 《程序设计实践》,(Brian W. Kernighan, Rob Pike, TPoP),这不是一本特定于C++的书,不过谈论了许多关于如何组织代码,何时优化代码,何时不做优化,如果调试和如何编写代码避免调试等等,我觉得每个开发组织都应该有这样一本书。

  • 《Linux内核代码规范》(Linus Torvalds),这也不是一本关于C++的书,但是在第4节“命名”,第六节“函数”和第八节“注释”中,我们都可以学习到许多。


每个想要提高其代码的程序员最好认真阅览《程序设计实践》的每一页。



设计大规模的代码


我只知道一本书讲述了这一点,我的一些思想形成也有赖于它。


  • 《Large-Scale C++ Software Design 》(John Lakos),尽管本书有些年头,里面的一些建议用于指导当初为缺乏存储并且性能低下的机器开发程序的人们,从这本书我学习了如何将一个复杂系统拆解为多个有意义的模块。特别需要注意的是在循环中处理依赖代码。那些额外出现的细节,使得你的代码几乎不能测试,因为每个模块都非常依赖其他模块。


最后,祝学习C++的童鞋进步! http://mp.weixin.qq.com/s?__biz=MzAxNDI5NzEzNg==&mid=205212105&idx=1&sn=fb5ade31ab21d7379871123040ab3811#rd


出版社: 机械工业出版社
原作名: The C Programming Language
译者: 徐宝文 / 李志
出版年: 2004-1-1
页数: 258
定价: 30.00元
装帧: 平装
ISBN: 9787111128069
Brian W. Kernighan: 贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,如《The Elements of Programming Style》、《The Practice of Programming》、《The UNIX Programming Environment》、《The AWK Language》、《Software Tools》等。
Dennis M. Ritchie:1967年加入贝尔实验室。他和Ken L. Thompson两人共同设计并实现的C语言改变了程序设计语言发展的轨迹,是程序设计语言发展过程中的一个重要里程碑。与此同时,他们两人还设计并实现了UNIX操作系统。正是由于这两项巨大贡献,Dennis M. Ritchie于1983年获得了计算机界的最高奖——图灵奖。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项.。
作者:(美)亚当斯(Adams J﹒) (美)尼霍夫(Nyhoff L﹒)

出版社:清华大学出版社

出版日期:2005-12

ISBN7302118167

版次:1 页数:15,771 字数: 开本:16

包装:平装

定价:86.0 折扣:90

蔚蓝价:¥77.4 vip(2-3)¥75.7 svip(4-5)¥74.0

由C++之父Bjarne Stroustrup撰写。是世界上最值得信任的被最广泛阅读的C++著作。
  • 作者:(美)Bjarne Stroustrup 译者:裘宗燕
  • 出版社:机械工业出版社
  • 出版日期:2002年7月
  • ISBN:711110202
  • 页数:936 装帧:精装 开本:16 版次:1
  • 市场参考价:¥85   商品编号:1017003
本书是久负盛名的C++经典教程引,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数程序员学会了C++。
他是C++标准委员会拥有表决权的成员之一,曾经写过另五本面向对象编程书籍,发表过150篇以上的文章,是多本计算机杂志的专栏作家。Eckel开创Software Development Conference的C++、Java、Python等多项研讨活动。
MFC,微软基础类(Microsoft Foundation Classes),[1] 同VCL类似,是一种Application Framework,随微软Visual C++开发工具发布。目前最新版本为9.0(截止2008年11月)。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。  MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。  Windows应用程序中,MFC 的主包含文件为"Afxwin.h"。  此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。  由于它的易用性,初学者常误认为VC++开发必须使用MFC。这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。



文章目录