C\C++书籍
原文链接: bert
hubert 翻译: 伯乐在线- 周昌鸿
译文链接: http://blog.jobbole.com/61308/
人们常常问我有什么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++的童鞋进步!
C\C++书籍的更多相关文章
- SQL Server相关书籍
SQL Server相关书籍 (排名不分先后) Microsoft SQL Server 企业级平台管理实践 SQL Server 2008数据库技术内幕 SQL Server性能调优实战 SQL S ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格
通过上一篇随笔的处理,我们已经拿到了书的书名和ISBN码.(网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息 ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码
这一篇首先从allitebooks.com里抓取书籍列表的书籍信息和每本书对应的ISBN码. 一.分析需求和网站结构 allitebooks.com这个网站的结构很简单,分页+书籍列表+书籍详情页. ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup
开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...
- Java EE必读书籍
2011-09-18 15:21 24170人阅读 评论(46) 收藏 举报 分类: JavaEE等(280) 软件工程.原理(49) 计算机历史(3) Web相关(83) Linux/Un ...
- 后记:IT软件人员学习的书籍 - IT软件人员书籍系列文章
1年了,软件人员学习书籍系列总算是写完了.虽然文字篇幅不多,主要对各个角色的一些基本内容做了介绍,但是更重要的是能够提供相关的人员学习书籍进行下载,让更多的人能够从中学习到更多的知识. 这个系列,从项 ...
- 12、产品经理要阅读的书籍 - IT软件人员书籍系列文章
产品经理是软件产品的主要领导者.不同于项目经理,产品经理是对产品负责,更多的是负责产品的设计定型:而项目经理则对项目负责,更多的是负责项目软件的实现.产品经理的一些工作,和项目经理是一致的,比如需求分 ...
- 11、项目经理要阅读的书籍 - IT软件人员书籍系列文章
项目经理是负责软件项目的总体把控的角色.项目经理在项目中是一个管理者的角色,他需要对项目的9大领域进行学习,同时针对项目的范围.进度.沟通和风险进行处理,让项目能够按时保质保量的完成. 项目经理需要学 ...
- Web前端开发推荐阅读书籍
前言 前端工程师在中国兴起也就5年左右,以前公司里没有专门前端工程师的这个职位,很多前端方面的任务都是由全栈工程师来完成,有的基础一点的后台或者设计的帮助分担一些.但是随着互联网的快速发展,特别是所谓 ...
随机推荐
- 在mac下搭建Apacheserver
Apache作为最流行的Webserver端软件之中的一个.它的长处与地位不言而喻.以下介绍下在mac下搭建Apacheserver的步骤: (1)"前往" –>" ...
- java基础知识查漏 四
1.JAVA多线程实现方式 (1)继承Thread类,并重写run()方法 (2)实现Runnable接口,,实现run()方法 (3)使用ExecutorService.Callable.Futur ...
- 寻找JAVA_HOME find java
more apache-flume-1.8.0-bin/bin/flume-ng # find java if [ -z "${JAVA_HOME}" ] ; then warn ...
- ElasticSearch(十三) bulk api奇特的json格式的原因
bulk api的语法 正常的语法: {"action": {"meta"}}\n {"data"}\n {"action&quo ...
- 数据库的update、delete、insert和select用法
String sql=null; 1.sql="update 表名 set <列名>=<表达式> [where=<表达式>]" 2.sql=&q ...
- Linux就该这么学--命令集合7(管道命令符)
1.管道命令符“|”的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为:“命令A|命令B”. 找出被限制登录用户的命令是:grep "/sbin/nologin" /e ...
- Redis集群与事务
redis集群对象JedisCluster不支持事务,但是,集群里面的每个节点支持事务 但是可以用第三方呀 启动下,然后看看事务问题: /usr/local/redis/bin/redis-serve ...
- CentOS6.5 yum源设置
在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度. 国内比较快的有163源.sohu源.这里以163源为例子. 1. cd /etc/yum.repos.d 2 ...
- Linux-正则表达式与三剑客
1 固化命令文件 登录时执行文件的顺序 /etc/profile /etc/profile.d ~/.bash_profile ~/.bashrc /etc/bashrc 非登录shell ~/.ba ...
- 51Nod - 1295:XOR key (可持久化Trie求区间最大异或)
给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求ALL 至 ARR 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值 ...