最新更新 2022.1.22

上次更新 2017.1.21

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

你想要什么?

=================

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

1. 科研者

2. 程序员

两者有本质不同。

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

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

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

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

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

方向和择时

================

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

1. 选对大势

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

《windows编程循序渐进》北极星2003

《VC++深入详解》孙鑫

《MFC 深入浅出》侯捷著

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

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

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

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

2. 择时

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

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

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

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

docker swarm vs kubernates vs mesos ?

Airflow vs Luigi vs Argo vs MLFlow ?

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

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

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

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

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

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

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

我大约11、12年重仓redis。

我大约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吃亏后的反思,以及我平时会阅读大量的文章、新闻、开源项目,关注最新的技术趋势。

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

怎么学习?

========================

1. 入门

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

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

2. 笔记

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

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

3. 阅读以前自己的代码

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

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

4. 搅碎了吃

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

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

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

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

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

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

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

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

5. 读源码有必要吗?

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

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

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

==========================

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

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

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

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

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

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

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

- 在网上读免费章节。

- 找个图书馆。

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

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

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

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

冲动消费是大忌

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

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

4. 谨慎看待经典书。

《Programming Windows》也叫《Windows程序设计》Charles Petzold著

《Advanced Windows》Charles Petzold著

《Undocument NT》

《Windows程序设计》

《Win32多线程程序设计》

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

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

诸如

《windows内核情景分析》

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

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

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

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

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

诸如

《Git权威指南》

《从Docker到Kubernetes实践全接触》

《深入理解ElasticSearch》

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

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

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

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

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

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

《逆向工程核心原理》

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

。。。

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

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

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

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

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

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

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

常用技术的学习资源

====================

C语言

-------------------------

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

《易学C++》

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

C++

-------------------------

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

《Effective C++》soctte meyers著,侯捷译

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

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

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

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

《Effective STL:50条有效使用STL的经验》soctte meyers著,侯捷译

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

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

汇编语言

--------------------------

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

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

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

python

-------------------------

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

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

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

golang

-------------------------

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

nodejs

-------------------------

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

机器学习

-------------------------------

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

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

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

大数据

----------------------------------

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

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

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

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

前端开发

------------------------------

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

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

《疯狂html5/css/javascript讲义》适合入门

《JavaScript权威指南》

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

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

windows操作系统

------------------------------

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

《深入理解windows操作系统》

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

选读:

《windows核心编程》

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

《windows驱动开始技术详解》

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

《ROOKITS---Windows内核》

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

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

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

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

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

MacOS操作系统

------------------------------------

《Mac OS X Internals》

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

《Mac OS X and IOS Internals》

《Mac OS X Internals》的续集,必读,应常备身边。

《OS X and iOS Kernel Programming》

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

《The Mac Hacker's Handbook》

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

Linux操作系统

------------------------------

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

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

《Unix/Linux编程实践教程》

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

《Unix环境高级编程》

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

信息安全

------------------------

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

系统安全(气宗)的书:

《Q版本缓冲区溢出》

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

《0-day安全》

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

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

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

《加密与解密》看雪论坛

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

web安全(剑宗)的书:

《精通脚本黑客》曾云好

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

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

《白帽子讲Web安全》

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

《Web前端黑客技术揭秘》

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

其他一些强烈推荐的书

-------------------------------

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

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

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

====================

《Python核心编程》

《Python cookbook》

《Python 学习手册》

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

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

《可爱的Python》

《Python UNIX和Linux系统管理指南》

《Python网络编程基础》

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

《Inside The C++ Object Model》侯捷译

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

《泛型编程与STL》

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

《IDA Pro权威指南》

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

《IDA Pro代码破解揭秘》

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

《Python Programming for Hackers and Reverse Engineers》

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

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

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

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

《Shellcoder编程揭秘》

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

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

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

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

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

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

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

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

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

工具流图书,不值一读。

《网络渗透技术》

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

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

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

《捉虫日记》

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

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

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

《Reversing:逆向工程揭密》

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

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

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

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

《windows内核原理与实现》

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

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

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

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

《软件调试》

《Windows 高级调试》

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

《软件调试的艺术》

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

《Linux内核分析及编程》

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

《LINUX设备驱动程序》

《深入Linux内核架构》

《深入理解Linux内核》

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

《unix网络编程--卷一套接口API和X/Open传输接口API》

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

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

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

《UNIX编程艺术》

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

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

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

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

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

《大白话讲设计模式》

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

《IE8 & 9开发实战:基于下一代IE的应用开发》

IE都淘汰了。。。

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

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