最新更新 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都淘汰了。。。
《编程之美--微软技术面试心得》
算法题库,难度挺大,但其实对面试真的作用不大。。。