您的位置:首页 > 编程语言 > C语言/C++

学习C语言的教材、如何成为一名优秀的C程序员、激发程序员创意的6本书、国外程序员推荐:每个程序员都应读的书

2013-08-22 23:04 1336 查看

学习C语言的教材

我的C语言是自学的,这些年看过不少教材。

下面,我对其中一些教材做个点评。

1. How to Think Like a Computer Scientist: C version

这是我读过最易懂的C语言教材。

虽然它只讲解最基本的语法,但是写得特别好懂,深入浅出,读起来不觉得累,而且它还允许免费下载。我认为,这是C语言的首选入门教材。

下载网址:http://prof.beuth-hochschule.de/scheffler/lehre/programmieren-in-c/

2. C
Primer Plus 和 C Programming: A Modern Approach (《C语言程序设计:现代方法









上面这两本,都是著名的C语言初级教材,都是厚厚的大部头。

我通读过它们,感觉都写得不错,都值得推荐。但是因为这两本书定位类似,内容重复,相比之下,我觉得C
Primer Plus可能更适合中国读者的思维,更易读一些。

3. C Programming Language (2nd Edition) (《C程序设计语言》)





这是最著名的C语言书籍。

但是,它不是写给初学者看的,更偏重C语言的编程技巧和算法思维。我读过两遍,还是觉得很多地方没读懂。

4. 国产教材

通常来说,国产教材质量不高,不值得推荐。但是有两本,我想特别提一下。

零基础学C语言》,康莉等著,机械工业出版社,2009。





这本是我在图书馆里偶然捡起来的,翻了几页,发现是原创的,而且写得比较认真,代码解释详尽,行文错误少,就把它读完了。我认为,在国产教材中,这本书的质量很高,值得推荐。

Linux C编程一站式学习





这本书在国产书籍中罕见地采用了GFDL许可证,http://learn.akae.cn有在线阅读,可以免费下载。这一点值得高度肯定。

但是,正如前言所说,它的主要资料来源是两本英语教材《How To Think Like A Computer Scientist: Learning with C++》和《Programming from the Ground Up》,以及一些教师的上课讲义,然后拼在一起,做成一本书。所以,造成它的体系比较生硬,缺乏整体感,衔接得不好,很多地方没有做到由潜入深、循序渐进。所以,我觉得这本书不适合初学者,可以当做手册查资料。

5. Beginning Linux Programming / 《Linux程序设计





这是我现在正在阅读的书。我看它在Amazon上排名Linux C编程的第一位,就选了它。

它主要讲解如何用C语言调用Linux的系统API,偏重基本概念的解释,我已经读了两章,感觉还不错。

下面想听听大家的意见。

我现在的C语言,到了这样一个水平:语法已经基本掌握了,可以独立开发一些小程序。下一步,我想进一步提高C语言水平,主要用于Linux开发。

大家能不能推荐一些C语言的中级教材?


如何成为一名优秀的C程序员

问题的提出

每过一段时间我总会收到一些程序员发来的电子邮件,他们会问我是用什么编程语言来编写自己的游戏的,以及我是如何学习这种编程语言的。因此,我认为在这篇博文里列出一些有关C语言的最佳读物应该能帮到不少人。如果你知道其它的优秀读物,请给我发邮件或者直接在评论栏中告诉我吧。

问题的解答(你可以略过这部分)

我在之前的一篇博文中已经提到过了,目前为止,所有我所编写的商业3D引擎95%都是C89(也称作标准C,或ANSI C)。我之所以选择C89而不是C99是因为有些编译器仍然不能完美支持C99标准。而且从第一天起,我就强制规定游戏需要能在iOS、Windows和Xbox
360平台上都能编译。根据我所选择的编译平台,剩下5%的代码是Objective-C(iOS)或者C++(Windows,Mac OS X),这是为了将引擎绑定到原生的输入/输出设备上。没想到的是,选择C还是C++这个主题在reddit曾上引发了很大的争议。我选择C的两个真正原因是:

● 我写引擎时对C++掌握的并不算好。平台资源非常有限(iPhone 2G),而且我知道我得对我的工具(编程语言)相当熟悉才能使游戏达到每秒60帧的速度。

● 因为我研读过id Software(著名游戏制作公司,Doom系列、Quake系列是其代表作,开创了FPS类型游戏的先河)发布过的源代码,用纯C完成一个商业游戏是我的梦想。

这算是“好”的选择吗?我想,到最后唯一合理的问题是:“你的游戏发布了吗?”以及“它跑的够快吗?”看看那令人难以置信的帧速吧(有人提到在玩Shmup时会有眩晕的感觉),我想我做了正确的选择。


糟糕的C读物(不要忽略这一段)

我将以一些我认为不必太认真的读物说起:网络教程,博客以及大部分Google上得到的东西都算(没错,也包括我这篇)。通常我认为这些资料来源是不可信的,而且有潜在的危害。和这一行里大部分人一样,我曾是重度Google搜索使用者。过了一段时间之后,我发现不准确的答案反而对生产力的提高有反效果。这让我有了一种速度上的错觉:答案找的越快,活干的越慢。没有什么网站会比一本好书更有价值,没有什么好书比反汇编输出更有价值。


优秀的C读物

1.《C程序设计语言》





《C程序设计语言》,又称
K&R C。这是你应该首先去看的有关C语言编程的经典著作。读这本书会很轻松,它只有272页,386幅插图。由C语言之父Kernighan和Ritchie亲自编写的短小且有清晰解释的代码示例遍布全书各个角落。在刚开始的几周里,所有你需要了解的有关C语言的知识都在这里。这本书读起来很有趣,主题都比较短小,而且可以使你很快上手。你可能会跳过附录A(有关C语言中比较晦涩的阴暗角落,比如类型提升、 类型转换、型别退化以及其它一些无用的东西)以及有关C标准库的附录B。我认为刚开始学习C语言时,这些就足够了。这本书使C显得很娇小、简洁,因此强烈推荐学习这本书。

如果你继续学习并坚持练习,很快你就会触到一些诡异的情况,比如下面的例子:

在上面的代码示例中,由于整型提升的缘故,-1先被计算为大于1,然后又小于1。C语言里有很多这种阴暗面,此时将产生不正确的结果。

这里还有许多细节之处:

或者有关数组/指针/类型退化的例子:

当你发现自己原来对C语言的了解还很不够时(附录A真的太轻量级了),那这时就是拿起第二本书的时候了。

2. 《C专家编程





这是本神奇的书,因为该书以一种非常娱乐化的方式告诉你在代码背后究竟都发生了些什么。通过介绍了几个著名bug的奇闻异事(大部分跟NASA有关)后,读者将再次领略整型提升、下标、类型退化以及许多其他的C语言犄角。这本书是如此的迷人,你很可能会一晚上埋头读完353页,然后失望地说:怎么这么短?

现在你想挖的更深些并成为一个优秀的C程序员,你应该拿起这本你所需要的最后一本C语言书籍:

3. 《C语言参考手册





这本书全面涵盖C/C89/C99标准。从今以后你面对的就是这些冰冷无聊的语言标准。你可以把K&R 和C专家编程放在书架上,而把这本C语言参考手册摆放在显示器旁,任何你想知道的C语言知识都在这里。


附加阅读

1. id Software 代码库





只看书当然是不够的。阅读优秀的开源代码将带来极大的帮助。我的最爱是id Software的3D引擎代码库:Doom、Quake、Quake2、Quake3、Wolfenstein 3D iPhone以及Doom iPhone。当我阅读这些代码时,我会自己撰写备忘日志。之后我会整理这些日志,写成技术文章(DoomQuake、Wolfenstein
3D iPhone 以及 Doom iPhone)。

2. 《Sh*t
My Dad Says》





试着保持健康的生活,改变一下,读些有趣的东西吧 : )




原文评论栏中推荐的一些补充书目:

1. C Interfaces and Implementations: Techniques for Creating Reusable Software(C语言接口与实现:创建可重用软件的技术





2. Object-Oriented Programming With ANSI-C





3. 《 Code Complete 2nd edition / 代码大全 第二版》





激发程序员创意的6本书

在之前的一篇博客中我曾提到:程序员成功的秘诀在于创意和原创性思维。

但是如果你没有创意该怎么办?别担心,并非只有你这样。事实上,你所遇到的大部分程序员都缺乏创意。原因在于,跟编程中客观的逻辑性思维相比,创意需要一种不同的思维方式。

幸运的是,创新思维是可以学习的。我列出了一个可以激发创意的书籍清单。(注:排名不分先后,有两本书没有相应中文名,应该是没有中文版)

《Pragmatic
Thinking and Learning: Refactor Your Wetware》 – Andy Hunt 安迪·亨特





这是一本为程序员量身定制的激发创意的书,作者安迪自己也是一名程序员。(他也是《程序员修炼之道:从小工到专家》的作者之一)。

Thinkertoys:
A Handbook of Creative-Thinking Techniques – Michael Michalko

米哈尔科商业创意全攻略
– 迈克尔·米哈尔科





迈克尔·米哈尔科通过带领你解决一些拼图游戏来迫使你改变思维方式。对于那些缺乏创意的人来说这可能往往是一项艰巨的任务。

Thinkpak:
A Brainstorming Card Deck – Michael Michalko迈克尔·米哈尔科





这并不是一本真正的书。基于从《米哈尔科商业创意全攻略》中学到的技术,迈克尔·米哈尔科做了一副卡片,你可以用这副卡片来激发自己的创意,并将你的创意运用于实际应用中。

Cracking
Creativity: The Secrets of Creative Genius – Michael Michalko

《创意的技术:100位天才的9种思考习惯》- 迈克尔·米哈尔科





迈克尔·米哈尔科的三本书(资料)中的最后一本。在这本书中,迈克尔着重讲了如何像历史上包括莱昂纳多·达·芬奇和华特·迪士尼在内的创意天才一样进行思考。

How
to Get Ideas – Jack Foster, Larry Corby

《更多好主意》- 杰克·福斯特 & 拉里·科比





拥有原创性的想法是有创意的一个表现,但这些想法从何而来呢?这本书会告诉你如何激发产生新的想法,并让你达到更高的水平。

The
Innovator’s Toolkit: 50+ Techniques for Predictable and Sustainable Organic Growth– David Silverstein, Philip Samuel, Neil DeCarlo

《创新者工具箱: 50+可预见与可持续创新技术》- 大卫·西尔弗斯坦,菲利普·塞缪尔,尼尔·戴卡洛





创新与科技的发展是相辅相成的。以Apple或Google公司为例,这些公司在不断地创新计算机硬件和软件。Silverstein等人写的这本书对创新者来说是一本非常棒的参考书。要想成为一名成功的创新者,你也必须是一名充满创意的思想者。

编程是非常简单的,如果你正在读这篇博客,那么你很可能已经掌握了至少一门编程语言。现在你知道了如何才能达到更高的水平:要有创意。

如果还有有其他书籍激励你成为一名有创意的创新者,或者你知道本文中那两本没有中文译名书籍的中文名,请在微博或评论中和大家一起分享。


国外程序员推荐:每个程序员都应读的书

更新】:近日(2012年8月17日)重看 StackOverflow 的原讨论帖,发现于今年年初被关闭了。不过有人做了汇总,把其他回复中提到的书籍,放在投票数最高的回复中。新更新添加 59 本书,详情可见文章后半部分。

编者按:2008年8月4日,StackOverflow 网友 Bert
F 发帖提问:哪本最具影响力的书,是每个程序员都应该读的

“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。”

很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,伯乐在线整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书的推荐数排列。

1. 《代码大全》 史蒂夫·迈克康奈尔

推荐数:1684





“优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来,就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。”
—— Joel Spolsky

对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac

2. 《程序员修炼之道

推荐数:1504





对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。或许他们还是在校生,但对要自己做什么,还感觉不是很安全。就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮,但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel

3. 《计算机程序的构造和解释

推荐数:916





就个人而言,这本书目前为止对我影响醉倒的一本编程书。

代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。其他书籍则处理算法。这些书都有自己所属的位置。

然而《计算机程序的构造和解释》与这些不同。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。

同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。

一些人认为此书不适合新手。个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。

你还不确信么?那就读读第一版的前言或序言。网上有免费的电子版。 - Antti Sykäri

4. 《C程序设计语言

推荐数:774





这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。(这对理解“底层”非常重要)——
Nathan

5. 《算法导论

推荐数:671





代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……

在我看来,代码只是一个工具,并非精髓。开发软件的主要部分是创建新算法或重新实现现有算法。其他部分则像重新组装乐高砖块或创建“管理”层。我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron

6. 《重构:改善既有代码的设计

推荐数:617





我想我不得不推荐《重构》:改进现有代码的设计。——
Martin

我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。——
Martin Fowler

7. 《设计模式

推荐数:617





就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。——
Chris Jester-Young

8. 《人月神话

推荐数:588





9. 《计算机程序设计艺术

推荐数:542





这是高德纳倾注心血写的一本书。—— Peter Coulton

10. 《编译原理》(龙书)

推荐数:462





我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。我从没忘过此书的第一版封面。此书让我知道了编译器是多么地神奇绝妙。- DB

11. 《深入浅出设计模式

推荐数:445

我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。-
Calanus

12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成》

推荐数:437

如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik

13. 《代码整洁之道

推荐数:329

虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。
– Craig P. Motlin

14. 《Effective
C++》和《More
Effective C++》

推荐数:297

在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More
effective C++》都对我的编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。

去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。
– John Channing

15. 《编程珠玑

推荐数:282

尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。
– Matt Warren

16. 《修改代码的艺术》by
Michael Feathers

我认为没有任何一本书能向这本书一样影响了我的编程观点。它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte

同意。很多开发人员讨论用干净的石板来编写软件。但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy

17. 《编码:隐匿在计算机软硬件背后的语言

我推荐Charles Petzold的《编码》。在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil

18. 《禅与摩托车维修艺术 / Zen
and the Art of Motorcycle Maintenance》

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是,要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr

(编注:关于这本书,也可以看看阮一峰的读后感。)

19. 《Peopleware / 人件集:人性化的软件开发》

Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。他们的答案并不简单,只是令人难以置信的成功。第二版新增加了八章内容。 – Eduardo Molteni

20. 《Coders at Work / 编程人生

一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。
– Jahanzeb Farooq

21. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!

虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

22. 《Effective
Java 中文版》

此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar

23. 《Patterns
of Enterprise Application Architecture / 企业应用架构模式

很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》-
levi rosol

24. 《The Little Schemer》和《The
Seasoned Schemer》 nmiranda

这两本是LISP的英文书,尚无中文版。美国东北大学网站上也有电子版。

25. 《交互设计之路》英文名:《The
Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。

本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的,而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。“难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性,证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。

本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。

他还有另一本中文版著作:《About
Face 3 交互设计精髓》

26. 《Why’s (Poignant) Guide to Ruby

如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。

27. 《Unix编程艺术

It is useful regardless operating system you use. – J.F. Sebastian

不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian

28. 《Practices of an Agile Developer / 高效程序员的45个习惯:敏捷开发修炼之道

45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。

29. 《Test-Driven Development by Example. / 测试驱动开发

前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro

我不关心你的代码有多好或优雅。如果你没有测试,你或许就如同没有编写代码。这本书得到的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent

30. 《Don’t Make Me Think / 点石成金:访客至上的网页设计秘笈

取决于你所追求的目标。我喜欢《代码大全》是因纯编程,《点石成金》是一本有关UI设计的卓越书籍。
– Justin Standard

【更新】:2012年8月17日19:08:39

最近有其他网站转载此文,但标题被改为《一个合格的程序员应该读的30本书》。这标题改的不好,偏离原文意思了。况且上文中不止提到了30本书。

今日重看 SO 那个原帖,发现于今年年初被关闭了。不过有人做了汇总,把其他回复中提到的书籍,放在投票数最高的回复中。

《Modern
C++ Design》 by Andrei Alexandrescu

《Best
Software Writing I》 by Joel Spolsky

《The Practice of Programming | 程序设计实践》by
Kernighan and Pike

《Pragmatic
Thinking and Learning: Refactor Your Wetware》 by Andy Hunt

《Software
Estimation: Demystifying the Black Art》 by Steve McConnel

《The
Passionate Programmer| 我编程,我快乐:程序员职业规划之道》by
Chad Fowler

《Hackers:
Heroes of the Computer Revolution | 黑客:计算机革命的英雄

《Algorithms
+ Data Structures = Programs》

《Writing
Solid Code》

《JaveScript:The Good Parts | JavaScript语言精粹

《Getting
Real 》by 37 Signals

Foundations of Programming 》by Karl Seguin

《Computer
Graphics: Principles and Practice in C (2nd Edition) | 计算机图形学原理及实践:C语言描述》

《Thinking
in Java | Java编程思想》by
Bruce Eckel

《The
Elements of Computing Systems》

《Refactoring
to Patterns | 重构与模式
by Joshua Kerievsky

《Modern
Operating Systems | 现代操作系统》by
Andrew S. Tanenbaum

《The
Annotated Turing》

《Things
That Make Us Smart》 by Donald Norman

《The
Timeless Way of Building | 建筑的永恒之道 》by
Christopher Alexander

《The
Deadline: A Novel About Project Management》 by Tom DeMarco

《The
C++ Programming Language | C++程序设计语言》by Stroustrup

《Patterns
of Enterprise Application Architecture | 企业应用架构模式

《Computer Systems – A Programmer’s Perspective | 深入理解计算机系统

《Agile
Principles, Patterns, and Practices in C#》 by Robert C. Martin

《Growing
Object-Oriented Software, Guided by Tests》

《Framework
Design Guidelines | .NET设计规范:约定、惯用法与模式
by Brad Abrams

《Object
Thinking》 by Dr. David West

《Advanced
Programming in the UNIX Environment | UNIX环境高级编程
by W. Richard Stevens

《Hackers
and Painters: Big Ideas from the Computer Age | 黑客与画家

《The
Soul of a New Machine | 新机器的灵魂
by Tracy Kidder

《CLR
via C# | 框架设计
by Jeffrey Richter

《Design
Patterns in C#》 by Steve Metsker

《Alice
in Wonderland | 爱丽丝梦游仙境
by Lewis Carol

《Zen
and the Art of Motorcycle Maintenance | 禅与摩托车维修艺术》by
Robert M. Pirsig

《About
Face – The Essentials of Interaction Design | About Face3交互设计精髓》

《Here
Comes Everybody: The Power of Organizing Without Organizations | 未来是湿的:无组织的组织力量
by Clay Shirky

《The
Tao of Programming》

《Computational
Beauty of Nature》

Philip and Alex’s Guide to Web Publishing

《Object-Oriented
Analysis and Design with Applications | 面向对象分析与设计》 by Grady Booch

《Effective
Java | Effective
Java中文版》 by Joshua Bloch

《Computability:
An Introduction to Recursive Function Theory》 by N. J. Cutland

《Masterminds
of Programming | 编程大师智慧/编程之魂

《Tao
Te Ching | 道德经

《The
Productive Programmer | 卓有成效的程序员

《The
Art of Deception》 by Kevin Mitnick

《The
Career Programmer: Guerilla Tactics for an Imperfect World》 by Christopher Duncan

《Paradigms
of Artificial Intelligence Programming: Case studies in Common Lisp》

《Masters
of Doom | Doom启示录

《Pragmatic
Unit Testing in C# with NUnit》 by Andy Hunt and Dave Thomas with Matt Hargett

《How
To Solve It: A New Aspect of Mathematical Method | 怎样解题:数学思维的新方法
by George Polya

《The
Alchemist | 牧羊少年奇幻之旅》 by Paulo Coelho

《Smalltalk-80:
The Language and its Implementation》

《Writing
Secure Code (2nd Edition) 》by Michael Howard

《Introduction
to Functional Programming》 by Philip Wadler and Richard Bird

《No Bugs!: Delivering
Error Free Code in C and C++》 by David Thielen

Rework | 重来:更为简单有效的商业思维》
by Jason Freid and DHH

《JUnit
in Action | JUnit实战

后语

除这个书单之外,曾经也有微博网友推荐《一些经典的计算机书籍》,大约在50本。


国外程序员推荐的免费编程书籍资源

我正试着搜集整理一个可在网上免费阅读的计算机编程书籍列表。这些书可以是某种特定编程语言,也可以计算机方面通用书籍。网上有哪些免费可用的书籍呢?

下面是一些网友在回复中的推荐资源,其中有视频、大学课程、编程语言教程网站,由伯乐在线整理编译。

一、George Stocker 提供了一大串,分类如下:

How to Design Programs: An Introduction to Computing and Programming

25 Free Computer Science Ebooks

Free Tech Books

MindView Inc

Wikibooks: Programming

Cheat Sheets (Free)

CodePlex List of Free E-Books

Book Training – On Video!

Sofware Program Managers Network – Free EBooks

EBook Share @ linbai.info

FreeBooksClub.Net

Theassayer.org

O’Reilly’s Open Books Project

TechBooksForFree.com

Galileo Computing (德语)

Microsoft Press: Free E-Books

Graphics Programming 图形编程

GPU Gems

GPU Gems 2 – ch
8,14,18,29,30 as pdf

GPU Gems 3

Graphics Programming Black Book

ShaderX series

DirectX manual (draft)

Learning Modern 3D Graphics Programming (draft)

Language Agnostic

Object-Oriented Reengineering Patterns

Foundations of Programming

Computer Musings (由唐纳德·克努斯授课)

The Cathedral and the Bazaar

Patterns and Practices: Application Architecture Guide 2.0

Security Engineering

Digital Signal Processing For Engineers and Scientists

Getting Real

Structure and Interpretation of Computer Programs

Domain Driven Design Quickly

OO Design

Best Kept Secrets of Peer Code Review

NASA Software Measurement Handbook

NASA Manager Handbook for Software Development (PDF)

Introduction to Functional Programming (经典课程)

How to Design Programs

Guide to the Software Engineering Body of Knowledge

Online Course Materials

Algorithms (draft)

Data Structures and Algorithms

Essential Skills for Agile Development

Programming Languages: Application and Interpretation

Learn to Program

Patterns of Software: Tales from the Software Community (PDF)

How to write Unmaintainable Code

The Art of Unix ProgrammingUNIX编程艺术

The Definitive Guide to Building Code Quality

How to Think Like a Computer Scientist

Planning Algorithms

Mathematical Logic – an Introduction (PDF)

An Introduction to the Theory of Computation

Developers Developers Developers Developers

Linkers and loaders

Let’s Build a Compiler

Producing Open Source Software

How to Write Parallel Programs

Don’t Just Roll the Dice

97 Things Every Programmer Should Know(这本书有中文版《程序员应该知道的97件事》)

How Computers Work

Introduction to Information Retrieval

Is Parallel Programming Hard, And, If So, What Can You Do About It?

Matters Computational

Type Theory and Functional Programming

Getting started with Open source development (PDF)

Database Fundamentals (PDF)

Clever Algorithms

Summary of the GoF Design Patterns

Flow based Programming

Algorithms and Data-Structures (PDF)

Compiler Construction (PDF)

Project Oberon (PDF)

The Little Book of Semaphores

Essential Skills for Agile Development

I Am a Bug

Mining of Massive Datasets

Data-Intensive Text Processing with MapReduce (PDF)

Understanding IP Addressing: Everything you ever wanted to know (PDF)

Operating Systems and Middleware (PDF and LaTeX)

ASP.NET MVC

NerdDinner Walkthrough

Assembly Language 汇编语言

ProgrammingGroundUp (PDF)

Paul Carter’s Tutorial on x86 Assembly

Software optimization resources by Agner Fog

Bash

Advanced Bash-Scripting Guide

Lhunath’s Bash Guide

C / C++

The new C standard – an annotated reference

Matters Computational: Ideas, Algorithms, Source Code, by Jorg Arndt

The C book

Thinking in C++, Second Edition (《C++编程思想》)

C++ Annotations

Software optimization resources by Agner Fog

Introduction to Design Patterns in C++ with Qt 4 (PDF)

Object Oriented Programming in C (PDF)

Beej’s Guide to Network Programming

Learn C the hard way

Also see: The Definitive C++ Book Guide and List

C#

请参见下面 .NET 方面的

Clojure

Clojure Programming

ColdFusion

CFML In 100 Minutes

DB2

Getting started with IBM Data Studio for
DB2 (PDF)

Getting started with IBM DB2 development (PDF)

Getting started with DB2 Express-C (PDF)

Delphi / Pascal

Essential Pascal Version 1 and 2

The Tomes of Delphi

Django

Djangobook.com

Erlang

Learn You Some Erlang For Great Good

Flex

Getting started with Adobe Flex (PDF)

F#

The F# Survival Guide

F Sharp Programming in Wikibooks

Forth

Starting Forth

Thinking Forth

Git

Pro Git

The Git Community Book

Git From The Bottom Up (PDF)

Grails

Getting Start with Grails

Haskell

Learn You a Haskell

Real World Haskell

HTML / CSS

Dive Into HTML5

HTML Dog Tutorials

Java

Sun’s Java Tutorials

Thinking in Java (《Java编程思想》)

How to Think Like a Computer Scientist

Java Thin-Client Programming

OSGi in Practice (PDF)

Java 6 Tutorial (PDF)

JavaScript

Eloquent JavaScript

Crockford’s JavaScript

jQuery Fundamentals (starts with JavaScript basics)

Mozilla Developer Network’s JavaScript Guide

Essential Javascript & jQuery Design Patterns for Beginners

Latex

The Not So Short Introduction to LATEX (perfect for beginners 特别适合初学者)

Linux

Advanced Linux Programming

Lisp

A Gentle Introduction to Symbolic Computation (PDF)

Practical Common Lisp

On Lisp

ANSI Common Lisp

Common Lisp the Language, 2nd Edition

Successful Lisp

Let Over Lambda – 50 Years of Lisp

Natural Language Processing in Lisp

Lua

Programming In Lua (for v5 but still largely relevant)

Lua Programming Gems (不完全免费,但有很多免费的章节及代码)

Maven

Better Builds with Maven

Maven by Example

Maven: The Complete Reference

Repository Management with Nexus

Developing with Eclipse and Maven

Mercurial

Mercurial: The Definitive Guide

HGInit – Mercurial Tutorial by Joel Spolsky

Nemerle

See .NET below

.NET (C# / VB / Nemerle / Visual Studio)

C# School (covers C# 1.0 and 2.0)

Visual Studio Tips and Tricks (VS 2003-2005 only)

Entity Framework

Charles Petzold’s .NET Book 0

Threading in C#

C# Yellow Book (intro to programming)

C# Programming – Wikibook

C# Essentials

Data Structures and Algorithms with Object-Oriented Design Patterns in C#

Illustrated C# 2008 (.zip, dead link)

O’Reilly’s
C# Pocket Reference Manual (dead link)

Nemerle

NoSQL

CouchDB: The Definitive Guide

The Little MongoDB Book

Oberon

Programming in Oberon (PDF)

Objective-C

The Objective-C Programming Language

OCaml

Unix System Programming in OCaml

Introduction to OCaml (PDF)

Oracle Server

Oracle’s Guides and Manuals

Oracle PL/SQL

PL/SQL Language Reference

PL/SQL Packages and Types Reference

Steven Feuerstein’s PL/SQL Obsession – Videos
and Presentations

Parrot / Perl 6

Using Perl 6 (work in progress)

Perl

Higher-Order Perl

Perl The Hard Way

Extreme Perl

Perl Free Online EBooks (meta-list)

The Mason Book

Practical mod_perl

Beginning Perl

Embedding Perl in HTML with Mason

Perl & LWP

Perl for the Web

Web Client Programming with Perl

Modern Perl 5

PHP

Practical PHP Programming (wiki containing O’Reilly’s PHP In
a Nutshell)

Zend Framework: Survive the Deep End

PowerShell

Mastering PowerShell

Prolog

Building Expert Systems in Prolog

Adventure in Prolog

Prolog Programming A First Course

Logic, Programming and Prolog (2ed)

Introduction to Prolog for Mathematicians

Learn Prolog Now!

Natural Language Processing in Prolog

Natural Language Processing Techniques in Prolog

Prolog techniques

Applications of Prolog

Simply logical

PostgreSQL

Practical PostgreSQL

Python

Dive Into Python

Dive Into Python 3

Byte of Python

Building Skills in Python Version 2.5

Python Free Online Ebooks (meta-list)

Python Bibliotheca

Think Python (PDF)

Data Structures and Algorithms in Python

How to Think Like a Computer Scientist: Learning with Python

Python for Fun

Invent Your Own Computer Games With Python

Learn Python The Hard Way

Thinking in Python

The Django Book

Snake Wrangling For Kids

Natural Language Processing with Python

R

The R Manuals

The R Language

R by example

Computational Statistics, Jeremy Penzer

Ruby

Programming Ruby

Why’s (Poignant) Guide to Ruby (mirror)

Mr. Neighborly’s Humble Little Ruby Book

Ruby Best Practices

MacRuby: The Definitive Guide

Learn Ruby the hard way

Ruby on Rails

Ruby on Rails Tutorial: Learn Rails By Example

Scala

Programming in Scala, First Edition

A Scala Tutorial for Java programmers (PDF)

Scala By Example (PDF)

Programming Scala

Xtrace (GitHub)

List (Github)

Pro Scala: Monadic Design Patterns for the Web

Exploring Lift (published earlier as “The Definitive Guide to Lift”, PDF)

Scheme

The Scheme Programming Language (Edition 4)

Smalltalk

Free Online Smalltalk Books (meta-list)

Squeak By Example (Smalltalk IDE)

Subversion

Subversion Version Control (PDF)

Version Control with Subversion

SQL (implementation agnostic)

Developing Time-Oriented Database Applications in SQL

Use The Index, Luke! (a guide to SQL database performance for developers)

Teradata

Teradata Books

Vim

A Byte of Vim

Vim Recipes

交互式教程网站:http://t.cn/aep0mV

很全的Vim速查卡:http://t.cn/aBPFPk

Websphere

Getting started with WebSphere (PDF)

二、 TG 推荐了麻省理工学院的一门课程

Structure and Interpretation of computer programs / 计算机程序员结构和解析》,这门课程视频地址是:http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/

三、 Gatekiller 推荐的资源如下:

How to Design Programs

Graphics Programing Black Book

Real World Haskell

Let Over Lambda

Starting Forth

List of Free Online Python Books

List of Free Online Perl Books

Squeak by Example

C# Essentials

List of Free Online Smalltalk Books

Successful Lisp

Introduction to Functional Programming

四、ani625推荐了一些Linux相关书籍

The Art of Unix Programming

Advanced Linux Programming by CodeSourcery LLC

Java Application Development on Linux by Carl Albing and Michael Schwarz(PDF)

Advanced Linux Programming

Secure Programming for Linux and Unix

The Linux Development Platform

Secure Programming for Linux and Unix HOWTO

C++ GUI Programming With Qt 3

Linux Kernel Module Programming Guide by Ori Pomerantz

KDE 2.0 Development

GTK+/Gnome Application Development

GNU Autoconf, Automake and Libtool

The Linux Kernel Module Programming Guide

PHP Essentials

JavaScript Essentials

Visual Basic Essentials

上面这4个推荐,是得票数最高的前4位。下面这些得票数不太高的,从中挑选了一些。

The Django Book, GNU Free Document License

Mercurial (Hg) book by Bryan O’Sullivan. (Mercurial 是一个分布式版本控制软件)

37 Signals’ 公司的 “Getting Real” 也提供免费在线阅读。

Clever Algorithms: Nature-Inspired Programming Recipes 》描述了人工智能领域中的 45个算法。所以这些算法的描述都连贯并完整,确保广大受众可以理解。 这本书也有免费的PDF版,也可以在线免费阅读

麻省理工学院关于计算机科学的开源课程:http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/index.htm

《Practical Common Lisp(实用Common Lisp 编程)》Sergio Acosta 强烈推荐的,特别适合对Lisp感兴趣的初学者,虽然这本书的纸质版并不免费,但作者Peter
Seibel 允许免费在线阅读

【更新:2012-5-17 20:24:19】

下面这部分依然来自 StackOverflow,不过是另外一个贴子

97 Things Every Programmer Should Know (这本书有中文版《程序员应该知道的97件事》)

Algorithms and Data-Structures (PDF)

Algorithms (draft)

The Architecture of Open Source Applications

The Art of Unix Programming

Best Kept Secrets of Peer Code Review

Binary Trees (PDF)<

The Cathedral and the Bazaar

Clever Algorithms

Communicating Sequential Processes (PDF) – Tony Hoare

Compiler Construction (PDF)

Computer Musings (lectures by Donald Knuth)

Data Structures and Algorithms: Annotated Reference with Examples

Database Fundamentals (PDF)

Data-Intensive Text Processing with MapReduce (PDF)

The Definitive Guide to Building Code Quality

Designing Interfaces by Jennifer Tidwell

Digital Signal Processing For Engineers and Scientists

Domain Driven Design Quickly

Don’t Just Roll the Dice

Essentials of Metaheuristics by Sean Luke

Essential Skills for Agile Development

A Field Guide To Genetic Programming

Flow based Programming

Foundations of Computer Science – Al Aho and Jeff Ullman

Foundations of Programming

Getting Real

Getting started with Open source development (PDF)

The Great Tree List Recursion Problem

Guide to the Software Engineering Body of Knowledge

How Computers Work

How to Design Programs

How to Think Like a Computer Scientist

How to Write Parallel Programs

How to write Unmaintainable Code

I Am a Bug

An Introduction to the Theory of Computation

Introduction to Functional Programming (class lectures and slides)

Introduction to Information Retrieval

Is Parallel Programming Hard, And, If So, What Can You Do About It?

Learn to Program

Let’s Build a Compiler

Linkers and loaders

Linked List Basics

Linked List Problems

Mathematical Logic – an Introduction(PDF)

Matters Computational

Mining of Massive Datasets

NASA Manager Handbook for Software Development (PDF)

NASA Software Measurement Handbook

Object-Oriented Reengineering Patterns

Online Course Materials

OO Design

Operating Systems and Middleware (PDF and LaTeX)

Patterns and Practices: Application Architecture Guide 2.0

Patterns of Software: Tales from the Software Community (PDF)

Planning Algorithms

PNG: The Definitive Guide

Pointers And Memory

Producing Open Source Software

Programming Languages: Application and Interpretation

Programming Methodology

Programming Pearls

Project Oberon (PDF)

Seamless Object-Oriented Software Architecture(PDF)

Security Engineering

Structure and Interpretation of Computer Programs

Summary of the GoF Design Patterns

The Little Book of Semaphores

The TCP/IP Guide

Think Stats: Probability and Statistics for Programmers (PDF, code written in Python)

Type Theory and Functional Programming

Understanding IP Addressing: Everything you ever wanted to know (PDF)


ThoughtWorks(中国)程序员读书雷达

软件业的特点是变化。若要提高软件开发的技能,就必须跟上技术发展的步伐。埋首醉心于项目开发与实战,固然能够锤炼自己的开发技巧,却难免受限于经验与学识。世界上并不存在速成的终南捷径,但阅读好的技术书籍,尤其是阅读大师们的经典著作,总能收到事半功倍之效。一位优秀的程序员,或许就是一名好的阅读者。好的阅读者,总是知道如何选择好的书籍。书海浩繁,良莠不齐。阅读技术好书,如与智者交谈,“与君一席话胜读十年书”;遭遇技术烂书,如被拐卖,“少小离家老大回,乡音无改鬓毛衰”。





ThoughtWorks作为一家学习型组织,颇为看重每一位员工的学习能力。事实上,大多数ThoughtWorker的骨子里,都溢满了读书的基因。与书相伴,与书为伍,既是一种乐趣,又是一种习惯。当习惯成为自然时,书籍就成为生活和工作不可或缺的一部分了。如果说人文历史哲学等书籍是一碗心灵鸡汤,技术书籍大抵算得上是一味营养素,读之可以直接带来养分;可若是不了解自己究竟缺了哪一种营养,乱吃乱补,结果就可能适得其反了。有鉴于此,我和同事刘龙军结合自身的阅读经验,为新入职ThoughtWorks的程序员制作了一份读书路线图。我们将范围明确为程序员,是因为作为程序员的我们,它是我们最了解的工作角色。

我们筛选出了一些大家公认的经典书籍,再结合自己的阅读体会,并广泛征集了更多ThoughtWorker的意见,包括徐昊,熊节,郑晔等资深阅读者,得到了这样一份草稿。在中国公司内部推出时,这份读书路线图得到了多数人的认可和欢迎。继而,我们在成都办公室陆续针对此读书路线图展开了读书俱乐部的活动,算是做了一次全方位大面积的试水。 现在,我们觉得是推出正式版本,并面向更多受众的时机了。这就是大家现在看到的ThoughtWorks(中国)程序员读书雷达。它相较于之前的读书路线图草稿,分类更为专业,书籍筛选更为合理,并以雷达独有的优势,来展现不同的阅读维度与阅读深度。

显然,读书雷达更能表达我们对所选书籍的深度认识。它可以作为学习型组织的一份知识输入,每一位程序员都可以根据自身水平与能力,选择适合自己的书籍,甚至组成一份表达阅读履历的读书路线图,在获得知识完善与汲取的过程中,提高自身能力,达至各个维度的巅峰。 该读书雷达将书籍分为了如下四个象限:

Coding Practice(编程实践) Architecture & Design(架构与设计) Methodology(方法学) Thought & Leadership(思想与领导力)

我们之所以将方法学、思想与领导力放入到这个为程序员设计的读书雷达中,乃是因为软件开发不仅仅是个人的活动,也不仅仅是编码技巧和设计能力的体现。我们认为,开发技能其实是一项综合的系统工程。了解方法学,可以促进你对开发过程的理解;关于思想,则涉及大脑思维的修炼,可以提高程序员的抽象能力、学习能力,有助于帮助程序员发现事物发展的规律和本质;

至于领导力,则有助于程序员在开发团队中发挥更大的作用,并能作为很好的团队成员,提升团队的整体能力。我们没有在这个读书雷达中包括语言类的书籍,原因在于这类书籍太过于发散,且更新较快;我们也不可能奢望在一张读书雷达图中,为不同的语言平台展现不同的优秀书籍。相比较语言的学习,我们更看重程序员在编程实践上的基本功。 每个象限皆分为三个等级,分别为Fundamental、Medium和Advanced,对应初学、进阶和高级。在雷达图中,读者可以根据该书在图中距离圆心的远近,判断它的难度级别。我们还使用了不同的图示来表达对每本书的倾向性意见,其中,橙色的三角形图示代表“强烈推荐”,蓝色的圆形图示代表“推荐”。

我们希望这类书籍对于程序员而言,可以根据自己目前的水平,选择适合自己的书籍。在这个层次上,强烈推荐可能就意味着必读。 或许有人会质疑读书雷达的挑选标准。正所谓“每个人心中都有自己的哈姆雷特”,我们认同的未必能得到读者的认同,这是我们这个世界关于一种观点或态度的常态。我们发布这个读书雷达,只是希望能提供更多有用的信息与参考,而非代表一种读书权利的绝对化。事实上,我们也不可能做到。此外,”吾生也有涯,而知也无涯”,我们阅读的书籍毕竟有限,且读书雷达的容量也有限,难免会有遗珠之叹,这也是一件无可奈何之事。然而,我们欢迎更多的批评与建议,或许你推荐的好书恰恰是我们遗忘的,又或者激起了我们的共识,那么我们也会毫不吝啬地更新读书雷达,以求做到我们能力范围内的尽善尽美。当然,正如你看到的,我们在Methodology(方法学)象限,更多地推荐了与敏捷和精益相关的书籍。这是因为我们对敏捷技能与方法更有心得和信心。

对于我和刘龙军还不够擅长的领域,我们不敢也不愿做出可能误导人的推荐。 本读书雷达虽然冠以ThoughtWorks(中国)之名,但选书的倾向与意见并非ThoughtWorks(中国)官方的态度,而是作为制作者(龙军和我)个人表达的意见而已。如果你也加入了ThoughtWorks,你一定会发现这种自发组织的民间活动,在ThoughtWorks可谓俯拾皆是,不用诧异。 我将在后面的文章中,根据每个象限为每一本书给出我们的推荐理由。此时,书籍成为了我们的臣民,我想对这个王国做一次不吝惜赞赏的巡视。最后,列出读书雷达的中英文书单,如下所示(感谢凯峰为这个雷达图建立的豆列,可以访问ThoughtWorks(中国)程序员读书雷达):

Coding Practice | 编程实践

基础篇

Clean Code《代码整洁之道

Pragmatic Unit Testing《单元测试之道》

The
Productive Programmer《卓有成效的程序员

Test-Driven Development By Example《测试驱动开发

Clean Coder《程序员的职业修养》

The
Art of Readable Code《编写可读代码的艺术

进阶篇

Refactoring
to Patterns《重构与模式》

Implementation Patterns《实现模式

Code Complete《代码大全

The Pragmatic Programmer《程序员修炼之道

高级篇

Structure and Interpretation of Computer Programs《计算机程序的构造和解释

Working Effectively with Legacy Code《修改代码的艺术

Architecture & Design | 架构与设计

基础篇

Agile Software Development 《敏捷软件开发:原则、实践与模式》

Head First Design Patterns《深入浅出设计模式

Design Patterns 《设计模式

进阶篇

The Art of UNIX Programming 《Unix编程艺术

Practical API Design 《框架设计的艺术》

Domain Specific Languages 《领域特定语言

Patterns
of Enterprise Application Architecture 《企业应用架构模式

高级篇

Release It Domain-Driven Design 《领域驱动设计

Enterprise Integration Patterns《企业集成模式》

Beautiful Architecture《架构之美

Pattern-Oriented Software Architecture《面向模式的软件架构》

Methodology | 方法学

基础篇

User Stories Applied《用户故事与敏捷方法

The Gold Mine《金矿

Scrum and XP From the Trenches《硝烟中的Scrum和XP

Continuous Integration《持续集成

Extreme Programming Explained《解析极限编程

进阶篇

Lean Thinking《精益思想

Continuous Delivery《持续交付

How Google Tests Software Agile Testing Extreme Programming Refactored《重构极限编程

高级篇

Specification By Example

Thought & Leadership | 思想与领导力

基础篇

The Effective Executive《卓有成效的管理者

Are Your Lights On?《你的灯亮着吗

Becoming A Technical Leader《成为技术领导者

进阶篇

The Fifth Discipline《第五项修炼

The Design Of Business Management 3.0《管理3.0:培养和提升敏捷领导力

Presentation To Win The McKinsey Way《麦肯锡方法

高级篇

Thinking, Fast and Slow《思考,快与慢


C++程序员的阅读清单

英文原文:Must read C++ book list,翻译:iteye

多读一些优秀的书籍,对于开发者稳固编程基础、提高编程技能有很大帮助。但是,大多时候,初学者不知道应该读什么书入门,有一定基础的开发者不知道如何进阶。

本文总结了一个C++优秀书籍清单,希望能够为你带来一定的帮助。这些书大多数都有中文版,并且可以很容易在网上找到。

阶段 1

《Essential C++》

这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。

《C++
Primer》

本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。

阶段 2

《Effective
C++》和《More
effective C++》

作者是Scott Meyers。你应该熟读它们,并清楚地理解每个项目。该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。





《Exceptional
C++(C++编程剖析)》和《More
Exceptional C++》

这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。

【更新】:根据微博网友反馈,已经原来“阶段3”的两本书放到“阶段5”,故而总阶段数减到4个。

@左耳朵耗子: 挺可靠的。另,我认为,阶段3的书应该放在阶段5。//@非魔: @左耳朵耗子 这个清单科学吗?
//@程序员的那些事: C++程序员的阅读清单

阶段 3

《The C++ standard library(C++标准程序库)》

这是标准模板库字典,你可以在本书中找到STL相关的一切知识。本书焦点放在标准模板库、检查容器、迭代器、函数对象和STL算法上。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细节解说、陷阱、意想不到的危险,以及相关类别和函数等。





《Effective STL》

这是Scott Meyers的第三本C++专著,也是学习STL最权威的书籍。作者对书中的50个指导方针都作了详尽的分析,并配以示例。通过这些规则,C++开发者可以最大限度地使用STL。

《Generic programming and the STL(泛型编程与STL)》

本书阐述了泛型程序设计的核心理念:concepts(概念)、modeling(模型)和refinement(改善),并为你展示这些观念如何导出STL的基础概念:iterators(迭代器)、containers(容器)和function objects(函数对象)。按照本书所述,你可以把STL想象成一个由concepts组成的library,你将学习到STL正式结构并理解其强大的优势。

阶段 4

《Inside the C++ object model(深度探索C++对象模型)》

本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。

《The design and evolution of C++(C++语言的设计与演化)》

本书作者也是C++语言的设计者Bjarne Stroustrup,作者在书中综合性地介绍了C++的发展历史,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景,既没有忽略关键性的详情,又没有过多地陷入技术细节。





《Exceptional
C++ style》

作者为Herb Sutter。本书同样提出了40个C++风格相关的问题,对一些至关重要的C++细节和相互关系提出了新的见解,为当今的关键C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略,帮助开发者在开销与功能之间、优雅与可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。

《C++ template》

这是一本关于C++模板的完整的参考手册和教程,它强调模板的使用实践,包含了现实世界中的例子。每个C++程序员都应该好好读一读这本书。

《Modern
C++ Design(现代C++设计)》

作者Andrei Alexandrescu为C++程序员打开了一个新的局面。本书提供了一些针对软件设计的前沿方法,如联合设计模式、泛型编程,使程序员可以编写有表现力的、灵活的、高度可重用的代码。

《Thinking in C++(C++编程思想)》

C++ 领域权威著作,介绍了C++实用的编程技术和最佳的实践方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: