这里主要说一下自己看的书和一些心得体会,把自己的学习路线梳理一下,也是作为自己这段时间的学习总结。
因为从事的都是服务器端开发和学习,所以本文内容主要在该范围内,假定读者经过了系统的CS学习(DS、OS、组成原理等核心课程)。
First,我的学习书籍路线参考如下内容:
1 A:《Linux鸟哥私房菜》(第三版); 2 3 B:《Linux程序设计》(第四版 中文版); 4 5 C:《TCP/IP详解v1》(英文版); 6 7 D:C/C++语言相关; 8 9 E:《UNP v1》(第三版 中文版); 10 11 F:《APUE》(第三版 中文版),《UNP v2》(第二版 中文版);
这些书没有非常严格的先后次序,需要根据自己的功力和实际情况而定,比如说刚接触Linux不久就去看APUE,估计被虐的要哭啦;如果没有实际的操作环境或者应用环境,就去搞内核方面的书,那你基本上是浪费时间,等等,这都是我走过的一些弯路,浪费了很多宝贵时间,希望大家引以为戒,把时间用到刀刃上。
Second
下面分门别类的说说读这些书的心得体会:
(1)系统入门必备(《鸟哥私房菜》)
说实话,这是业内公认的绝对入门书籍,作者是台湾的;这本书基本上是他一步步学习和管理Linux系统的手册,所以这本书适合从无到有(基本对Linux零基础)的学习Linux系统(基于CentOS),基本算是手把手的教吧,个人认为它比较适合完全菜鸟级别的入门学习,或者入门级别的参考手册,比如Linux安装,配置等等一些最基本的Linux操作,当然也包括一些系统级别的介绍、工具的使用等等;另外,这本书是基于CentOS的,该系统主要是做服务器端操作系统用的。
优点:入门级别,门槛低; 缺点:作者稍啰嗦,内容多且点到为止;
我的用途:入门是大致看了一下重点章节,操作一些,后来就当配置参考手册、工具(awk,vim等)的快速参考资料
PS:该类别的其他菜鸟书籍没看过,不做评论
(2)编程入门(《Linux程序设计》)
这本书知名度并不高,写的也一般吧,Linux下的程序设计用到的方法、工具、函数等等都涉及到了,比《鸟哥私房菜》前进了一步;
这里的编程入门并不是学过数据结构和算法、会点编程语言就OK啦,而是Linux环境下的编程、调试,这本书基本涵盖了Linux程序设计(不止是服务器端编程)涉及到的大部分内容;大部分章节我都看过,后面的图形化那部分我没看。
同类别同层次的书我认为比较好的一本是《Unix-Linux编程实践教程》,这本书好像只有一版,讲的东西和上面的这本差不多,不过更多的是从系统的角度去看,所以涉及到了一些操作系统、组成原理方面的内容,并引领读者怎么一步步编写一些系统程序的实现,还算比较好懂;另外,这本书是很久之前写的(很多函数没有返回值),在调试的时候会遇到一些问题;这本书我也只是浏览了几章,没细看。
优点:开发方面的东西都涉及到了,也容易理解; 缺点:编程能力不会有太大提升,例子的实践价值不高。
PS:编程能力好一点的建议用《Linux程序设计》学习工作中会用到的基本技术,差一点的用《Unix-Linux编程实践教程》提高程序设计能力。
(3)协议(《TCP/IP详解》v1)
大神Stevens的六部大作之一;既然是服务器端编程,网络协议方面的东西还是要懂一点,主要是TCP、UDP、Http这三个协议吧,当然在校的最好把《TCP/IP详解》的第一卷给啃了,工作之余的学习就看对应的章节就可以啦(我是这么干的O(∩_∩)O哈!),其他的协议需要的时候再去搞就可以啦。有一点需要注意,这本书第一版出版非常早,但是重点的协议问题都讲的非常清楚,一般的开发问题足够了;11年好像出了第二版,但是据说修订版作者把经典给糟蹋啦。
读这本书可能需要一点点网络基础,如果感觉比较难懂的可以先学习一下《图解TCP/IP》,小日本写的,适合零基础了解,也不厚,三百页的样子,我从头到尾看了一遍。
优点:太多,大家知道的,用过的都说好 缺点:得有点英语基础,读起来比较费时;有些情况的讨论在今天已经无意义,新的问题可能没有相应的部分。
PS:内容多,深入浅出,需要自己把握重点;另外好像有本《Effective TCP/IP》,网上有人推荐,还没读过。
(4)C/C++(语言相关)
这部分是基本功,相关的帖子和书都比较多;
C语言基础:《The C Programming Language》
C++的基础书籍有两本:《C++ Primer》和《The C++ Programming Language》,业内公认;
更深入的就看你自己的功力和想法啦,个人没什么参考性;
PS:搞C++心有余而力不足,学了很久,但是准备放弃,因为我觉得更多精力应该放在系统业务逻辑、架构本身(服务器端的开发语言有很多,C、Go、python等等),而不是反复琢磨一门编程语言的模型和特性上;专心做一件事,如果工具本身特性我都很难搞定,我会选择更合适的工具,而不是反复练习这个工具的使用。
(5)网络编程(《Unix Network Programming v1》 3rd)
Stevens的六部大作之一,网络编程方面的常见问题这本书都讲到了,甚至网上讨论概念问题的时候,都是参考此书。重点是这本书的前三分之一,和后面的个别章节;第一遍没怎么看懂,硬着头皮看,现在我在看第二遍,细细琢磨之后豁然开朗的感觉,能够感觉到明显的提升,这feel倍爽。感觉这本书是这样的,第一遍可能带你入门,再细读第二遍甚至是第三遍就会提高很大,然后就可以成为案头必备啦。
优点:同(3) 缺点:没有具体应用场景,不知道怎么应用
PS:我是看的中文第三版,翻译的还行,具体参考亚马逊书评、豆瓣或者知乎评论。
(6)系统编程
《Advanced Programming in the UNIX Environment》 3rd
《Unix Network Programming v2》 2nd
《APUE》其实并不适合入门,比较适合初级到中级提升功力用的,所以如果没有一些基础,不要一开始就去啃这本书;有了基础之后去捡重点章节读一下,重中之重是文件IO、进程、信号,我也是捡重点的章节看看,涉及到不懂的再去看相应的章节。另外,《APUE》第二版据传翻译的比较烂,搞的大家都去看英文版,现在的第三版翻译的还不错,我是看的这版,没什么问题,建议看第三版中文。
《UNP v2》说的是各种IPC机制是怎么实现的,以及一些应用和常见问题,我看了一遍,但是后来基本上也忘了,只是需要的时候去看看。
优点:同(3); 缺点:门槛高
PS:今年新出的《Linux/Unix系统编程手册》,德国人写的,据说要超越《APUE》,网上没有完整中文电子版的,能找到的中文电子版我都看了,甚至浏览了下亚马逊买的纸质书,浏览了几章,后来又退了。该书基本上是完全面向Linux的,分了60多个章节,感觉应该属于是系统相关比较入门级别的书,适合基础不太好的童鞋;考虑到排版、纸质、写书风格问题(毕竟不想在两种风格之间转换),我最终选的Stevens的《APUE》,反正既然能看懂经典,还是去读经典吧。
Last
上面就是自己这一年左右看的书,都是我认为比较核心的书,读这些书自己能感觉到功力的明显提示,其他的零敲碎打的、读了也没感觉有啥提示的就没列出来。
另外,这些经典是用来阅读、品味和收藏的,尽量买正版吧,看着也舒服;
最后一句:一本经典读十遍,远比十本烂书读一遍强(这是我大学最痛的领悟),各位,且读且珍惜!