程序员应该读什么书?

在IT领域的发展过程中,新的编程语言层出不穷:C/C 、Java、C#、PHP、R语言、Python ……但在编程语言不断更新的过程中,经典的IT思想却历久弥新,用普适的思想来应对变化的语言,经受住了开发实践的考验。

在修炼成为优秀程序员的道路上,有很多经典的IT好书可供阅读。一本好书所传达的编程思想和开发理念往往能令人醍醐灌顶,恍然大悟,教会我们用更高的效率开发出更优质的应用。

《重构 改善既有代码的设计(第2版)》

这本书是经典著作《重构》出版20年后的更新版。作者马丁·福勒(Martin Fowler)是世界软件开发大师,在重构、面向对象分析设计、模式、XP 和UML等领域都有杰出贡献。这本书生动阐述了重构原理和具体做法,在第1版的基础上,这一版的内容更丰富,反映了许多编程领域业已发生的变化,能够帮助程序员一步一步修改代码,减少开发过程的风险。适合软件开发人员、项目管理人员等阅读,也可作为高等院校计算机及相关专业师生的参考读物。

Robert C. Martin,世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C Report前主编,被后辈程序员尊称为“Bob大叔”。

这本书提出了一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作者给出了一系列行之有效的整洁代码操作实践,并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。

《代码整洁之道 程序员的职业素养》

这本书是“Bob大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己和身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。

《编程珠玑(续 修订版)》

作者:[美]Jon Bentley,译者:钱丽艳 刘田;《编程珠玑(第2版 修订版)》,作者:[美]Jon Bentley,译者:黄倩 钱丽艳,审校:刘田

《编程珠玑》是历史上最伟大的计算机科学著作之一,融深邃思想、实战技术与趣味轶事于一炉。《编程珠玑(续)(修订版)》是《编程珠玑》的姊妹篇,讲述了对于程序员有共性的知识,延续了《编程珠玑》的特色,通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行透彻而睿智的描述,为复杂的编程问题提供清晰而完备的解决思路。《编程珠玑(第2版 修订版)》围绕程序设计人员面对的一系列实际问题展开,作者以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。这两本书对各个层次的程序员都具有很高的阅读价值。

《持续交付:发布可靠软件的系统方法》

这是一本软件工程师的职场指南,讲述了如何实现更快、更可靠、低成本的自动化软件交付,描述了如何通过增加反馈,并改进开发人员、测试人员、运维人员和项目经理之间的协作来达到这个目标。作者以自己在苹果、网景等公司中面临的生死攸关的时刻所做的抉择为例,总结了在硅谷摸爬滚打的经验,旨在为软件工程师更好地规划自己的职业生涯提供帮助,适合所有开发人员、测试人员、运维人员和项目经理学习参考。

《持续交付2.0 业务引领的DevOps精要》

这本书的作者乔梁是敏思特咨询公司的联合创始人,持续交付领域专家,敏捷与精益转型导师,任腾讯外聘研发管理顾问,也是《持续交付》一书的译者。作者“重新定义”了持续交付,增补了组织管理和架构两个维度,辅助以真实案例,对诸多持续交付的原则和实践加以解读,并对持续交付过程中的取舍原则加以论述。本书适合大型互联网公司的技术VP、技术负责人,中小型互联网公司的CTO、技术VP、研发/测试/运维负责人、主管及骨干,以及组织变革者阅读。

《计算机程序设计艺术》(共四卷)

作者:[美]Donald E. Knuth,译者:(卷1)李伯民 范明 蒋爱军;(卷2)巫斌 范明;(卷3)贾洪峰

《计算机程序设计艺术》系列被公认为计算机科学领域的权威之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。卷1讲解基本算法,其中包含了其他各卷都需用到的基本内容;卷2全面讲解了半数值算法,分“随机数”和“算术”两章,总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系;卷3全面讲述了排序和查找算法,扩展了卷1中数据结构的处理方法,并对各种算法的效率进行了大量的分析;卷4主要介绍了组合算法,内容涉及布尔函数、按位操作技巧、元组和排列、组合和分区以及所有的树等(中文版待译)。

《高效程序员的45个习惯:敏捷开发修炼之道(修订版)》

这本书生动地阐述并总结了成为高效的开发人员所需具备的45个习惯、思想观念和方法,涵盖了软件开发进程、编程和调试工作、开发者态度、项目和团队管理以及持续学习等几方面。这本书适合所有程序员阅读,《Ajax基础教程》的作者,资深软件工程师Nathaniel T. Schutta评价这本书:“书中‘切身感受’的内容非常有价值——通过它我们可以做到学有所思,思有所悟,悟有所行。”

《软技能 代码之外的生存指南 》

这是一本真正从“人”的角度关注软件开发人员自身发展的书,聚焦于软件开发人员生活的方方面面。从揭秘面试的流程到精耕细作出一份杀手级简历,从创建大受欢迎的博客到打造你,从提高自己工作效率到与如何与“拖延症”做斗争,甚至包括如何投资不动产,如何关注自己的健康。 通过阅读本书,软件工程人员、编程人员和其他技术人员能够积极思考自己的职业生涯,丰富自己的生活,让自己更接近成功。

这本书初版于1975年面世,此后四分之一个世纪始终畅销不衰。作者杰拉尔德·温伯格是软件领域最著名的专家之一,美国计算机名人堂代表人物,国际知名的演讲家、作家、顾问。这是一本全面介绍一般系统思维的权威指南,旨在帮助人们掌握科学的思维法则,揭开科学与技术的神秘面纱。书中通过基本的代数原理,使用大量图表、符号,乃至方程来展示探索项目、产品、组织机构等各类系统的方式方法。 这本书适合所有对思考问题感兴趣,希望高效认知世界的读者阅读。

《黑客与画家:来自计算机时代的高见》

这本书是硅谷创业之父Paul Graham的文集,以新的视角展示了当今IT技术浸透下的世界。主要介绍黑客的爱好和动机,讨论黑客成长、黑客对世界的贡献,以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,认识黑客大脑内部的世界,充满了离经叛道的洞见与实践的智慧。适合所有程序员和互联网创业者,也适合一切对计算机行业感兴趣的读者。


思想的传承和借鉴让程序员们跳出了具体编程语言的框架,认识了开发过程的本质。各位程序员不妨仔细研读、品味这些精选的IT好书,利用这些珍贵的思想,创造出更为惊艳的作品!

从05年开始上C语言课写下第一行代码开始,到今天成为IT行业的"老码农",一路走来踩过不少坑,现在想来如果有前辈带会好很多,所以分享一些经验希望后人少走弯路。

学习计算机技术,一般会往两个方向发展:

前者是成为科学家,需要在某个领域研究非常深入,比如设计芯片、设计编译器、设计编程语言等。。。

后者是成为职业码农,不管是新手还是高大上的架构师,说白了,都是码农。

科学家要攻克的问题一般非常有挑战,有时需要花费几个月甚至几年才能解决,而码农遇到的问题没有这么难,但是频次比较高、涉及到的领域也比较多样化,所以踩坑的经验才是决定解决问题的能力。

科学家更考验天赋,码农更考验勤奋。

对于绝大部分看这篇文章的,我想应该都是往程序员方向发展的,我本人也是第二类方向,下面的文章也会着重分享这类方向的学习经验。对于一些不想做职业程序员,只是想学习一点编程提高下效率的,也是按照这一方向学习,没有本质区别。

无论是真正的技术爱好者,还是为了找工作,学技术都要注意以下几点:

对某个技术的投入,一定要谨慎。举个简单例子

《VC++深入详解》孙鑫

《MFC 深入浅出》侯捷著

这些书,大部分版面都在讲MFC,但MFC已经过时了,所以说选折方向很重要,一定要尽量学不容易过时的技术。

所以,学习,就和投资股票一样,也要选对学习对象才行,尤其是计算机这个行业,很多东西更新很快,费半天劲学某个会过时的技术,是浪费生命。

首先,要多读文章,多了解技术的大势。

其次,要多思考这玩意符不符合人性,比如python,为什么火?很多人说因为它的库多,这只是表面原因,那为什么它的库多?其他语言库没它多呢?本质原因是它简单易学,然后对于性能需求的场景还能直接用c写扩展,简单说就是,简单易学又不失功能性,这就是符合人性的东西。

光是选对大势还不够,还要学会择时。

举个例子,nosql,在2015年以前,市面上没有100个也有80个,学哪个?

你可能觉得"nosql和前端都就挺有用的,以后不可少",所以你选择要学两个领域的技术,这没错,但是学哪个呢?

再举个例子,还记得2014年前端框架百花齐放吗?你又学哪个?

包括现在的各种cicd工具或者平台,竞争也很激烈。

上面的pk,有些现在已经分成胜负,但是在当时那个节点,你能保证你押对吗?

没有人敢说自己100%能押中,所以最好的方式是,不要着急,先了解和观望,等胜负清晰时再出手。

这也是我给所有项目架构师的建议,不要冒然让下面的人去学xxx新技术,请为他们负责,同时也是为公司负责,别拉了一坨屎,上位后让别人来擦。

我认为我在选对大势和折时方面是做得不错的:

我08年学习python,上来我就赌他会火,原因前面已经提到了,符合人性。

我09年关注git(当时github刚起来),然后12年开始重仓。

我大约12、13年左右关注elasticsearch、当时记得是0.x几版,差不多在14年我开始加仓。

我大约13、14年关注docker,15年开始重仓。

我大约13、14年关注aws和云服务器,20年才开始加仓gcp。

我大约14年就关注前端,18年以后才重仓vue。

我大约15、16年就用机器学习做项目了,但是重仓要在18年以后。

我大约15年就关注nodejs了,但我真正用来做项目是20年以后。

我大约16年就关注golang了,但我真正用来做项目是19年左右,类似的,我用Gin框架也是等到它的活跃度拉开其他框架一档以后。

我能做出这些不错的选择和踩点,是源于我早年学MFC吃亏后的反思,以及我平时会阅读大量的文章、新闻、开源项目,关注最新的技术趋势。

我想不出一个人除了这么做还能怎么提高自己的投资能力。

首先,0基础的可以读书、读教程文章。

稍微有点基础立刻开始着手做项目,以战代练。

一定要记笔记,好记性不如烂笔头。

而且要经常整理自己的笔记,整理笔记除了可以复习加深印象,更重要的是消化一些模糊的、无序的知识点,将其划分到自己的"知识系统"中去。

3. 阅读以前自己的代码

知道为什么围棋手要复盘、nba球员要赛后看比赛录像吗?

自省、总结经验帮助很大,当你事后看自己当你拉的屎时,你会很深刻的记在心里:以后这种功能需求不能这种写法

什么叫搅碎了吃?你知道练钢琴里面的599为什么都是各种和弦、下围棋为什么光懂棋理背定式还不行,还要会常用的攻防手法比如(夹、跳、封、尖、立、挖、镇、飞、双、压)等吗?

说白了,一首曲子,最终其实就是一个个和弦组成的,相当于你把所有曲子里面基本的东西拌碎了吃,那弹一首曲子还困难吗?

这种"笨"办法,对大局观和想象力的锻炼作用有限,但是对于基本功练习作用是非常明显的。

计算机技术是同理的,我举几个简单例子好了:

搭建nginx,常见的功能需求也就3、4种,再熟悉nginx的高手,自己动手写配置文件、或者网上搜索配置文件再copy,也要花一些时间吧,但是你提前就把这几种常见配置,保存成例子文件或者存到你的云笔记,以后用的时候直接从本地copy就行了,还有得着搜索引擎吗?

再几个例子,python创建子进程,然后父进程不阻塞,循环检测子进程是否已经退出,这个代码需求你裸写能保证一分钟内能写然后调试通过?不能吧,但是你可以把这种常见的代码片段保存下来,要用时能快速搜索到,这样10秒钟就能解决。

我知道,提取和整理这些代码碎片,很费时间,很"笨"。但是相信我,这些"笨"方法其实最后会把你浪费的时间全部节省回来,因为你犯错的概率小太多了。

我们前面提到过要常常整理笔记和复盘,其实整理笔记和复盘,就可以顺手把你写过的代码和配置文件最常用的那部分提取出来,作为以后的武器!

5. 读源码有必要吗?

有必要,但如后面会提到,源码分析书不要买。

读源码,其实是一种练习,练习读他人源码的能力,而不是背下代码实现,其实就算你读完并记住他的实现了,隔个几个月你也是记不住的。所以不建议整个系统阅读,最好是带着某个问题或者目的去读,这样你即能练习,也能解决问题。

读书真的必要吗?怎么读?

首先,没有一本书能涵盖某个领域的所有知识点,技术本来就是不断发展的,所以你会不停的遇到问题。

那么还有必要看书吗?还是有的,有两类书是值得看的:

第一类,就是我们说的入门书。是让"你掌握这个领域的基础知识点以及在大脑中建立起一个系统结构",如果你学想涉猎某个技术领域,你没有这套系统,你会陷入到知识海洋里不知道从哪里入手。当你有了这个系统后,你遇到的新问题,完全就可以用搜索引擎解决,同时,随着不断在实践过程中加深对这套系统的理解,你解决问题的速度会越来越快,思路会越来越宽。

入门书不一定要买,但是很多值得看。

第二类,是参考书。这类书一般是字典,用的时候能用到20%、30%,不用的时候就是囤灰,使用频率不高,但是临时遇到个问题,你不备这么一本书,自己去搜索又很浪费时间。所以这类书买不买,取决于你最近几年的工作是不是都要经常用相关知识。

下面介绍下选择书籍教材的一些注意事项。我会经常用"白嫖"这个词,我不是指用盗版,而是说这些书由于种种原因,不值得买,但是目录和有些章节还是可以看看的,可以考虑:

- 一般他们的目录都是该技术的系统架构或者比较好的学习流程,你可以按照目录的顺序去用搜索引擎来学习。

- 在网上读免费章节。

好吧,我知道你会下盗版pdf。。。

1. 大部分技术,应该先读官方文档,实在读不懂,再考虑看书。

官方文档,虽不是绝对,但大部分都是非常好的入门课程,所以建议先读官方文档,至少了解下这个技术,心理多少有点数。如果你完全不了解一个技术,你读该技术领域的任何书都会"卧槽、好牛逼阿",然后很容易冲动消费。

2. 短期内不打算从事某门技术的时候,不要去买这门技术的教程,比如你半年内不写python,就不要买python的教材。

3.深奥的书未必比简单的书要好,老外的书未必比国人的书要好。

比如《算法导论》,非常砖头,更适合计算书科学家阅读,真不适合普通人,你如果是奔着面试去还不如多刷刷题。类似的,《计算机网络》,《编译原理》,这些大名鼎鼎的经典,也未必适合你。

4. 谨慎看待经典书。

《Win32多线程程序设计》

这些书,经典是经典,但一方面太老,内容有点旧。另一方面,现在网上的技术文章教材比我那个时代多太多了,对某个知识点一搜,各种文章都出来了,所以要快速搞定某个技术知识点,最好还是搜索引擎。当然也不是说这些书完全没用,比如《Windows程序设计》这本书,前几章讲windows窗口的消息循环机制,还是可以读读的。

5.源码分析类书籍不要买

《windows内核情景分析》

《Linux内核源代码情景分析》

最好白嫖。同时建议自己硬起头皮直接读源码,读不懂的部分用搜索引擎搜。

6.诸如"技术手册","宝典","大全","指南","XX天,XX小时学通XXX”之类字样的书籍,大部分都很垃圾,真的。。。

最典型的就是《注册表大全》之类的。

7.工具流书籍谨慎对待。

等等,这些某个工具局的书籍最好都不要买,白嫖就行。因为这些技术更新比较快,买来以后,很可能过不了多久就过时了,而且书的讲解节奏一般比较慢,最好的方式就是网上搜教程、然后动手实践。

8. 如果不是很着急的话,不要去通篇读英文版的书,很费时间。可以快速浏览某一章节。

9. 不要着急买新书,哪怕它给你的感觉确实很棒。

10. 如果一本书有新版,尽量看新版。老版本的书,技术可能已经过时。

11. 一般一个领域,都会有本神级书,先读它

比如密码学、逆向工程方面的权威《加密与解密》,看完这本书,其他的逆向工程方面的书基本可以不用看了,例如:

《C++反汇编与逆向分析技术揭秘》

正如我们前面里提到的,入门以后,新问题都可以通过搜索引擎解决

12. 不要被异类的书籍所迷惑。有的书籍从一些所谓的"架构","系统","模式","方法学"等领域宽广的角度上来写书,然后涉及方方面面的内容,其本意是好的,想巩固读者的基础,提升读者的内功等等,但是这类书籍的起点定的太高了,很难将每个方面都写得深入,所以这种书值得在图书馆白嫖,但不宜收藏。

13. 不要买基于某个项目的开发来作为教程的书。

14. 不要买完全是"实例"填充,而技术原理讲解极少的书。

15. 不要买知识点非常单一的书

举个例子,《Windows PE 权威指南》,其实学习PE文件格式看《加密和解码3》,再结合看雪论坛的帖子就够了。类似的书,还有《XSS跨站脚本攻击剖析与防御》、《内核漏洞的利用与防范》等。

还是那句话,时代不同了,很多东西已经不用专门买书来看了,网上搜搜大把大把的文章。

《C语言程序设计》谭浩强

这两本书,我以前推荐过,因为我学c语言是通过学校教材,所以后来读大部分c语言的书就是以扫读为主。所以这方面我的推荐,参考价值不高,我看到更多技术人员(包括身边有朋友)推荐《c和指针》那本书,所以也许你应该优先看那本。

C++我没有什么好的入门书推荐,我看的教程都不好,不过我读过《C++ primer》,忘记第几版的了(第4版?),某年雪灾在火车上待了60多个小时实在无聊,把隔壁座位一哥们的这本书坑了一大半,这本书很细致,接近字典,适合做参考书,我不建议做入门教材。

参考书之一,比较深,如果是c++程序员,可以读读这本书,大约有一半的知识是经常要用到的,很多c++笔试题都可从中找到答案,你遇到的c++面试官的水平基本不会超出这本书,不过我不建议刷题流读这本书,读了也是一头污水。

这本书值不值得购买放在身边作参考,取决于你用c++的时间多不多。

STl学习,我读的是《C++ STL开发技术导引》叶至军这本书,这本书的例子很多,而且大部分STL库里的数据结构都讲了,我感觉作为入门是不错的,但是stl常用的语法其实都可以用笔记记下来,之后就不再需要书了,所以这本书适合白嫖。

这本书还有个最大缺点就是“类库”书籍的通病---拿几十页来分析类库的源码。STL使用很简单,但实现代码很复杂,除非是C++高手并且有兴趣才会去研究,但大部分程序员只要会使用就够了。

soctte meyers的又一精品,这本书表面上看只有200多页,一天就能啃完,但是内容却非常丰富,只要你使用STL就一定要看。这本书把很多误区陷阱都讲清楚了,侧重实战,但不适合stl新手。

和《Effective C++》一样,这本书值不值得购买放在身边作参考,取决于你用c++的时间多不多。

x86汇编语言的入门教材,这方面我读的书不多,《汇编语言》王爽我只能说的还行,其实我用汇编主要是在windows下,所以下面这本书我是真的快翻烂了。

《windows环境下32位汇编语言程序设计》罗云彬

可以说是最好的win32汇编教材,这本书写得真的很棒,不过需要一定的汇编和windows基础,当然作者很多地方对新手也很照顾!通过这本书你也能对windows系统编程有个全面的认识。

我学python没找什么书,就是直接搜网上的教程,就开始动手写项目和小程序,其实这才是正确的学习方法:带着需求去学习。

没有项目的同学可以试试写爬虫和操作数据库,应该是比较简单的上手方式。

后来我也把《核心编程3》看了一遍,我个人是不推荐用这种砖头入门的。所以对于python,我确实没有啥好书推荐。听说《python编程:从入门到实践》和《流畅的Python》不错,知乎上有不少贴专门提过python入门书,可以参考。

我没有看什么书,直接照着网上教程学,然后动手写项目。

我没有看什么书,直接照着网上教程学,然后动手写项目。从大势上看,只做web服务端开发,nodejs会慢慢被golang等取代,但是nodejs适合grpc/websocket等比较单一接口的微服务,以及小项目。

我没有看什么书,但我个人建议先把pandas和数据库学了再考虑学机器学习。

学机器学习先从python例子入手,看看网上用sklearn的教程,sklearn是必学的,哪怕你以后改用xgboost或者pytorch等。

sklearn官网的文章很好,很多值得反复阅读。

关系型数据库,我建议学postgres,但是如果你公司用mysql,你顺手把mysql学了也花不了多少时间,两者学会一个,再学另外一个很容易。

nosql我推荐elasticsearch,学会基本的操作后,再操作云服务上的nosql,其实差不太多。

分布式文件系统,学minio就行了,压根不用去看其他的了。

分布式计算框架,学spark现阶段应该是最优解,其他的再观望下。

我真不觉得入门前端需要读书,自己网上找个教程比如w3c那个教程,就能入门了。。。

非要推荐的话,我只看过两本:

适合作为参考手册,还比较全

入门以后vue或者react选一个即可,推荐vue,简单些。

windows系统底层程序员应该先学习汇编。。。然后读《windows环境下32位汇编语言程序设计》,我觉得这本比核心编程写得还好。

《深入理解windows操作系统》

你一定以为是本没用的砖头,是的,我当初和你想法一样,于是这本书在我的桌上放了整整1年半,当我熟悉windows内核后再去看,发现很多我曾经苦思不解的问题豁然开朗,但是仍有很不懂,放一放,再看,又弄懂一点,如此反复。这本书显然不是给初学者看的,里面基本没有代码。阅读之前应了解windows内核,最好的方法是阅读wrk源码和网上文章,使用内核调试器,动手自己调试一下。

windows这几年变化太大,这本书我也不知道新版的有没有与时俱进。

《windows驱动开始技术详解》

好书。讲驱动开发的书凤毛麟角,这本书可以说是现在很多内核专业开发者的入门教科书。书的段落安排和讲解对驱动新手都非常友好,缺点是有一些书写和打印上的错误(有一些很严重),但暇不掩瑜。如果你学习驱动,这本书应该是你常备身边的参考资料。强烈推荐。

Rookit的入门教材,搞windows内核安全的必读。

《寒江独钓:windows内核安全编程》

对内核开发方面做了比较深入的讲解,国内少有的涉及到文件驱动、磁盘驱动和网络驱动开发的书,应作为参考书常备。

《天书夜读:从汇编语言到windows内核编程》

这本书最好对驱动有一定了解再去读,两位作者都是驱网的高手,虽然这本书总体并不深,但是最好还是看完《windows驱动开始技术详解》和《ROOKITS---Windows内核》后再看,另外,如果学完汇编后想挑战一下逆向工程的,前3章将会有很大的帮助。这本书最后一章对vmprotect着笔太少,略有骗稿费嫌疑。

和《深入理解windows操作系统》地位相当的一本,MacOS系统研究员必读,应常备身边。

很好的内核开发参考资料。内存分配、用户态交互、线程同步章节等都归纳得很清楚,还可以参考apple官方文档《Kernel Programming》,两者互补,效果更佳。

搞MacOS安全研究的必读。为什么Windows和Linux下同类的书没有一本写得这么好呢?

《鸟哥的linux私房菜基础学习篇》

非常好的Linux入门书籍,强烈推荐给linux初学者!最好看新版的。

杨宗源 / 黄海涛 / 清华大学出版社出版的那一本,好像哈佛大学的教材,我读过的最好的Linux编程入门教材。你看豆瓣评分就知道了。

《Unix环境高级编程》

搜索一下'APUE',就知道这本书的影响力了,名副其实的UNIX编程圣经。

大体可以分为系统安全(气宗)和web安全(剑宗)两大分支。

系统安全(气宗)的书:

对于系统安全爱好者,缓冲区溢出漏洞应该是必须了解的,这本书适合完全不知道什么是缓冲区溢出的菜鸟。

比较少有的缓冲区溢出的入门书籍,一定要买最新版的,内容丰富了不少。

《漏洞战争:软件漏洞分析精要》

泉哥的书,讲的比较系统,适合入门后阅读,底子好的也可以直接读。

《加密与解密》看雪论坛

一本伟大的书,文笔朴实,内容丰富,作为逆向工程和加密解密的教科书,可以称得上完美,强烈推荐。

web安全(剑宗)的书:

《精通脚本黑客》曾云好

这本书是多少web黑客的入门书阿,今天里面的内容可能有些过时,比如大部分还是以asp为例子讲解,不过从理解漏洞的角度讲,这本书仍然是经典教科书。

一定要掌握web开发和html/javascript开发的基础知识再看这本书。

《白帽子讲Web安全》

好书,整理得不错,适合进阶。

《Web前端黑客技术揭秘》

貌似不如《白帽子讲安全》那本名气大,两者可以选读一本。

《程序员的自我修养--链接、装载与库》

这本书的内容是很多程序员都不曾关注的问题,但是喜欢刨根问底的人一定要读读。内功的东西经常说不出看不到,但是实际上懂了就比不懂的人解决问题快,只是很多人不重视。还是那句话,这本书一口气看完没有任何作用,慢慢品尝吧。对于想学习elf文件格式的也很有帮助。

我看过,但是并不推荐的或者适合白嫖的书

有编程基础或者python入门后,这三本书任一本都可以作为进阶,我是读的核心编程,但是其实里面很多章节可以不读,比如UI库,游戏库等,因为你不一定做那个方向。

我不推荐购买字典书,python太简单了,入门以后可以直接做项目来提升水平。

《Python网络编程基础》

我不建议再读这些闲书了,一来,这些老书很多基于python2来写,过时了;二来,最常用的语法其实可以通过自媒体、博客、技术网站之类的来学习,诸如丝素"10个常用的python技巧"出来的一堆文章,多读读就会了。

中文名为深度探索C++对象模型,很深很深,而且侯老师挑错的能力让人拜服,没读完,读起来太累了。。。这种书真的不适合普通程序员读

很深,应该是大三时读的吧,有点吃力,后来放弃。这本书更适合C++专家去读,想继续挑战的可以去读《STL扩展技术手册》

官方推荐的IDA教材,对于系统性掌握IDA来说是不错的,但是,前面说过,工具流图书购买要谨慎,白嫖最后。

《IDA Pro代码破解揭秘》

和上一本类似,只读一本即可

中文译名《Python灰帽子:黑客与逆向工程师的Python编程之道》

知识面扩展书,适合使用python的安全研究员,白嫖最好

《恶意软件分析诀窍与工具箱-对抗“流氓”软件的技术与利器》

和上一本书类似,但总体差不少,不推荐。

挂个shellcode的名字,里面居然有蓝牙,蠕虫,bios的内容,适合当闲书读,总体来说不推荐。

《缓冲区溢出攻击-检测,剖析与预防》

并不是很好的书,但考虑到前面的书很少介绍Linux下shellcode编写,所以这本可以作为补充。

除此之外,还可以参考文"浅入浅出Linux Shellcode"这篇文章

《黑客攻防技术宝典:系统实战篇》

就是shellcode handbook,各种平台的都介绍了一下,白嫖最好

《黑客攻防技术宝典:Web实战篇》

我觉得国人还是更适合看《白帽子讲Web安全》那本书,可能是这本书的翻译原。

《暗战亮剑:软件漏洞发掘与安全防范实战》

工具流图书,不值一读。

已经过时的书,完全可以被0day安全那本书取代

《网络渗透攻击与安防修炼》

关于各种渗透技术总结的一本书,很一般,部分经验可以借鉴下,工具流图书,不推荐。

性价比很低的书,不推荐。

《Android软件安全与逆向分析》

内容很薄的一本书,白嫖最适合

还是看《加密和解密》那本书吧。

《数据安全与编程技术》戴士剑

太烂太烂,不再建议阅读。不过关于文件解析的书简直凤毛麟角,另外几本90%都copy了这本书(很多原话都一样),所以网上确实也没啥好书。

如果你真的想自己解析NTFS或者FAT文件格式,最好的方式还是阅读文件解析程序源码和互联网资料(看雪论坛有很多)。

《windows内核原理与实现》

潘爱民老师的大作,典型的源码分析类书,适合白嫖,然后提取里面的精华。

《windows网络与通信程序设计》王艳平,张越著

《windows防火墙与网络封包截获技术》朱雁辉著

将这两本书放在一起写,因为两本书的内容有点互补,当然雷同也不少,所以最好一起看。不建议买。两本书的防火墙实例都没必要看,代码太繁琐,反正我没看,自己写了个比他好的。第一本书相对好的多,内容也比较全,建议主要看第一本,看到SPI部分再结合第2本书,因为第2本书后面的防火墙实例写的那几个SPI截获函数都很易懂,可以做框架照搬。这样学习SPI应该没什么问题了,另外,第2本书还讲了TDI,如果你要学TDI驱动的话就只能参考第2本了。其实当初看这两本书,主要是找NDIS驱动的资料,遗憾的是NDIS的资料市面上很少,这两本也讲的很一般,要知道,NDIS驱动本身就是很难理解的,所以看不懂很正常,学NDIS可以读读WDK里的源码,要硬起头皮读哦。。。

这两本都是字典一样的东西,又厚又贵,windows程序员可选读。

书很薄,基本上围绕着gdb,ddd,eclipse来讲,工具流图书,不推荐。

《Linux内核分析及编程》

《深入理解LINUX网络技术内幕》

《LINUX设备驱动程序》

《深入Linux内核架构》

《深入理解Linux内核》

这些书大部分是基于2.x内核的,比较老了。一般来说学习Linux内核,要么是搞懂某个机制,要么是开发内核驱动,两者都可以用搜索引擎快速找到很多资料,如果你是想找符合"唯一原则"的书,本来《深入理解Linux内核》是够格的,但是目前好像没有新版,第三版仍然在2.x的内核上,所以确实没什么好办法,搜索引擎+硬着头皮读源码吧。

卷一就是基础,我看的是第3版的(stevens第3版时好像已经安息了),可以说是为网络编程程序员量身订做的。涉及到的协议、接口太全了,我只看了socket相关的一些部分,代码都很精简易懂,好书,不过unix系统编程的代码例子很多都能在网上找到了,所以这本书买不买就看个人情怀了。

《unix网络编程--卷二进程间通讯》待续

《unix网络编程--卷三应用程序》待续

原书名为《The Art of UNIX Programming》,这本书不是讲编程的,而是讲UNIX哲学和文化的。前面是双流记的历史,后面有点设计模式和标准规范的味道了,还有关于许可证的解释等等,值得当闲书读读。

《orange's一个操作系统的实现》《自己动手写操作系统》

曲高和寡,适合时间充裕的底层爱好者读。毕业设计是写操作系统的很有必要买来读读。

《x86/x64体系探索及编程》

砖头型参考书一本,除非你的开发非常底层,需要涉及到CPU特性才需要,个人不推荐。

设计模式不是看书能掌握的,可以当闲书读一读开阔下思维。

《编程之美--微软技术面试心得》

算法题库,难度挺大,但其实对面试真的作用不大。。。

我要回帖

更多关于 适合新手程序员的书 的文章

 

随机推荐