快速入门的一些C\C++书籍

人们常常问我有什么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++开发的人的生活:

1、Effective C++ 》——列举了一些常见错误,有用的特性和编程中需要注意的事项。最近更新于2005年。
2、More Effective C++》——和上面一样,不过讲述得更多一些,同样值得你去阅读。
3、Effective STL》——最后更新于2001年,和《Effective C++》一样,不过关注于C++标准库。
如果你只想读其中一本,选择《Effective C++》,如果你想选择两本,再选择《Effective STL》。

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

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

编写良好的代码

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

1、《程序设计实践》,(Brian W. Kernighan, Rob Pike, TPoP),这不是一本特定于C++的书,不过谈论了许多关于如何组织代码,何时优化代码,何时不做优化,如果调试和如何编写代码避免调试等等,我觉得每个开发组织都应该有这样一本书。
2、《Linux内核代码规范》(Linus Torvalds),这也不是一本关于C++的书,但是在第4节“命名”,第六节“函数”和第八节“注释”中,我们都可以学习到许多。
每个想要提高其代码的程序员最好认真阅览《程序设计实践》的每一页。

设计大规模的代码

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

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

(0)

相关推荐

  • 快来领取!你想要的C++/C语言优秀书籍

    又一波送书活动,不要再错过了,C++/C语言优秀书籍免费领取,抓紧行动! 第一本书:C Primer Plus 第6版 中文版 (作者)[美]史蒂芬 普拉达(Stephen Prata) (译者) 姜佑 电子书下载入口 畅销的重量级C语言大百科全书 C语言从入门到精通的入门经典推荐 初学的大牛著作 第五版销售超过250000册 内容提要 本书详细讲解了C语言的基本概念和编程技巧. 全书共17章.第1.2章介绍了C语言编程的预备知识.第3~15章详细讲解了C语言的相关知识,包括数据类型.格式化输入

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • C语言的语法风格与代码书写规范指南

    C代码: #include <stdio.h> int main(void) { printf("That is Right Style\n"); return 0; } 在一个标准的C语言程序中,最特殊的莫过于main函数了,而说到底它就是一个函数而已,仅仅因为它地位特殊拥有第一执行权力,换句话说,难道因为一个人是省长它就不是人类了?所以函数该有的它都应该有,那么函数还有什么呢? 函数大体上分为内联函数(C99)(内联函数并非C++专属,C语言亦有,具体见前方链接)和非内

  • 快速入门的一些C\C++书籍

    人们常常问我有什么C++和编程的书籍推荐,今天就为大家分享了几本 第一个注意项:如果你打算学习C++,请务必学习最新版的C++ 2011.这个版本的C++移除了许多由C++强大带来的一些痛苦之处.另外,也不用担心C++ 2014的书籍,大多数编译器已经开始支持它了. 学习编程 学习编程包含以下几个重要方面: 了解语言的语法 知道那些特性可以使用和何时使用 写出可读性好的代码:编译器可以理解,但是下一个人是否可以阅读呢? 在一个更高层次设计结构良好的程序 为了学习一门语言,通常我们可以找到叫<X语

  • 新手如何快速入门Python(菜鸟必看篇)

    学习任何一门语言都是从入门(1年左右),通过不间断练习达到熟练水准(3到5年),少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层.虽然万事开头难,但好的开始是成功的一半,今天这篇文章就来谈谈如何开始入门Python.只要方向对了,就不怕路远. 设定目标 当你决定入门 Python 时,需要一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作,目标明确后,你需要了解企业对初级程序员有哪些技能要求,下面是我从拉勾网找的一个初级 Python 工程师的任职要求: 1.熟悉 Pytho

  • python Django框架快速入门教程(后台管理)

    Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django 是一个开放源代码的 Web 应用框架,由 Python 写成. Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 . Django 采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template). 参考官方文档:Django官方文档https:

  • Unity3D快速入门教程

    Unity3D游戏引擎介绍 Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.使用Unity3D,开发者可以快速的开发出游戏.Unity3D引擎占据了游戏引擎市场45%的份额,居全球首位.因此,学习游戏开发,Unity3D的人才需求量最为庞大. Unity3D学习历程 俗话说,万事开头难.Unity3D的学习历程也是一样.学习Unity3D,大致分为以下

  • hibernate4快速入门实例详解

    Hibernate是什么 Hibernate是一个轻量级的ORMapping框架 ORMapping原理(Object RelationalMapping) ORMapping基本对应规则: 1:类跟表相对应 2:类的属性跟表的字段相对应 3:类的实例与表中具体的一条记录相对应 4:一个类可以对应多个表,一个表也可以对应对个类 5:DB中的表可以没有主键,但是Object中必须设置主键字段 6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系 7:Object中属性的个数和名称可

  • MongoDB快速入门笔记(八)之MongoDB的java驱动操作代码讲解

    MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个). 下面代码给大家介绍MongoDB的java驱动操作,具体代码如下所示: import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.Document; import com.mongodb.MongoClient; impo

  • DB2 9(Viper)快速入门

    正在看的db2教程是:DB2 9(Viper)快速入门. 为了帮助您快速掌握 DB2 自身的 XML 特性,请完成几个普通的任务,比如: 创建用于管理 XML 数据的数据库对象,包括一个测试数据库.一些示例表和视图. 使用 INSERT 和 IMPORT 语句将 XML 数据填充到数据库中. 验证您的 XML 数据.使用 DB2 开发和注册您的 XML 模式,并在导入数据时使用 XMLVALIDATE 选项.后续文章将包括其他主题,比如使用 SQL 查询.更新和删除 DB2 XML 数据,使用

  • MongoDB快速入门笔记(二)之MongoDB的概念及简单操作

    MongoDB是面向集合的文档式数据库,不像关系数据库那样,有表,列.行,mongoDB数据库则是由一系列的文档组成.下面给大家介绍MongoDB的概念及简单操作. 1.以下列举普通的关系型数据库和MongoDB数据库简单概念上的区别: 2.MongoDB的简单操作 (1)启动MongoDB数据库之后,使用命令mongo,显示如下,默认连接到test数据库. MongoDB shell version: 3.2.6 connecting to: test 使用命令show dbs,可以查看所有的

  • MongoDB快速入门笔记(一)之windows下安装MongoDB方法

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB下载地址:http://www.mongodb.org/downloads 1.安装MongoDB 从MongoDB官网上下载MongoDB,我下载的版本是64位的3.2.6.下载完以后直接安装,我的安装目录是D:\work\MongoDB.

  • MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码

    MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 下面给大家介绍MongoDB查询文档操作的实例 先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, "

随机推荐