网络编程 学习参考的几个链接

UNP 卷一 学习链接:

1.UNIX 网络编程


2.《UNIX网络编程 卷一:套接字联网API》第一至六章学习笔记


3.Unix网络编程 3rd vol1 读书笔记


4.unix网络编程之基本套接口编程


5.《UNIX网络编程 卷1》学习笔记


6.UNP学习笔记


7.UNP


8.UNP学习笔记(1)


9.随笔分类 - UNIX 网络编程

--------------------------------------------------分割线----------------------------------------------------------------

UNP 卷二 学习链接:

1.企鹅的自我修养


2. UNIX网络编程卷2进程间通信读书笔记


3.Phinecos(洞庭散人) 专注于开源技术的研究与应用 《UNIX网络编程 卷2》读书笔记

--------------------------------------------------分割线----------------------------------------------------------------

APUE 学习链接:

1. BlitzSkies的专栏


2.Anker—学习成长笔记


3.printk(KERN_DEBUG,"Hello World");


4.APUE部分


5.APUE网络编程


6.一起学 Unix 环境高级编程 (APUE)

--------------------------------------------------分割线----------------------------------------------------------------

 unix网络编程各种TCP客户-服务器程序设计实例


--------------------------------------------------分割线----------------------------------------------------------------

在linux贴吧上面 看到 APUE和UNP看不懂怎么办? 这个链接。对其中 mephistohk 说的做一个总结:

    W.Richard Stevens 先生所著之书比较适合有经验的人进一步深入学习

    W.Richard Stevens 先生所著的UNIX 环境高级编程、UNIX网络编程、TCP/IP详解是难得的入门好书,但这里的入门指得是研究生级别的入门。Stevens 先生所著之书多半是为了给研究生上课时用做教材,因此 Stevens 先生假设阅读这些书的人至少已经接受过了系统的计算机技术本科教育,已经拥有了比较系统的计算机相关基础理论知识。在书中 Stevens 先生假设读者拥有了最基础的操作系统理论,网络技术理论,以及UNIX理论和实践经验,并拥有数种业界常用的UNIX系统作为学习环境(在国外的大学里很容易获得),这样才能体会书中所述的细节。因此这些书刚接触时看似通俗易懂,但在阅读细节上却对读者要求甚高,如果没有足够的专业理论和系统实践是很难真正读进去的。

    所以,对于没有接受过系统的计算机专业教育的爱好者,或者主要以 linux 系统维护,或以linux 桌面应用为主的普通用户,Stevens 先生的书并不是很合适的阅读对象。

    因此,就我个人的看法,掌握任何一种知识都是需要投入的。我们需要花费金钱去得知识来源(花钱买书,花钱上网,花钱培训),需要花费宝贵的时间去阅读(人生匆匆几十年,没多少时间可以给我们去浪费),需要花费精力去理解书中的内容(基础知识越扎实,理解所学内容越快,但累积基础同样需要大量时间和精力),需要找到合适的环境(光看不实践心里是不会有底的)去验证自己掌握的东西。因此,如果在决定投入之前,先要摸清楚自己到底想要达到什么样的目标,这个目标是否切合自己的实际(相信一个在流水线上辛苦劳作的普通工人,即使学会了计算机编程也是没有用武之地的,除非他有机会离开流水线)。自己是否有足够的资源承载自己的理想(如对于温饱问题尚未解决之人,要他花上千上万的钱去学MBA显然是不现实的)。

    同时,任何一本书都会对读者提出一个基本的知识架构和程度上的要求,比方说即使是文学博士,让他去读高能物理学方面的书也会要他的命的。因此在选择所读之书前,先要对自己的实际能力做一次详细的评估,看自己目前到了哪种阶段,是否有能力去掌握自己想要掌握的东西。千万不要因为好高骛远而勉力为之。选择适合自己当前水平的书去阅读并理解,远好过拿着大师所著的神作干瞪眼。

    希望掌握UNIX下的编程技术,尤其是网络编程技术的话。那以我本人的经验,可以有两条路走:

    1、以实际需要完善知识架构:为自己做一个项目,比方说自己写个简单的 Web 服务器,因为现在 Web 应用非常丰富,既有成熟的客户端如浏览器可以配合,又有足够全的文档如 RFC文档可供参考,再加上最基本的 socket 编程经验,就可以开始做自己的 Web 服务器。一步一步的为 Web 服务器添加流行的功能,如支持后台 FastCGI 接口,支持 WebDAV,支持流媒体等。在这个过程中不断地学习和掌握相关的理论知识,有时在发觉设计上的不足时甚至需要推翻全盘重新架构。当最终一个完全符合自己心意且足够实用的 Web 服务器做成时,就拥有了可以由自己支配和修改的服务器,同时也掌握了相关的专业理论。这种方式比较适合有一定专业基础的人使用。优点是直观,方向明确所以学习效率高。缺点是需求驱动,形成知识架构不容易完整。

   2、系统掌握计算机专业理论:最好的书就是大学里的理论教科书,这些书不会去讲解过于具体的计算机应用,而是从概念开始讲起,力图使学习者获得一个完整的知识体系。只要以后碰到的工作和这个知识体系相关,自然就能很快学会。这种方式比较适合没有基础,或者希望深入学习的人使用,优点是知识架构会逐渐趋于完整,理论功底扎实,后劲足。缺点是花费时间长,方向不明确所以学习效率低,初期会因缺少实践而进展缓慢。
 

    首先你需要自学完计算机组成原理,这门课描述了完整的计算机系统是怎样组织起来的。学完这门课后,你就对计算机各组成部分的原理有了概念上的理解。你可以先跳过算法和数据结构这门课,直接去熟悉工作在其上的 linux 操作系统。这里的熟悉指的是去熟悉 linux 提供的命令行工具,以及掌握内核系统调用及库函数为主,用不着去学习服务器配置,桌面应用,甚至包括数据库应用等内容,也不要马上去学习 linux 内核源码本身。你只需要能用命令行熟练操作即可。至于系统调用和库函数则需要通过编写C语言代码来完成,在这里你不需要编写复杂的应用,主要需要掌握每个系统调用的特点及使用场合,比方就 fork 来说,你不能直接简单地用 fork 派生出一个进程就完事。你需要通过编程了解 fork 调用后,进程如何处理信号,进程如何处理管道,进程和子进程之间如何相互联系,如何避免僵尸进程,新进程如何进行内存管理,更深一步还包括 fork 调用后,如果保证进程中的线程正常工作。这些东西都是你需要通过编写代码去熟悉的。用这种学习方法摸索完所有的系统调用和库函数需要1-2年的时间,正好可以赶上之后学校里学习专业基础课的节奏。到那时通过对计算机组成原理及操作系统应用的扎实理解,专业基础课学到一点就可以用上一点,会比一般的学习方法快许多。至于之后的内容如 ARM 应用模块的设计,SoA 如何裁剪之类的内容只有等你把专业技术课学完了再继续学了。

    不过这里还是要再次提醒一下:计算机软件技术从本质上讲是应用数学的具体应用,因此基础课尤其是数学是最重要的,如果可以的话尽量不要荒废,而且最好还要多选修几门数学方面的课程,磨刀不误砍材功,等到因为基础扎实而在以后的学习过程中一日千里,让周围的同学们怎么也追赶不上时,我想你会理解我现在说的这一大段话的。

    再次希望你三思,不要错过打好基础的机会,专业应用课程虽然学起来丰富刺激,但却万变不离其宗,是脱离不了基础课程的支持。因此忽视基础理论的培养,只注重掌握专业知识的话,就象各门各派的剑法,纵然一时看起来百花齐放气象万千,但终不免败于基础理论完整的独孤九剑之下。

    希望以上的建议对你有用。

------------------------------------------------------------分割线------------------------------------------------------------------------------------------




    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值