【盛世推荐】 Linux相关图书选购指南(转)[@more@]
转自兰大开源社区
工欲善其事,必先利其器。
掌握一门技术,兴趣是最好的老师,而书就可能是前进的导航灯。计算机图书的出版情况,从一个侧面能够反应一个国家的计算机发展水平。比如台湾,其资讯业比大陆发达的多,其计算机书籍也明显走在了大陆的前列;幸运的是最近几年大陆的计算机书籍的出版正迎头赶上。国外计算机和计算机图书的水平明显高于国内,很多出版社与国外著名的出版社合作,引进外文版的图书,例如中国电力出版社引进的Oreilly的图书,华中理工出版社引进的台湾候俊杰先生的图书,对于读者来说都是振奋人心的好消息。
而计算机图书出版的蓬勃发展也给读者带来另外一个问题:现在的计算机图书可以用浩如烟海来形容,在书店可谓是看花了眼,其质量肯定参差不齐,而且面对不菲的价格,该如何找到自己需要的书籍,如何有效地选择自己需要的书籍呢?读者选择书籍不免会碰到以下的问题:
1. 该选择哪个出版社?
国内计算机图书口碑比较好的几个出版社有:清华大学出版社、电子工业出版社、人民邮电出版社、机械工业出版社。清华大学出版社是老牌的计算机图书出版社,它是国内出版原著计算机图书最好的出版社,其出版的影音版的外文书籍也值得称道。机械工业出版社在我的印象中是从1997年开始大力出版计算机图书,现在已经取得了显著的成效,其属下的华章公司的网站 http://www.china-pub.com是读者选择图书的一个好去处。另外还有些出版社的图书也非常不错,例如前面提到的例如中国电力出版社引进的Oreilly的图书和华中理工引进的台湾候俊杰先生的图书,都是专业内的经典之作,出版社凭借这些图书在业界内也名声大振。如果单纯论出版书籍的种类和数量,北京希望电子出版社和水利水电出版社出版可以是说是大户,但是其质量实在不敢恭维(也许是我看到的书刚好如此,但是出版社的图书就是自己的商品,质量不好牌子就倒了)。
2. 选择中文版还是英文版
这个问题的答案很简单,如果有引进的英文版,读者的英文功底又足够的话,就不用考虑中文版了。这并非什么崇洋媚外,实在是一种无奈。计算机水平是英语语系的最高,其资料和文档大部分(大概70%)都是英文的,想在行业内立足和发展,就不可能避免英文的问题。而且国内出版的计算机图书,如果是原著,很多质量还是可以的;但是有些书籍的质量与国外著名出版社出版的图书还是有一定差距的。如果是译著,恐怕从事过相应工作的人都会明白,信、达、雅这三个字并非如此简单,真正能做到这三个字的译著恐怕凤毛麟角。而且加上引进、翻译、出版的各个环节,引进的图书恐怕要比原版图书滞后一年的时间。当然,在外文图书购书渠道不畅通、读者的经济承受能力和外文水平有限等情况下,原著、译著都是很好的选择。
3. 如何选择作者、译者
技术上的大牛未必能写出好书,但是好的作者肯定是技术的权威。就像W.Richard Stevens的一样,其三卷本的《TCP/IP详解》、两卷本的《UNIX网络编程》以及《UNIX环境高级编程》高级编程,全都是经典的传世之作。
译著的质量和原著的质量以及译者的水平都有很大的关系,蹩脚的译者翻译的书籍会增加阅读的难度,甚至曲解原著的意思。台湾候俊杰先生( http://www.csdn.net/expert/jjhou/有介绍)就是非常一位非常著名的译者,大陆尤晋元的Unix方面的图书、潘爱民的Com理论方面的图书也都是上上之选。
作者和译者的选择,只能靠平时的经验积累和别人的推荐了。
4. 其他相关内容
书籍的读者适用对象。每本书籍都有自己特定的读者对象,读者应该根据自己的实际情况适当地选择需要的图书。就像是清华大学出版社出版的谭浩强编写的《C语言程序设计》一书,照样有人说它是垃圾。是的,对于那些对于C语言了若指掌的那些人来说,该书就可以当成垃圾扔到一边了;但是对于新手学习C语言来说,这本书堪称是相当经典的教材了。
书籍的厚薄。书是越厚越好么?有些读者会以为书越厚内容可能就越充实,书也就越权威;事实不尽其然。能深入者才能浅出,真正好的书籍并不需要大块头来装点自己的门面,能用简单通俗的语言深入浅出的把道理说明白,才是上选。动辄上千页的书,多久能看完都是个问题,这种书只适合作为技术手册,需要的时候搬来查一查。当然,要把内容详实地介绍清楚,还是需要一定的篇幅的。
书籍的版次。从某种意义上来说,一本书的再版次数就反应了该书受欢迎的程度;至少也是再版修订过原来的错误了。计算机技术的发展可以用日新月异来形容,除了一些经典的介绍理论或基础的教材,读者应该尽量选购新版的书籍。
书籍的多寡。并非手里面的书籍越多越好,这可能是读者的一个误区。就某一个专题来来说,可能有很多书都在讲解,但是在某一个阶段,适用于你的书有一本就足够了。在选书的时候就应该自习选择,拿到书后应该融会贯通;自己水平提高了,就可以换层次更高的书来看。不要妄想一本书里面会介绍所有的内容,这样的所谓大全只能是蜻蜓点水,让你全都一知半解。
下面我们就Linux方面的图书做一个简单的介绍,希望能对读者选购图书有所帮助。(由于书籍实在太多,很多笔者也没看过,其内容和质量不敢妄加评论。) Linux从严格的技术定义讲,Linux指的是开放源代码的Unix类操作系统的内核。然而,目前大多数人用它来表示以Linux内核为基础的整个操作系统。Linux是一个自由的、开放的操作系统,其软件的发布和使用遵循GPL,现在在服务器、嵌入式应用等方面有突出的表现。Linux本身和Unix有千丝万缕的联系,其原理、应用有很多相通之处,因此可以触类旁通。
1. 系统安装和使用
在早期众多的Linux发行版本中,最有影响的要数Slackware。当时它是最容易安装的Linux发行版本,在推广Linux的应用中,起了很大的作用。Linux文档项目(LDP)就是围绕Slackware发布写成的。目前,Red Hat发行版本的安装更容易,应用软件更多,已成为最流行的Linux发行版本;而Caldera则致力于Linux的商业应用,它的发展速度也很快。国内中文的发行版本有TurboLinux、红旗(RedFlag)Linux、蓝点(BluePoint)Linux、HappyLinux以及Xlinux。每种发行版本有各自的优点和弱点,但它们使用的内核和开发工具则是一致的,因此书籍的内容大部分也是相通的,读者在选购图书入门级的图书是没有必要限定于哪个发行版本。
对于初学者我给大家推荐中国电力出版社2000年3月出版出版的《Linux权威指南》(第三版),原书由O'Reilly 出版,Matt Welsh,Matthias Kalle Dalheimer,Lar Kaufman著,洪峰译。该书内容设计系统安装,常用命令,系统管理,文件系统管理,Xwindow的定制和使用以及部分网络的内容,比较适合初学者使用。另外给大家介绍一本适合初学者使用的书,中国青年出版社引进的《精通Linux入门、管理与应用》(位元文化编著,台湾文魁资讯股份有限公司出版),这个书虽然块头很大(680页),但是排版比较松,内容深入浅出,比较适合我这样的懒人看。
Linux上目前流行的两种GUI(图形用户界面)是KDE和GNOME,分别给大家推荐《实用KDE教程》(作者: Dennis E.Powell,译者: 张辉清华大学出版社,2000-11-1)和《轻松学用GNOME》(作者: David D.Busch,译者: 徐晓青 王江红 阎慧娟,电子工业出版社,2000-11-1)。这两本书分别介绍了KDE和GNOME的安装、使用,适合初学者使用。
实际上Linux系统中的图形花引用软件并不比Windows逊色,比如GIMP(推荐书籍:《GIMP权威指南》,作者: Olof S.Kylander Karin Kylander,译者: 唐新桂 罗阿理 侯增广 冯兴元,机械工业出版社,2000-10-1)就可以和Photoshop抗衡;StarOffice是Linux系统中可以与Windows系统中的Office相媲美的软件,可惜国内市场上介绍StarOffice的书籍似乎没有。
Linux上相当重要的一个部分就是网络,如果脱离开网络,其价值就大为降低了,以上书籍中对网络都有简单介绍,我们将在后面给出更详尽的书目进行介绍。
2. 系统管理和网络应用
前面我们已经说过,Linux最主要的一个应用就是服务器,其稳定的性能、强大的网络功能深得用户的青睐。此处为大家推荐《GNU/Linux高级网络应用服务指南》(作者: LinuxAid网站,机械工业出版社,2001-1-1)。该书由国内非常出名的Linux的网站LinuxAid( http://www.linuxaid.com.cn)组织编写,参加编写的作者全部都是经验丰富的工程师,该书内容广泛,涉及到系统的安全优化策略、TCP/IP网络管理、Apache Web服务器、FTP服务器、邮件服务器、域名服务器、代理服务器、防火墙、路由器、拨号服务器、文件服务器、新闻组服务器、DHCP服务器、LDAP服务器、群集服务器、BBS、CVS以及系统安全软件的介绍。本书既适用于初级用户,也适用于高级用户。另外一本适用于中、高级用户的书是《Red Hat Linux系统管理员手册》(Mohammed J.Kabir著,魏永明、郑翔、孙登峰译,电子工业出版社,2000-7)。对于Solaris,推荐机械工业出版社的《Solaris系统管理员指南》(Janice Winsor著,王无敌等译,机械工业出版社,2000-1)和《Solaris高级系统管理员指南》(Janice Winsor著,王无敌等译,机械工业出版社,2000-2)。
Linux上面的很多服务应用功能相当强大,种类繁多。看看《GNU/Linux高级网络应用服务指南》的目录就可以初见端倪了,但是这些服务的配置和使用并非一蹴而就,每个专题都会有大块头的书籍来介绍,高级用户应该转而看这些书了,以下我们就个别方面介绍一些比较好的书籍。
Apache的功能相当强大,几乎是目前应用最广泛的Web服务器。与之相关的优秀的出版物也有不少,例如《Professional Apache》(Peter Wainwright著,Wrox Press Inc,1999-9)、《Linux Apache Web Server Administration (Linux Library)》(Charles Aulds著,Sybex,2000-9)等,国内市场能够见到一本好书的是《The Definitive Guide》(Ben Laurie、Peter Laurie著,O'Reilly,1999-2,中国电力出版影印,中文名《Apache 权威指南(第二版)》)。该书除了介绍Apache的安装、配置、使用之外,还介绍了Apache的一些API,以及如何编写Apache的模块(module),对系统管理员和编程人员都很有帮助。中文介绍Apache的图书给大家推荐《Apache Server实用全书》(英文原书名: Apache Server Unleashed ,作者: Rich Bowen Ken Coar 等,译者: 罗四维 等,电子工业出版社,出版日期: 2001-2-1)。
Internet上每个进行通信的主机都要有自己的IP,但是人们更经常的是使用域名来访问主机,于是DNS就应运而生,实现IP地址和域名的转换。随着Internet的飞速膨胀,靠一台服务器来维护域名信息已经不可能,现在所依赖的BIND就是一种分布式数据库,它允许网络大规模无限制地增长下去。介绍DNS比较经典的书有《Linux DNS Server Administration (Craig Hunt Linux Library)》(Craig Hunt著,Sybex,2000-1)和《DNS and BIND (4th Edition)》(Paul Albitz、Cricket Liu著,O'Reilly,2001-4);后者的第三版中国电力出版社已经引进,中文名为《DNS与BIND》(雷迎春、陈世林、杨传军译,2000-11)。
Linux中的邮件服务器采用的最多的是Sendmail,经典著作有《Linux Sendmail Administration (Craig Hunt Linux Library)》(Craig Hunt著,Sybex,2001-2)和《Sendmail》(Bryan Costales,Eric Allman著,O'Reilly,1997-1)。前者详尽地介绍了Sendmail的原理、安装、配置及安全性问题;后者的作者Eric Allman就是Sendmail的开发人员,中国电力出版社已经出版了该书的影印版,中文名为《sendmail》第二版(2000-5),上下两卷。
Linux使用Samba和Windows之间实现共享访问,解释Samba比较好的书有《Using Samba》(Robert Eckstein,David Collier-Brown著,O'Reilly,1999-9)和《Linux Samba Server Administration》(Roderick W. Smith著,Sybex,2000-9)。二者都详细介绍了Samba的安装、配置、使用及安全性和备份、恢复的内容,前者已经被Samba小组正式采用,中国电力出版社已经引进并翻译出版了该书,中文名为《实战Samba》(薛彬等译,2001-1)。
其他方面也都有专门的专著进行介绍,比如介绍NFS的《Managing NFS and NIS, 2nd Edition》(Hal Stern, Mike Eisler, Ricardo Labiaga著,O'Reilly,2001-7)和《Linux NFS and Automounter Administration》(Erez Zadok著,Sybex,2001-5),介绍SSH的《SSH, the Secure Shell : The Definitive Guide》(Daniel J. Barrett, Richard Silverman,O'Reilly,2001-2)等都是相当不错的书,读者可以根据需要自行选择。
3. 编程及开发应用
Linux的内核主要使用C语言编写而成,少量地使用了汇编语言,其编译器采用gcc。因此C语言是Linux系统中相当重要的编程语言。都Linux编程很陌生的读者可以翻阅以下《GNU/Linux编程指南》(K.Wall M.Watson M.Whitis著,王勇、王一川、林花军、甘泉译,清华大学出版社,2000-6),该书对编程工具(GNU C、GNU Makefile、Autoconf、RCVS、Emacs)、系统编程(I/O操作、文件操作、进程、线程、内存管理)、进程间通信和网络编程(管道、消息队列、共享内存、信号灯、Socket、设备驱动程序)、用户界面编程(ncurses、Xlib、Motif、GTK、Qt、Java、OpenCL)、Shell编程及GDB调试工具都有简要的介绍,是了解Linux编程环境的一本好书,但是这本书的确是一本指南,每种技术都浅尝辄止,希望深入学习该技术的读者需要选择适当的书籍来学习。
Linux中最基本的编程是Shell编程,推荐《LINUX与UNIX Shell编程指南》(David Tansley蓍,张春萌等译,机械工业出版社,2000-6),该书详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。
系统编程推荐《UNIX环境高级编程》(W.Richard Stevens,尤晋元等译,机械工业出版社,2000-2),就是著名的APUE。本书对I/O、进程、信号、进程间通讯的介绍都相当深入,一直以来被誉为UNIX编程的"圣经",同样适用于Linux,翻译质量也属上乘。
网络编程推荐W.Richard Stevens的另外一套书:《UNIX网络编程》(清华大学出版社引进),大师的经典之作,赞美之词溢于言表。读者也可以参看国内出版的《Linux网络编程》(李卓桓等著,机械工业出版社,2000-1)。要想详细了解网络底层的知识,请看W.Richard Stevens的《TCP/IP详解》(三卷本,机械工业出版社)和DOUGLAS E.COMER的《用TCP/IP进行网际互连》(三卷本,电子工业出版社),这绝对是网络参考书中的经典。
用户界面方面的编程工具比较多,ncurses是在终端下开发图形界面的有力工具;Xlib是构建Xwindow的基础,著名的KDE和GNOME分别就是使用QT和GTK开发的。这方面国内出版的书籍比较少,知道的有《Linux应用程序开发指南:使用Gtk+/Gnome库》(许宏松等著,机械工业出版社,2000-7)和《GNOME/GTK+编程宝典》(Arthur Griffith著,吴向峰、王景中、江继军等译,电子工业出版社,2000-12)。讲解QT的书有《Programming With Qt》(Matthias Kalle Dalheimer著,O'Reilly,1999-5),国内人民邮电出版社最近出版了一本《24小时精通QT编程》。
目前Linux广泛使用的编程工具还有Perl、PHP等。Perl是一种解释性语言,从某种程度上来说可以替代CGI,比较好的书有《Programming Perl》(Larry Wall, Tom Christiansen, Jon Orwant著,O'Reilly,2000.1)、《Learning Perl》(Randal L. Schwartz, Tom Phoenix著,O'Reilly,2001.7),目前这两本书都已经出版到第三版,中国电力出版社已经引进翻译了后者,中文名为《Perl教程》(张大江译,2000-6)。PHP与Apache结合,在Web应用方面表现了巨大的潜力,推荐两本适合中、高级读者使用的书:《PHP 4.0 Web开发技术指南》(Tobias Ratschiller Till Gerken著,陈军、龙浩、李向荣译,机械工业出版社,2001-1)和《PHP4.x企业级Web应用与开发》(廖若雪等著,机械工业出版社,2001-4)。
经验丰富的程序员都会知道源代码版本控制的重要性,Linux使用CVS来解决版本控制的问题。《CVS 开源软件开发技术》(Karl Fogel著,肖虎勤、陈军等译,机械工业出版社,2001-6)详细介绍CVS 的发展历史、基本概念、高级应用等内容。
Linux对数据库应用的支持并不比Windows逊色,全部支持MySQL、Oracle、Informix、Sybase、DB2、Progress。《Linux环境数据库管理员指南》(David Egan著,钟鸣、田晓涛译,机械工业出版社,2001-1)全面地介绍了各种数据库在Linux下的安装、配置以及简单应用,这是唯一一本全面介绍Linux下数据库应用的书;可以想象的是,一本书里面全方位地介绍这么多数据库的内容,对数据库本身的知识介绍肯定不够,专著于数据库开发的读者需要结合所使用的数据库选择适当的图书,例如介绍MySQL的《MySQL网络数据库指南》(Paul DuBois著,田晓涛等译,机械工业出版社,2000-6)。
如果读者希望了解内核的构造,不免会涉及的内核模块编程的问题,LKMPG(Linux Kernel Module Programming Guide)是LDP项目之一,一份比较权威的文档,其中译版收录在《Linux编程白皮书》(朱珂等译,机械工业出版社,2000-4)一书中,可惜的是原来是针对2.0.*版本的内核编写的,后来对2.2.*版本的内核进行了扩充,但是现在2.4.*版本的内核有和很大的改进,希望作者能早日更新本文档。
在介绍了这么多编程系列的图书之后,最后再给大家推荐两本:《Beginning Linux Programming》(Neil Matthew, Richard Stones著,Wrox Press Inc,1999-9)和《Linux程序设计权威指南》(于明俭、陈向阳、方汉著,机械工业出版社,2001-4)。前者浙江大学曾组织影印过一批,从内容和涉及深度来讲,这本书可以看做是APUE的"入门"级版本,APUE虽然是学习Unix编程的经典,但对于初学者来说,显得太深,啃起来比较吃力,在这种情况下,BLP一书就很有阅读价值了。这本书从Linux编程的基本概念讲起, 覆盖了Shell编程、文件、环境、终端控制、Curses、进程与线程、管道、SystemV IPC、socket、Tcl/Tk、gtk+、Perl、HTML/CGI、设备驱动程序等Linux编程中常用的内容, 并介绍了make、版本控制等常用工具和Linux下C程序的调试技术。如果读者具有一般的C编程经验, 但以前没写过Linux程序,那么这本书可以帮助你很快迈入Linux编程的门坎。同时, 由于书中大多数章节内容严格遵循POSIX、XPG4I3(Unix98)、SVID等业界标准,因此也适合于学习一般的Unix编程。《Linux程序设计权威指南》的第一作者于明俭是chinput的作者,对Linux的国际化、本地化和中文化有很深入的研究,因此本书的第六章"国际化和中文化编程"应该是相当权威的。
4. 操作系统原理
其实选择操作系统原理的书很简单,认一个人的名字就够了,Andrew S.Tanenbaum,他的《操作系统:设计与实现(第二版)》(两卷本,王鹏、尤晋元、朱鹏、敖青云译,电子工业出版社,2001-4)、《现代操作系统》(陈向群译,机械工业出版社,1999-10)、《分布式操作系统》(陆丽娜、伍卫国、刘隆国等译,电子工业出版社,1999-12)全都是经典之作,此处就不再介绍了。
5. 内核和源代码分析
首先介绍的一本应该是《莱昂氏UNIX源代码分析》(John Lions著,尤晋元译,机械工业出版社,2000-9)。该书上篇为UNIX V6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。该书从1976年开始一直就是黑客内部流传的一部经典教材,直到1996年才得以正式出版。虽然内容很多涉及PDP11的内容,相应的汇编指令没有相应的基础很难看懂,但是本书的内容、思想永远都值得购买、学习。作者除了对源代码进行注释、分析之外,还提出了很多改进意见,china-pub把本书誉为旷世奇书实不过分。
对于Linux,国内出版了几本不错的书,其中最好的应该是陈莉君编著的《Linux操作系统内核分析》(人民邮电出版社,2000-8),该书对Linux内核进行了较全面的分析,既包括了对进程调度、内存管理、进程间通信、虚拟文件系统、设备驱动程序及网络子系统的分析,也包括对Linux整体结构的把握、Linux启动过程的剖析以及Linux独具特色的模块机制的分析与应用等。该书在台湾业界都广泛流传着复印或影印的版本;不足之处是内容深度不够,对SMP(对称多处理)等都没有介绍。
译著里面值得一提的是机械工业出版社出版引进出版的姊妹篇:《Linux内核源代码分析》(Scott Maxwell著,冯锐、刑飞、刘隆国、陆丽娜译,2000-6)和《Linux IP协议栈源代码分析》(Stephen T.Satchell、H.B.J Clifford著,刘隆国、翟刚、陆丽娜、辛炜译,2000-11)。前者针对当时最新的内核(2.2.5),分析了系统初始化、系统调用、信号、中断和时间、进程和线程、内存、System V IPC、对称多处理等方面的内容。后者则是针对当时广泛被采用的2.0.34的内核的网络部分进行分析,较全面地介绍了ISO网络模型、API 、IP、ICMP以及ICP 等核心网络实现,对它们的代码进行了详尽的分析。但是在新版本的内核中(2.4.*)网络部分已经进行了相当大的改动,作者的第二版就是针对2.4.*版本的内核进行分析的。
今年有一件令Linux的技术爱好者振奋人心的事情,就是《Understanding the LINUX Kernel: From I/O Ports to Process Management》(Daniel Pierre Bovet, Marco Cesati著,O'Reilly,2000-9)一书的出版,该书是迄今为止分析Linux内核最好的一本书;Solaris也出版了一本经典之作《Solaris Internals: Core Kernel Architecture》(Jim Mauro, Richard McDougall著,Prentice Hall PTR,2000-10)。这两本书已经分别由中国电力出版社和机械工业出版社引进,近期都会出版中译版。
有关内核,网上公开的一份相当好的文档是LKI(Linux Kernel Internals),可惜的是还没有完成。另外有一本《Linux设备驱动程序》(Alessandro Ruibini著,LISOLEG译,中国电力出版社,2000-4)详细地介绍了Linux下开发设备驱动程序所涉及的内容,包括建立驱动程序并装载模块、完善字符设备、块设备和网络设备驱动程序、调试驱动程序、计时、内存管理和DMA、中断、可移植性事项、外部设备互连(PCI)、内核内幕的导览,是这方面不可多得的好书。可惜的是写第一版当时所采用的内核开发版本才到2.1.43,现在的2.4.*已经有了很大的改进,O'Reilly已经在今年6月份出版了本书的第二版,内容已经包含了2.4.*的改进,据说中国电力出版社已经引进了该书。
还有很多优秀的图书,笔者可能不了解详情,不能一一列出;但愿这份简要的介绍能给读者选购图书提供帮助。
工欲善其事,必先利其器。
掌握一门技术,兴趣是最好的老师,而书就可能是前进的导航灯。计算机图书的出版情况,从一个侧面能够反应一个国家的计算机发展水平。比如台湾,其资讯业比大陆发达的多,其计算机书籍也明显走在了大陆的前列;幸运的是最近几年大陆的计算机书籍的出版正迎头赶上。国外计算机和计算机图书的水平明显高于国内,很多出版社与国外著名的出版社合作,引进外文版的图书,例如中国电力出版社引进的Oreilly的图书,华中理工出版社引进的台湾候俊杰先生的图书,对于读者来说都是振奋人心的好消息。
而计算机图书出版的蓬勃发展也给读者带来另外一个问题:现在的计算机图书可以用浩如烟海来形容,在书店可谓是看花了眼,其质量肯定参差不齐,而且面对不菲的价格,该如何找到自己需要的书籍,如何有效地选择自己需要的书籍呢?读者选择书籍不免会碰到以下的问题:
1. 该选择哪个出版社?
国内计算机图书口碑比较好的几个出版社有:清华大学出版社、电子工业出版社、人民邮电出版社、机械工业出版社。清华大学出版社是老牌的计算机图书出版社,它是国内出版原著计算机图书最好的出版社,其出版的影音版的外文书籍也值得称道。机械工业出版社在我的印象中是从1997年开始大力出版计算机图书,现在已经取得了显著的成效,其属下的华章公司的网站 http://www.china-pub.com是读者选择图书的一个好去处。另外还有些出版社的图书也非常不错,例如前面提到的例如中国电力出版社引进的Oreilly的图书和华中理工引进的台湾候俊杰先生的图书,都是专业内的经典之作,出版社凭借这些图书在业界内也名声大振。如果单纯论出版书籍的种类和数量,北京希望电子出版社和水利水电出版社出版可以是说是大户,但是其质量实在不敢恭维(也许是我看到的书刚好如此,但是出版社的图书就是自己的商品,质量不好牌子就倒了)。
2. 选择中文版还是英文版
这个问题的答案很简单,如果有引进的英文版,读者的英文功底又足够的话,就不用考虑中文版了。这并非什么崇洋媚外,实在是一种无奈。计算机水平是英语语系的最高,其资料和文档大部分(大概70%)都是英文的,想在行业内立足和发展,就不可能避免英文的问题。而且国内出版的计算机图书,如果是原著,很多质量还是可以的;但是有些书籍的质量与国外著名出版社出版的图书还是有一定差距的。如果是译著,恐怕从事过相应工作的人都会明白,信、达、雅这三个字并非如此简单,真正能做到这三个字的译著恐怕凤毛麟角。而且加上引进、翻译、出版的各个环节,引进的图书恐怕要比原版图书滞后一年的时间。当然,在外文图书购书渠道不畅通、读者的经济承受能力和外文水平有限等情况下,原著、译著都是很好的选择。
3. 如何选择作者、译者
技术上的大牛未必能写出好书,但是好的作者肯定是技术的权威。就像W.Richard Stevens的一样,其三卷本的《TCP/IP详解》、两卷本的《UNIX网络编程》以及《UNIX环境高级编程》高级编程,全都是经典的传世之作。
译著的质量和原著的质量以及译者的水平都有很大的关系,蹩脚的译者翻译的书籍会增加阅读的难度,甚至曲解原著的意思。台湾候俊杰先生( http://www.csdn.net/expert/jjhou/有介绍)就是非常一位非常著名的译者,大陆尤晋元的Unix方面的图书、潘爱民的Com理论方面的图书也都是上上之选。
作者和译者的选择,只能靠平时的经验积累和别人的推荐了。
4. 其他相关内容
书籍的读者适用对象。每本书籍都有自己特定的读者对象,读者应该根据自己的实际情况适当地选择需要的图书。就像是清华大学出版社出版的谭浩强编写的《C语言程序设计》一书,照样有人说它是垃圾。是的,对于那些对于C语言了若指掌的那些人来说,该书就可以当成垃圾扔到一边了;但是对于新手学习C语言来说,这本书堪称是相当经典的教材了。
书籍的厚薄。书是越厚越好么?有些读者会以为书越厚内容可能就越充实,书也就越权威;事实不尽其然。能深入者才能浅出,真正好的书籍并不需要大块头来装点自己的门面,能用简单通俗的语言深入浅出的把道理说明白,才是上选。动辄上千页的书,多久能看完都是个问题,这种书只适合作为技术手册,需要的时候搬来查一查。当然,要把内容详实地介绍清楚,还是需要一定的篇幅的。
书籍的版次。从某种意义上来说,一本书的再版次数就反应了该书受欢迎的程度;至少也是再版修订过原来的错误了。计算机技术的发展可以用日新月异来形容,除了一些经典的介绍理论或基础的教材,读者应该尽量选购新版的书籍。
书籍的多寡。并非手里面的书籍越多越好,这可能是读者的一个误区。就某一个专题来来说,可能有很多书都在讲解,但是在某一个阶段,适用于你的书有一本就足够了。在选书的时候就应该自习选择,拿到书后应该融会贯通;自己水平提高了,就可以换层次更高的书来看。不要妄想一本书里面会介绍所有的内容,这样的所谓大全只能是蜻蜓点水,让你全都一知半解。
下面我们就Linux方面的图书做一个简单的介绍,希望能对读者选购图书有所帮助。(由于书籍实在太多,很多笔者也没看过,其内容和质量不敢妄加评论。) Linux从严格的技术定义讲,Linux指的是开放源代码的Unix类操作系统的内核。然而,目前大多数人用它来表示以Linux内核为基础的整个操作系统。Linux是一个自由的、开放的操作系统,其软件的发布和使用遵循GPL,现在在服务器、嵌入式应用等方面有突出的表现。Linux本身和Unix有千丝万缕的联系,其原理、应用有很多相通之处,因此可以触类旁通。
1. 系统安装和使用
在早期众多的Linux发行版本中,最有影响的要数Slackware。当时它是最容易安装的Linux发行版本,在推广Linux的应用中,起了很大的作用。Linux文档项目(LDP)就是围绕Slackware发布写成的。目前,Red Hat发行版本的安装更容易,应用软件更多,已成为最流行的Linux发行版本;而Caldera则致力于Linux的商业应用,它的发展速度也很快。国内中文的发行版本有TurboLinux、红旗(RedFlag)Linux、蓝点(BluePoint)Linux、HappyLinux以及Xlinux。每种发行版本有各自的优点和弱点,但它们使用的内核和开发工具则是一致的,因此书籍的内容大部分也是相通的,读者在选购图书入门级的图书是没有必要限定于哪个发行版本。
对于初学者我给大家推荐中国电力出版社2000年3月出版出版的《Linux权威指南》(第三版),原书由O'Reilly 出版,Matt Welsh,Matthias Kalle Dalheimer,Lar Kaufman著,洪峰译。该书内容设计系统安装,常用命令,系统管理,文件系统管理,Xwindow的定制和使用以及部分网络的内容,比较适合初学者使用。另外给大家介绍一本适合初学者使用的书,中国青年出版社引进的《精通Linux入门、管理与应用》(位元文化编著,台湾文魁资讯股份有限公司出版),这个书虽然块头很大(680页),但是排版比较松,内容深入浅出,比较适合我这样的懒人看。
Linux上目前流行的两种GUI(图形用户界面)是KDE和GNOME,分别给大家推荐《实用KDE教程》(作者: Dennis E.Powell,译者: 张辉清华大学出版社,2000-11-1)和《轻松学用GNOME》(作者: David D.Busch,译者: 徐晓青 王江红 阎慧娟,电子工业出版社,2000-11-1)。这两本书分别介绍了KDE和GNOME的安装、使用,适合初学者使用。
实际上Linux系统中的图形花引用软件并不比Windows逊色,比如GIMP(推荐书籍:《GIMP权威指南》,作者: Olof S.Kylander Karin Kylander,译者: 唐新桂 罗阿理 侯增广 冯兴元,机械工业出版社,2000-10-1)就可以和Photoshop抗衡;StarOffice是Linux系统中可以与Windows系统中的Office相媲美的软件,可惜国内市场上介绍StarOffice的书籍似乎没有。
Linux上相当重要的一个部分就是网络,如果脱离开网络,其价值就大为降低了,以上书籍中对网络都有简单介绍,我们将在后面给出更详尽的书目进行介绍。
2. 系统管理和网络应用
前面我们已经说过,Linux最主要的一个应用就是服务器,其稳定的性能、强大的网络功能深得用户的青睐。此处为大家推荐《GNU/Linux高级网络应用服务指南》(作者: LinuxAid网站,机械工业出版社,2001-1-1)。该书由国内非常出名的Linux的网站LinuxAid( http://www.linuxaid.com.cn)组织编写,参加编写的作者全部都是经验丰富的工程师,该书内容广泛,涉及到系统的安全优化策略、TCP/IP网络管理、Apache Web服务器、FTP服务器、邮件服务器、域名服务器、代理服务器、防火墙、路由器、拨号服务器、文件服务器、新闻组服务器、DHCP服务器、LDAP服务器、群集服务器、BBS、CVS以及系统安全软件的介绍。本书既适用于初级用户,也适用于高级用户。另外一本适用于中、高级用户的书是《Red Hat Linux系统管理员手册》(Mohammed J.Kabir著,魏永明、郑翔、孙登峰译,电子工业出版社,2000-7)。对于Solaris,推荐机械工业出版社的《Solaris系统管理员指南》(Janice Winsor著,王无敌等译,机械工业出版社,2000-1)和《Solaris高级系统管理员指南》(Janice Winsor著,王无敌等译,机械工业出版社,2000-2)。
Linux上面的很多服务应用功能相当强大,种类繁多。看看《GNU/Linux高级网络应用服务指南》的目录就可以初见端倪了,但是这些服务的配置和使用并非一蹴而就,每个专题都会有大块头的书籍来介绍,高级用户应该转而看这些书了,以下我们就个别方面介绍一些比较好的书籍。
Apache的功能相当强大,几乎是目前应用最广泛的Web服务器。与之相关的优秀的出版物也有不少,例如《Professional Apache》(Peter Wainwright著,Wrox Press Inc,1999-9)、《Linux Apache Web Server Administration (Linux Library)》(Charles Aulds著,Sybex,2000-9)等,国内市场能够见到一本好书的是《The Definitive Guide》(Ben Laurie、Peter Laurie著,O'Reilly,1999-2,中国电力出版影印,中文名《Apache 权威指南(第二版)》)。该书除了介绍Apache的安装、配置、使用之外,还介绍了Apache的一些API,以及如何编写Apache的模块(module),对系统管理员和编程人员都很有帮助。中文介绍Apache的图书给大家推荐《Apache Server实用全书》(英文原书名: Apache Server Unleashed ,作者: Rich Bowen Ken Coar 等,译者: 罗四维 等,电子工业出版社,出版日期: 2001-2-1)。
Internet上每个进行通信的主机都要有自己的IP,但是人们更经常的是使用域名来访问主机,于是DNS就应运而生,实现IP地址和域名的转换。随着Internet的飞速膨胀,靠一台服务器来维护域名信息已经不可能,现在所依赖的BIND就是一种分布式数据库,它允许网络大规模无限制地增长下去。介绍DNS比较经典的书有《Linux DNS Server Administration (Craig Hunt Linux Library)》(Craig Hunt著,Sybex,2000-1)和《DNS and BIND (4th Edition)》(Paul Albitz、Cricket Liu著,O'Reilly,2001-4);后者的第三版中国电力出版社已经引进,中文名为《DNS与BIND》(雷迎春、陈世林、杨传军译,2000-11)。
Linux中的邮件服务器采用的最多的是Sendmail,经典著作有《Linux Sendmail Administration (Craig Hunt Linux Library)》(Craig Hunt著,Sybex,2001-2)和《Sendmail》(Bryan Costales,Eric Allman著,O'Reilly,1997-1)。前者详尽地介绍了Sendmail的原理、安装、配置及安全性问题;后者的作者Eric Allman就是Sendmail的开发人员,中国电力出版社已经出版了该书的影印版,中文名为《sendmail》第二版(2000-5),上下两卷。
Linux使用Samba和Windows之间实现共享访问,解释Samba比较好的书有《Using Samba》(Robert Eckstein,David Collier-Brown著,O'Reilly,1999-9)和《Linux Samba Server Administration》(Roderick W. Smith著,Sybex,2000-9)。二者都详细介绍了Samba的安装、配置、使用及安全性和备份、恢复的内容,前者已经被Samba小组正式采用,中国电力出版社已经引进并翻译出版了该书,中文名为《实战Samba》(薛彬等译,2001-1)。
其他方面也都有专门的专著进行介绍,比如介绍NFS的《Managing NFS and NIS, 2nd Edition》(Hal Stern, Mike Eisler, Ricardo Labiaga著,O'Reilly,2001-7)和《Linux NFS and Automounter Administration》(Erez Zadok著,Sybex,2001-5),介绍SSH的《SSH, the Secure Shell : The Definitive Guide》(Daniel J. Barrett, Richard Silverman,O'Reilly,2001-2)等都是相当不错的书,读者可以根据需要自行选择。
3. 编程及开发应用
Linux的内核主要使用C语言编写而成,少量地使用了汇编语言,其编译器采用gcc。因此C语言是Linux系统中相当重要的编程语言。都Linux编程很陌生的读者可以翻阅以下《GNU/Linux编程指南》(K.Wall M.Watson M.Whitis著,王勇、王一川、林花军、甘泉译,清华大学出版社,2000-6),该书对编程工具(GNU C、GNU Makefile、Autoconf、RCVS、Emacs)、系统编程(I/O操作、文件操作、进程、线程、内存管理)、进程间通信和网络编程(管道、消息队列、共享内存、信号灯、Socket、设备驱动程序)、用户界面编程(ncurses、Xlib、Motif、GTK、Qt、Java、OpenCL)、Shell编程及GDB调试工具都有简要的介绍,是了解Linux编程环境的一本好书,但是这本书的确是一本指南,每种技术都浅尝辄止,希望深入学习该技术的读者需要选择适当的书籍来学习。
Linux中最基本的编程是Shell编程,推荐《LINUX与UNIX Shell编程指南》(David Tansley蓍,张春萌等译,机械工业出版社,2000-6),该书详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。
系统编程推荐《UNIX环境高级编程》(W.Richard Stevens,尤晋元等译,机械工业出版社,2000-2),就是著名的APUE。本书对I/O、进程、信号、进程间通讯的介绍都相当深入,一直以来被誉为UNIX编程的"圣经",同样适用于Linux,翻译质量也属上乘。
网络编程推荐W.Richard Stevens的另外一套书:《UNIX网络编程》(清华大学出版社引进),大师的经典之作,赞美之词溢于言表。读者也可以参看国内出版的《Linux网络编程》(李卓桓等著,机械工业出版社,2000-1)。要想详细了解网络底层的知识,请看W.Richard Stevens的《TCP/IP详解》(三卷本,机械工业出版社)和DOUGLAS E.COMER的《用TCP/IP进行网际互连》(三卷本,电子工业出版社),这绝对是网络参考书中的经典。
用户界面方面的编程工具比较多,ncurses是在终端下开发图形界面的有力工具;Xlib是构建Xwindow的基础,著名的KDE和GNOME分别就是使用QT和GTK开发的。这方面国内出版的书籍比较少,知道的有《Linux应用程序开发指南:使用Gtk+/Gnome库》(许宏松等著,机械工业出版社,2000-7)和《GNOME/GTK+编程宝典》(Arthur Griffith著,吴向峰、王景中、江继军等译,电子工业出版社,2000-12)。讲解QT的书有《Programming With Qt》(Matthias Kalle Dalheimer著,O'Reilly,1999-5),国内人民邮电出版社最近出版了一本《24小时精通QT编程》。
目前Linux广泛使用的编程工具还有Perl、PHP等。Perl是一种解释性语言,从某种程度上来说可以替代CGI,比较好的书有《Programming Perl》(Larry Wall, Tom Christiansen, Jon Orwant著,O'Reilly,2000.1)、《Learning Perl》(Randal L. Schwartz, Tom Phoenix著,O'Reilly,2001.7),目前这两本书都已经出版到第三版,中国电力出版社已经引进翻译了后者,中文名为《Perl教程》(张大江译,2000-6)。PHP与Apache结合,在Web应用方面表现了巨大的潜力,推荐两本适合中、高级读者使用的书:《PHP 4.0 Web开发技术指南》(Tobias Ratschiller Till Gerken著,陈军、龙浩、李向荣译,机械工业出版社,2001-1)和《PHP4.x企业级Web应用与开发》(廖若雪等著,机械工业出版社,2001-4)。
经验丰富的程序员都会知道源代码版本控制的重要性,Linux使用CVS来解决版本控制的问题。《CVS 开源软件开发技术》(Karl Fogel著,肖虎勤、陈军等译,机械工业出版社,2001-6)详细介绍CVS 的发展历史、基本概念、高级应用等内容。
Linux对数据库应用的支持并不比Windows逊色,全部支持MySQL、Oracle、Informix、Sybase、DB2、Progress。《Linux环境数据库管理员指南》(David Egan著,钟鸣、田晓涛译,机械工业出版社,2001-1)全面地介绍了各种数据库在Linux下的安装、配置以及简单应用,这是唯一一本全面介绍Linux下数据库应用的书;可以想象的是,一本书里面全方位地介绍这么多数据库的内容,对数据库本身的知识介绍肯定不够,专著于数据库开发的读者需要结合所使用的数据库选择适当的图书,例如介绍MySQL的《MySQL网络数据库指南》(Paul DuBois著,田晓涛等译,机械工业出版社,2000-6)。
如果读者希望了解内核的构造,不免会涉及的内核模块编程的问题,LKMPG(Linux Kernel Module Programming Guide)是LDP项目之一,一份比较权威的文档,其中译版收录在《Linux编程白皮书》(朱珂等译,机械工业出版社,2000-4)一书中,可惜的是原来是针对2.0.*版本的内核编写的,后来对2.2.*版本的内核进行了扩充,但是现在2.4.*版本的内核有和很大的改进,希望作者能早日更新本文档。
在介绍了这么多编程系列的图书之后,最后再给大家推荐两本:《Beginning Linux Programming》(Neil Matthew, Richard Stones著,Wrox Press Inc,1999-9)和《Linux程序设计权威指南》(于明俭、陈向阳、方汉著,机械工业出版社,2001-4)。前者浙江大学曾组织影印过一批,从内容和涉及深度来讲,这本书可以看做是APUE的"入门"级版本,APUE虽然是学习Unix编程的经典,但对于初学者来说,显得太深,啃起来比较吃力,在这种情况下,BLP一书就很有阅读价值了。这本书从Linux编程的基本概念讲起, 覆盖了Shell编程、文件、环境、终端控制、Curses、进程与线程、管道、SystemV IPC、socket、Tcl/Tk、gtk+、Perl、HTML/CGI、设备驱动程序等Linux编程中常用的内容, 并介绍了make、版本控制等常用工具和Linux下C程序的调试技术。如果读者具有一般的C编程经验, 但以前没写过Linux程序,那么这本书可以帮助你很快迈入Linux编程的门坎。同时, 由于书中大多数章节内容严格遵循POSIX、XPG4I3(Unix98)、SVID等业界标准,因此也适合于学习一般的Unix编程。《Linux程序设计权威指南》的第一作者于明俭是chinput的作者,对Linux的国际化、本地化和中文化有很深入的研究,因此本书的第六章"国际化和中文化编程"应该是相当权威的。
4. 操作系统原理
其实选择操作系统原理的书很简单,认一个人的名字就够了,Andrew S.Tanenbaum,他的《操作系统:设计与实现(第二版)》(两卷本,王鹏、尤晋元、朱鹏、敖青云译,电子工业出版社,2001-4)、《现代操作系统》(陈向群译,机械工业出版社,1999-10)、《分布式操作系统》(陆丽娜、伍卫国、刘隆国等译,电子工业出版社,1999-12)全都是经典之作,此处就不再介绍了。
5. 内核和源代码分析
首先介绍的一本应该是《莱昂氏UNIX源代码分析》(John Lions著,尤晋元译,机械工业出版社,2000-9)。该书上篇为UNIX V6的源代码,下篇是莱昂先生对UNIX操作系统版本6源代码的详细分析。该书从1976年开始一直就是黑客内部流传的一部经典教材,直到1996年才得以正式出版。虽然内容很多涉及PDP11的内容,相应的汇编指令没有相应的基础很难看懂,但是本书的内容、思想永远都值得购买、学习。作者除了对源代码进行注释、分析之外,还提出了很多改进意见,china-pub把本书誉为旷世奇书实不过分。
对于Linux,国内出版了几本不错的书,其中最好的应该是陈莉君编著的《Linux操作系统内核分析》(人民邮电出版社,2000-8),该书对Linux内核进行了较全面的分析,既包括了对进程调度、内存管理、进程间通信、虚拟文件系统、设备驱动程序及网络子系统的分析,也包括对Linux整体结构的把握、Linux启动过程的剖析以及Linux独具特色的模块机制的分析与应用等。该书在台湾业界都广泛流传着复印或影印的版本;不足之处是内容深度不够,对SMP(对称多处理)等都没有介绍。
译著里面值得一提的是机械工业出版社出版引进出版的姊妹篇:《Linux内核源代码分析》(Scott Maxwell著,冯锐、刑飞、刘隆国、陆丽娜译,2000-6)和《Linux IP协议栈源代码分析》(Stephen T.Satchell、H.B.J Clifford著,刘隆国、翟刚、陆丽娜、辛炜译,2000-11)。前者针对当时最新的内核(2.2.5),分析了系统初始化、系统调用、信号、中断和时间、进程和线程、内存、System V IPC、对称多处理等方面的内容。后者则是针对当时广泛被采用的2.0.34的内核的网络部分进行分析,较全面地介绍了ISO网络模型、API 、IP、ICMP以及ICP 等核心网络实现,对它们的代码进行了详尽的分析。但是在新版本的内核中(2.4.*)网络部分已经进行了相当大的改动,作者的第二版就是针对2.4.*版本的内核进行分析的。
今年有一件令Linux的技术爱好者振奋人心的事情,就是《Understanding the LINUX Kernel: From I/O Ports to Process Management》(Daniel Pierre Bovet, Marco Cesati著,O'Reilly,2000-9)一书的出版,该书是迄今为止分析Linux内核最好的一本书;Solaris也出版了一本经典之作《Solaris Internals: Core Kernel Architecture》(Jim Mauro, Richard McDougall著,Prentice Hall PTR,2000-10)。这两本书已经分别由中国电力出版社和机械工业出版社引进,近期都会出版中译版。
有关内核,网上公开的一份相当好的文档是LKI(Linux Kernel Internals),可惜的是还没有完成。另外有一本《Linux设备驱动程序》(Alessandro Ruibini著,LISOLEG译,中国电力出版社,2000-4)详细地介绍了Linux下开发设备驱动程序所涉及的内容,包括建立驱动程序并装载模块、完善字符设备、块设备和网络设备驱动程序、调试驱动程序、计时、内存管理和DMA、中断、可移植性事项、外部设备互连(PCI)、内核内幕的导览,是这方面不可多得的好书。可惜的是写第一版当时所采用的内核开发版本才到2.1.43,现在的2.4.*已经有了很大的改进,O'Reilly已经在今年6月份出版了本书的第二版,内容已经包含了2.4.*的改进,据说中国电力出版社已经引进了该书。
还有很多优秀的图书,笔者可能不了解详情,不能一一列出;但愿这份简要的介绍能给读者选购图书提供帮助。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617731/viewspace-961767/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10617731/viewspace-961767/