也谈服务器端网络编程

这里主要说一下自己看的书和一些心得体会,把自己的学习路线梳理一下,也是作为自己这段时间的学习总结。

因为从事的都是服务器端开发和学习,所以本文内容主要在该范围内,假定读者经过了系统的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

上面就是自己这一年左右看的书,都是我认为比较核心的书,读这些书自己能感觉到功力的明显提示,其他的零敲碎打的、读了也没感觉有啥提示的就没列出来。

另外,这些经典是用来阅读、品味和收藏的,尽量买正版吧,看着也舒服;

最后一句:一本经典读十遍,远比十本烂书读一遍强(这是我大学最痛的领悟),各位,且读且珍惜!

时间: 2024-10-07 21:42:29

也谈服务器端网络编程的相关文章

高性能服务器端网络编程模型

上一篇文章<Java 程序员也需要了解的 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程-线程模型的选择.本文将主要介绍传统的和目前流行的进程-线程模型,在讲进程-线程程模型之前需要先介绍一种设计模式: Reactor 模式,不明白的看这里<设计模式详解>,文中有一句话对 Reactor 模式总结的很好,引用下. Reactor 模式首先是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers:

服务器端网络编程之线程模型

上一篇文章<服务器端网络编程之 IO 模型>中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程-线程模型的选择.本文将主要介绍传统的和目前流行的进程-线程模型,在讲进程-线程程模型之前需要先介绍一种设计模式: Reactor 模式,不明白的看这里<设计模式详解>,文中有一句话对 Reactor 模式总结的很好,引用下. Reactor 模式首先是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers:这个Ser

浅谈iOS网络编程之一入门

计算机网络,基本上可以抽象是端的通信.实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了.先来了解一些基本概念 了解网络中传输的都是二进制数据流.  2.了解网络编程概念. 认识网络: // 网络概念 <1> 经常见到的: 网卡/网线/IP地址/子网掩码/路由地址/DNS服务器地址 作用? // <2> 容易忽略的:MAC地址/数据/数据包 // <3> 网络编程的概念:客户端/服务器/请求/响应/数据流 // 网络是数据交互

详解C# 网络编程系列:实现类似QQ的即时通信程序

引言: 前面专题中介绍了UDP.TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的.为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在本专题中将利用前面专题介绍的知识来实现一个类似QQ的聊天程序.  一.即时通信系统 在我们的生活中经常使用即时通信的软件,我们经常接触到的有:QQ.阿里旺旺.MSN等等.这些都是属于即时通信(Instant Messenger,IM)软件,IM是指所有能够即时发送和接收互联网消息的软件. 在前面专题

phthon网络编程

软件开发架构 既然谈起网络编程,就得说说软件开发的架构: c/s架构 C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入.输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量.由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用.国内现阶段的大部分ERP(财务)软件产品即属于此类结构. B/S架构 B/S(浏览器/服务器模式)是随着

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

[JAVA &#183; 初级]:22.网络编程

基本概念 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件.软件.数据信息等资源. 计算机网络的主要功能: 资源共享: 信息传输与集中处理: 均衡负荷与分布处理: 综合信息服务 (www/综合业务数字网络 ISDN). 网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率.传输代码.代码结构.传输控制步骤.出错控制等制定标准. 网络通信接口:为了使两个结点之间能进行对话,必须在它

JAVA的网络编程【转】

网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作