我的书籍菜谱

来源:互联网 发布:js dialog 弹出窗口 编辑:程序博客网 时间:2024/04/27 00:35

我的书籍菜谱

       我只是一名普通的学生,那我的本职工作就是读书,所以我的2012,自然做的最多的事情也就是读书了。我买了一个小书柜,放下了自己这1年来看的书。偶尔看着也觉得挺自豪,自己也有挺多是书,更多的时候还是痛苦,总觉得自己总有学不完的东西。

骏马自知前程远,不待扬鞭已奋蹄


       读书需要靠头脑,头脑好的人看书快,理解的快,不过头脑不好的人也不是不行,就是多花写时间而已。我脑袋笨,看书慢,还经常看不明白,我很喜欢苏轼的 “古之立大事者,不惟有超世之才,亦必有坚韧不拔之志”,我先天不足,后天补补总可以吧。


 业精于勤荒于嬉

 

      读书也是这样,我以前一直抱怨自己为什么这不懂那不懂,现在想想其实当时自己是荒废了宝贵的时间在玩,直到最后看到身边的人鲜花名誉的时候才发觉自己已经不知不觉被人甩下了。


荤素搭配,老少皆宜


       一开始的时候,我问周围的人:“对于一个才开始入门的人,应该怎么办?”他们都是说:“你看看《C++Primer》,看看《鸟哥的私房菜》,就OK了”。当时我一直觉得确实是这样,后来慢慢看的多了,发现现实完全不是这样。书要搭配着看,不同的组合会产生不同的效果。然而都没有人告诉我怎么去搭配,不同下的搭配应该关注的目标又是什么。而网上很多人只是单纯的转载,贴了一个列表出来,说了等于没说。所以这边文章的主题就是和大家分享一下自己的书籍菜谱,说说我自己每道菜的味道又是什么。


开胃菜:C语言的入门


         我觉得C的入门不是学会C的语法,C的入门应该是你弄懂了一个可执行文件的结构的时候,当弄明白了一个可执行文件的结构,那C在我们眼里就变得那么的可爱了。


         所以学习C的主菜我第一个推荐:《程序员的自我修养——连接、装载与库》,这本书从编译开始讲述,重点介绍了链接库的原理以及一个可执行文件的结构,由浅入深,看完以后基本上对一个可执行文件的结构有了初步的了解。不过要吃这道菜也比较麻烦,它讲述的主要还是Linux下的,所以在吃之前,装一个Linux的系统,事先只需要了解1个命令——gcc,不用太多,一个足以。


         只吃一道主菜肯定是不行的,而且也啃不动那么多,学了太多的理论,我们却没有找到一种调试C的手段,我们这边搭配一道汤:《BinaryHacks:黑客秘笈100选》,加它的目的就是我当时学习C的时候,一直想找个人教我怎么调试,结果一直找不到,这本书恰恰就是我调试的入门用书。它不一定是最好的,你也可以选择其他的,比如《Debug Hack》、《软件调试的艺术》也是可以的。不过《Debug Hack》讲的是内核调试,学它还是等到学习了内核以后再说。


         现在我们添加一些作料,主要是因为我写代码的时候总觉得自己的代码写的难看,不知道什么时候该注释,所以这些作料的名称就是:《编写可读代码的艺术》、《C高质量编程》。《编写可读代码的艺术》这本书不针对C语言,后者反而更针对C,读这两本书的原因就是让我的代码变得漂亮了。最少在周围的人中间,我的代码时最好看的。


         这道菜我感觉这样就行了,我不认为要把C的语法当做重点,或者把懂的多少C库当做目标,懂的了上面的这些东西,那后面的这些东西说白了只是翻资料而已。


         值得说明的就是,《链接器与加载器》可以作为《连接、装载与库》的替代品。如果感觉吃的不爽可以添加一些《C与指针》、《C专家编程》、《C陷阱缺陷》,可以让你对C的更加深刻。至于《程序员面试宝典》,那等找工作的时候再说吧。


第一份菜单:Linux系统管理入门


       开胃菜的时候不得不接触到了Linux系统,我第一次接触它还是因为一次实验课,要求我们在上面跑一个叫real的仿真程序,当时我的感觉就是这个系统太难用了,为什么一定要学命令行。不过我现在是越用越觉得好用,只要给我一个终端,我可以做任何事情。


       学习Linux系统,很多人会因为它各种各样的命令而望而却步,我当时也苦恼了好久,后来发现这些苦恼其实都是没必要的,我们不用去记住那么多各种各样的命令,知道这个系统的结构就可以了。


       所以这道菜的第一个主菜就是:《UNIX/Linux 系统管理技术手册》。看这本书的时候不要一下子就开始记命令,它在系统部分的开头一两个章节都介绍了这个系统模块的原理,我觉得这些章节反而更加重要,理解了这部分的内容,理解后面命令行就变得更加容易了,而且不得不提的就是,学习这部分内容还可以为以后学习系统内核打下基础。


       Linux系统入门很难受,因为它的内容太杂了,所以我这边推荐第二道主菜:《Linux系统架构与目录解析》。我最初学习Linux时候最让我痛苦的其实还是不了解这个目录结构,当后来了解了Linux的目录结构后,一切都变的简单起来。虽然不同的Linux发行版的目录结构不太一样,但是基本的思路是一样的,以后无论是做管理,还是做开发,都会变得有迹可循。


       Linux内容很多,所以它的作料也很多,而且加入不同的作料会产生不同的味道,主菜还是拿两个,我们看看不同的作料会怎么样吧。


       作料1、《Linux操作系统的奥秘》。搭配上它,你就对整个系统的开机流程有一个完整的认识,最少以后看到女生系统坏了,你就可以上去帮忙了,不过前提是那个女生用的是Linux的操作系统(其实windows的也就那样)。


       作料2、《Linux命令、编辑器与Shell编程》、《正则指引》,这本书的重点还是看Shell编程,因为我只看过这本书,所以我只能说这本。按常理,我感觉《Shell脚本学习指南》这种专门讲Shell的书其实更好。而且Shell是我后来学习脚本式语言的一个入门。而学习正则表达式我感觉是必要的,不仅仅是Shell编程时使用,在很多语言中都提供了支持,而且它也可以帮助我们提高了平时工作的效率。


       作料3、《Unix环境高级编程》,这个搭配是不是很怪?如果从学习系统命令行的角度,你会发现其实很多最基础的系统命令行其实就是这本书中介绍的函数,所以看看这个会让我们对命令行的理解更加深刻。其实,命令就是一个小程序而已。所以,加这个作料一点也不怪。


       还有很多其他的搭配,比如可以专门学学《学习vi和vim编辑器》、《Ubuntu权威指南》这种的,我是感觉没什么必要了,多用就会了。虽然很多人推荐《鸟哥的私房菜》,不过我觉得没有推荐的必要,上面的看了,这本书自然就懂了。


第二份菜单:Linux系统内核


         为什么学习Linux的内核,因为Windows的内核不开源;因为讲Linux内核的书最多;因为……从我的角度而言,因为现在发展的最成熟的程序有两个,一个是编译器,另外一个就是系统内核。编译器需要算法理论基础,系统内核虽然也有,但是总没有编译器需要的多。


         关于Linux内核的书籍很多很多,而且各有特色,实在太难取舍。这道菜我一直在犹豫先实际后理论,还是反过来。最后还是按照我学习的顺序先来实际的吧,而且这样也更好理解。


         这道菜的第一道主菜就是:《Linux内核设计与实现》,这本书很好的介绍了Linux的全貌,而且将每个子系统都介绍的比较详细,尤其是其中的关键点全部都说明的很清楚。不过我第一次读的时候真的是读的很难受,有种卡在中间的感觉,感觉有些飘,很多地方都读的一知半解。


         所以我这里推荐一份汤帮助我们咽下,它就是《深入理解Linux内核》,这两本书我感觉可以搭配的读,每次只读其中一个子系统,搞懂一个后继续下一个;最后再顺序读两遍,把东西串起来,这样就会觉得舒服多了。


         但是这时候还是有些心慌的,我当时是感觉学的东西太杂、太多,根本没办法串起来。所以我推荐第二道主菜:《Linux内核设计的艺术》,这本书就好多了,它讲的是0.11版本的内核,这个版本的内核也是现在能找到的最早(貌似,记不清了),也是最简单的Linux内核。它还有一个更好的地方就是,它从内核启动的角度分析,用大量的图例,帮助你一步步分析内核中间各个模块是怎么配合起来的。


         第二道主菜吃的时候其实也比较难受,为什么?图虽然多,但是总觉得心里慌,因为它只截取主要的代码,我看的是心惊胆颤。虽然我也下了0.11的内核源码,但是看代码的时候还是看的特别难受。此外还有一个原因就是,我不懂汇编,更不懂硬件。这中间是别提多难受了。为此我选了一道汤帮我吃这道主菜:《Linux内核完全剖析——基于0.12内核》,加上这本书,基本上看0.11的内核已经没有问题了。


         吃完第二道主菜,基本对整个系统内核有个大概的了解,不过这就够了么?肯定不够,这里开始上第三道主菜:《深入理解计算机系统》、《现代操作系统》,这两本书偏向理论的内容就比较多,尤其是后者。《深入理解计算机系统》我推荐重点看虚拟内存这一块,其他大部分章节可以不看,或者根据选择而看(如关于编译的章节可以看看,与之前的开胃菜呼应),而《现代操作系统》我觉得2~6以及第8章都挺好的,其他章节我都不是太关注。我当时吧,看完以后就对内存管理、寻址这块很感兴趣。我又返回第一份汤,也就是《深入理解Linux内核》,认真读了相关的章节,又再次品味了第一道主菜《Linux内核设计与实现》相关章节,也把第二道主菜也再吃了一遍,感觉味道越来越浓,甚至发现开胃菜的主菜还可以在品味两次。


         所以这里,我感觉我们可以不用再上下一道主菜了,不妨多品味一下之前的味道更好。第三道主菜我也搭配了一份汤,《深入理解Linux虚拟内存管理》,我第一次囫囵的看的时候,我大呼上当,因为它的附录比正文还厚,不过后来我认真读进去后,发现它写的真的太好了。所以我还是很向大家推荐的。


         当然对于系统内核的书还有很多很多,有很多都可以当做主菜来用,不过这里我先说一下,只看书是不够的,有时候我们更需要品味一下正宗的内核是什么味道。所以我觉得吧,在品味上面的这些才的时候,自己下载一份源码,一边对照一边学习,效果反而更好。内核版本不重要,我觉得用最新的反而更好,因为它更人刺激我们去感受它的味道。


         最后谈谈作料吧,第一份作料就是《深入Linux设备驱动程序内核机制》,毕竟很多学内核都是为了做驱动而去,光学内核也感觉没有伸展手脚的机会。这本书写的很好,更多的从原理的角度介绍了驱动机制,这本书我没读过,这是我的师兄让我在这里添加了,他比我厉害,他说要,那肯定就是值得的了。第二份作料就是《深入理解Linux网络技术内幕》、《Linux内核源码剖析——TCP/IP实现》,毕竟我本身学网络出生,需要涉及到修改网络协议栈的内容,这中间我觉得这两本书给我的帮助最大,当然不能忘记了对照源码阅读(小提示:如果是看IPV6的协议栈,更应该看这两本了,不然无从下手,不过那个还需要一些其他的书辅助)。


         其他的比如《独辟蹊径:linux内核源码导读》、《Linux内核情景分析》等书都是值得一读的,不过这些我都读得很粗略。如果你喜欢,也不妨看看。


第三份菜单:未完成的算法之路


         我一直想学算法,但是这条道路感觉好曲折,每次都只能从空闲时间中抠,所以也学的比较零散,这道食谱其实还没完善,我只能先列出我自己现在想到的。


         第一道主菜:《STL源码剖析》,奇怪么?我感觉不奇怪,都说学算法从数据结构开始入门,我的感觉是,与其专门学数据结构,不如先从一个经典的实际应用中学习,所以我觉得选它一点都不奇怪。当然看这本书之前,我们还是需要会一些C++的知识,不过我觉得,最少知道STL中那几个经典容器怎么用就可以了,其实也没必要将C++弄透。即使在看《STL源码剖析》的时候看不懂源码,能看懂那几个示例和图就已经差不多了。我不清楚这道主菜是不是很好,我当时看它的时候是觉得挺好接受的,不过之前我就已经接触过一些关于数据结构的知识了。


         如果觉得难受,没关系。我这边的ACM亚洲地区冠军,还没毕业就被微软挖走的牛人的室友(其实也是冠军,不过不是亚洲地区)推荐了严蔚敏教授的数据结构的视频,有了它。相信数据结构肯定是没问题。这里我得罪人一句,我不推荐《大话数据结构》,真没觉得哪里好。


         第二道主菜嘛,我选《算法导论》,如果直接啃这本书,我觉得绝对是啃不动的,我感觉它就像一只螃蟹,没吃过的人根本不知道怎么吃。所以这道主菜绝对要搭配一份汤一起,这就是麻省理工学院关于《算法导论》的公开课视频,这个在网易公开课视频上可以找到。其实,视频中的一个老师就是这本书的作者之一。听他讲课,书自然不难啃了。


         算法我学的很浅,所以看的书也少,这边讲讲我另外看的1本书,我觉得可以当作料用,《算法:C语言实现》这本书则不像《算法导论》那么理论了,但是它还是非常的严谨的,少了一些推导,多了很多实现与算法上的比较,是对《算法导论》非常好的一个补充;《算法》这本书我才买回来,里面是用Java实现的,网上的介绍很牛,说是可以和TAOCP齐名,既然敢那么说,那应该就是好书了,不过没看,不多做评论。


         最后就是大名鼎鼎的TAOCP,也就是《程序设计的艺术》,我一直没敢买,他们说啃1本就直接无敌,不过我想我现在还不够资格。


第四份菜单:沟通与设计


         有人的地方就有沟通,一个低效的沟通手段只会浪费时间,这是我这1年中最大的一个感受之一。所以从11月份开始,受不了的我就开始了学习如何有效与他人沟通。又因为我正好从9月底开始动手Cloud Foundry,所以如何有效与他人沟通以及如何做设计也成了我最近学习的重点。下面这份菜谱是我最近的饮食搭配,我感觉挺不错,推荐给大家。


         首先第一道大菜:《Thinkin UML》,我买了很多相关的书,就这本书让我读了以后有一种豁然开朗的感觉,作者从UML中最小的元素开始解释,在介绍完语法后,将每种元素通过一定的语法(也就是各种视图)组织在一起,分析了各种图的优缺点以及适用情况后再告诉这些视图如何组合形成一个个模型,最后使用RUP将这些东西全部串在一起,告诉你:看呐,我们可以这么用。

(注:要提高沟通效率,首要的就是两个人要使用同一门语言,这里的同一门不是都指两个人都会普通话就可以的,而是有一个能够两个人对同一个事物的理解产生最少歧义的语言才是一个好的语言。数学的语言就有这种精确性,可惜在软件设计过程中却没有,即使是UML,它也无法做到精确的表述。)


         然后是第一道大菜的配菜:《UML精粹:标准对象建模语言简明指南》,作者Martin Fowler有着面向对象之父美称。其实这本书我第一次看感觉挺坑爹的,我买的很贵,59买的,但是书不厚,字间距,行间距也很大。我曾今把它打入我买的冷宫(这种花了好多钱买的废书真不少)中,不过这几天再翻出来看看,发现其实它写的挺好的,对得起“精粹”二字,不过我感觉有些有些太脆了,像萝卜干。


         然后我推荐第二道大菜:《设计模式之禅》、《企业应用架构模式》,设计模式是针对到了更细致的类的设计,而应用架构模式则从更高的角度介绍。我推荐先看看《设计模式之禅》,因为后者需要的知识点太多,而前者只要会1门面向对象的语言就可以了,甚至不用会Java(虽然它内部用的是Java)。


         应用模式很难,我至今看不懂,主要还是我缺少的拼图太多,为此我还准备了《Spring 3.X企业应用开发实战》、《金沟通呢Hibernate:Java对象持久化技术详解》、《Tomcat与Java Web开发技术详解》……等10多本书做前期准备(甚至我还学了Ruby以及Rails,后面发现没什么用,就CF这边分析源码能用到),等我什么时候发现了更好的办法,我再告诉大家。


         最后还有一份大菜:《软件工程》,这本书其实我没品位,不过让我了解到了更多的软件工程的方法,不仅仅局限于RUP。


甜点:语言学习


         我会多少编程语言?C/C++都会,而且用的还算可以,但也谈不上精通。也会QT,毕竟它就是C++,只是多了一些图形的东西和信号槽机制。Shell脚本会,写的不算太好,但是功能都在。Java,写代码还不行,看代码没问题。Ruby,也是会看不会写。Lua,一些简单。Javascript,也是会看不会写。此外还懂一些JSP,XML这种的我还知道能不能划分进来的。


         我从来坚信语言学精1种就可以了,而我选择的这一种就是C/C++。发现还挺好用的,面向过程,面向对象都吃的通。学Java、Ruby什么的也不费力,一会就能看懂了。所以我觉得关于语言的学习只能算甜点,而且算饭后的甜点。(当然,如果项目紧张,这个甜点就成正餐了,还好我还是学生,不会这么惨)


         所以我推荐积分我觉得很喜欢的甜点吧。


         甜点1、《C++ Primer》,鼎鼎大名,但是我不认为第一次读它就能够弄懂它,我推荐搭配一份咖啡,也就是开胃菜中的《链接、装载与库》,它会让你理解的更深刻。以及在咖啡中加1块糖《Effective C++》,它可以帮助你发现很多《C++ Primer》中没有注意到的细节。个人感觉,这三本搭配起来,学会C++基本没问题了。《More Effective C++》我没读过,所以不知道,喜欢的话不妨也读一下。


         甜点2、《STL源码剖析》,我觉得它真心不错,学会一个,到处都可以用。而且顺便学会了数据结构,何乐不为。


         甜点3、《Java编程思想》,也是鼎鼎大名,我不认为会C++了,Java还有什么难的,所以我读这本书的时候读的很快,只关注了几个新的知识点就完了。Java与之搭配的更多反而是设计模式与框架,所以我觉得,如果要品味Java,不如去品味一下设计模式和一些具体框架吧。


         甜点4、《RubyProgramming:向编程之父学程序设计》,说实在的,我一直没怎么关注Ruby,而看的相关的Ruby的书籍也就这本比较好了。如果想顺便学学Rails的话,可以顺便把《Web开发敏捷之道:应用Rails进行敏捷Web开发》给学了。


         甜点5、《重构 改善既有代码的设计》,最近发现ruby也有一本重构的书叫做《重构Ruby版》


         还有很多很多甜点,我就不多说了,这个就看个人喜好了。


泡菜:最后来一点刺激的味道


         韩国人喜欢吃泡菜,我其实也喜欢。最经常做的事情就是跑食堂给阿姨说“拿5毛钱泡菜”,5毛钱有半个碗那么多,每次都吃的很爽。所以我平时也经常买各种杂书看,有些不怎么样的,看两页就丢到冷宫去了,这边推荐一些感觉还可以的,泡菜就不具体介绍了,因为它很脆啊:


         泡菜1、《七周七语言》

         泡菜2、《Linux/Unix设计思想》

         泡菜3、《程序员修炼之道-从小工到专家》

         泡菜4、《捉虫日记》

         泡菜5、《架构之美》


实践出真知


       光练不说傻把式,光说不练假把式。平时看了那么多东西,到最后都是要落实到实践上面去,看了那么多,结果最后一个东西都做不出来,那看了也白看。今年的我感觉自己动手的机会少了,看了比较多,做的比较少。不过还好安心的就是,不至于光说不练,做东西也算比较顺利,还是比较满意的。


一些经验


         不知道还有没有人会看到这里,也不知道大家对我的菜谱怎么看待。最后我讲讲我平时的一些经验。请轻拍砖。

         我一般去这里找书:www.ppurl.com,不知道会不会因为我这个网站被封啊。但是我一般只在皮皮书屋找书,我都是看正版书的。

         多和别人扯技术问题:因为我觉得在给别人讲解的过程中,可以发现很多自己不懂的地方或者一知半解的地方,而更多时候讲着讲着,原先还一团浆糊的东西就突然懂了。所以大家不要闭门造车了,开源才是王道。

         不到实践,不看帖子。为什么?因为帖子的内容一般不如书籍逻辑清晰,更多是对具体某个细节问题的详细讨论,平时更多的是把握框架,而不是具体细节。只有到实践时,遇到问题了,这时候才会去找帖子看。

         看书要搭配着看,这也是我这篇文章的主要内容。千万别抱着1本书死啃,效率太低了。

         看书要先看主干,后看细节,在没有需要的内容情况下,果断放弃。这也是为什么我的冷宫那么庞大的原因,我只看那些我觉得好的书,而冷宫的书,我只是偶尔宠幸一下,因为指不定我当年眼花看错了呢,对吧。

         保证身体健康、精力充沛,这几个月我是尝到苦头了,一直生病。整个人学习效率很低。还是给革命留点本钱吧,免得先吧自己给革“命”了


结题


         这就是我的2012,一个普通的2012,一个充实的2012。虽然没有谈恋爱,没有被赏识,没有中彩票,不过我平安的读过了世界末日。我很开心,因为我很快乐。


原创粉丝点击