再论关于如何学习网络编程
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,前些天在一个论坛上和一位朋友争论了学习网络编程的方法,而后发表了《TCP协议疑难杂症全景解析》,不算猛文,但也得到了一些回应,大家都是对Richard Stevens的两本书情有独钟:《TCP/IP详
千家信息网最后更新 2025年02月08日再论关于如何学习网络编程前些天在一个论坛上和一位朋友争论了学习网络编程的方法,而后发表了《TCP协议疑难杂症全景解析》,不算猛文,但也得到了一些回应,大家都是对Richard Stevens的两本书情有独钟:《TCP/IP详解(前两卷)》/《Unix网络编程》。我提出了自己的不同的声音,首先我不同意这两本书很重要,其次我觉得这两本书根本就不重要!
首先声明,本人并不是什么高手或者顶级***,也没有能力通过TCP/IP网络将电话免费盗打到梵蒂冈教皇那里,...只是稍微了解一些任何人本应该都了解的东西,只是大部分人在学校没有完成这个目标而已,不过没有关系,自学就可以了,一般而言,学校也是不怎么教深层次的网络知识的。那么现在就设计到了一个问题,那就是怎么学的问题。
要想精通网络编程,那么首先要明白,网络编程实际上是两个概念,一个是网络,一个是编程。很多人只是学会了所谓了socket接口,知道了什么recv的参数,知道了XYsockopt,就说自己精通网络编程,实际上他只是知道了编程,而可能对网络一窍不通。他知道交叉线和直连线为何这样区分吗(更进一步,为何交叉线连交换机而不能连主机[声明在非自协商情况下,以防编程的人钻牛角尖]);她可能知道慢启动这个词,然而她知道如何调优TCP吗?他可能知道路由怎么配置,然而遇到路由混乱能解决吗?这些问题往往都是很多科班出身人所忽略的,他们只在乎编程,而忽略了网络,自以为学会了编程就学会了一切,殊不知自己可能连什么是默认网关都不知道。
我不知道为何大四毕业不久的科班生有时候反而不如网吧的网管,是单纯的经验问题吗?有点原因,然而还有更深层次的原因,我不想用纸上谈兵这类贬义词,只是想说大家对C太热衷了,以至于忽略了其它,难道能用bash完成同样的事不更好吗?为何单纯只有C能体现技术含量呢?因为依恋C,因此扑在了socket,因此认为接网线,配路由,写脚本之类的事都是网管干的,结果自己就是一个代码民工。当然,这个现象也许和大学的课程安排有关,所幸我没有接受过那样的安排,我们当时只是简单的培训了网络协议和上机教程,随后我们还拿着网线钳做网线,好像是民工一样,然而正是那个时候,歪打正着的打下了日后需要的功底。
因此,学习网络编程的要点中,网络是更重要的,如果你把协议都了解了,都精通了,你的接下来的选择有很多,你可以写bash,也可以写java...但是如果你只会socket,那么可要当心夹生饭的危险,你的既有理念会阻止你去学习做网线之类的事(你认为只有写C的才是研发)(当然并不是说精通网络一定要做什么网线,只是随便举个例子而已)。学习曲线一定要确定。
Richard Stevens的两本书,从某种意义上讲,比较适合对网络协议已经很了解的人,他的《Unix网络编程》针对的就是编程,而他的《TCP/IP详解》系列我感觉还缺一本,那就是第0卷:TCP/IP协议概述,如果根本不懂什么是TCP/IP,直接通过抓包结果学习,那绝对是一头雾水或者喜欢就是论事,他的这本书比较类似国人毛德操的Linux内核情景分析两卷本,当然Richard Stevens在也不会再版了...因此也不便多说什么了。我主要想说的就是,在看Richard Stevens的书之前,你要确认自己已经很理解TCP/IP了。
另外,有位朋友提到要看TCP/IP的实现,当然这是必要,看Linux的实现是最方便的。然而对于自己来说,要看有没有必要,如果你只是一个实施人员或者售前支持,那么就没有必要十分精通它的实现,因为精通其实现最主要的目的是调优,而调优是研发的事。但是最为一条总的学习路线,看实现总是没有坏处的。
虽然我好像一直都在降低编程的重要性,但是事实上,正好相反,编程的地位应该是最高的,它正好像蒸煮好的米饭一样,是一切的最终实现,但是切莫产生夹生饭。任何的TCP实现都是通过编程语言实现的,因此我对学习网络编程的建议是:
1.写代码,了解API,但是不要在此阶段停留太久;
2.阅读RFC,了解原理,这个步骤一定要细致;
3.写代码,侧重原理的确认,确认你所在RFC中看到的事情是真的,这个阶段要花费些时间;
4.闲暇时可以看看《TCP/IP详解》,《Unix网络编程》之类的书,没时间就算了;
4.1.如果你就是想完成工作,养家糊口,那么到这一步就为止了,否则接着往下看。
5.看Linux的TCP/IP协议栈实现,必要时候Hack之,如果你真的想理解TCP/IP并且搞点大动作,这个阶段花点时间是值得的;
6.找一个网卡驱动看看,看看网卡为何这么设计,主要的是看看文档的说明,并且hack驱动,反证文档的正确性;
7.写代码,利用学到的知识不断提升性能,这个阶段就是完全自主的阶段了,你应该抛开一切的文档资料,自己实现一个优化的协议;
8.写代码,还是写代码,这个阶段,可能你要和国际大牛接触了,主要通过Maillist...
首先声明,本人并不是什么高手或者顶级***,也没有能力通过TCP/IP网络将电话免费盗打到梵蒂冈教皇那里,...只是稍微了解一些任何人本应该都了解的东西,只是大部分人在学校没有完成这个目标而已,不过没有关系,自学就可以了,一般而言,学校也是不怎么教深层次的网络知识的。那么现在就设计到了一个问题,那就是怎么学的问题。
要想精通网络编程,那么首先要明白,网络编程实际上是两个概念,一个是网络,一个是编程。很多人只是学会了所谓了socket接口,知道了什么recv的参数,知道了XYsockopt,就说自己精通网络编程,实际上他只是知道了编程,而可能对网络一窍不通。他知道交叉线和直连线为何这样区分吗(更进一步,为何交叉线连交换机而不能连主机[声明在非自协商情况下,以防编程的人钻牛角尖]);她可能知道慢启动这个词,然而她知道如何调优TCP吗?他可能知道路由怎么配置,然而遇到路由混乱能解决吗?这些问题往往都是很多科班出身人所忽略的,他们只在乎编程,而忽略了网络,自以为学会了编程就学会了一切,殊不知自己可能连什么是默认网关都不知道。
我不知道为何大四毕业不久的科班生有时候反而不如网吧的网管,是单纯的经验问题吗?有点原因,然而还有更深层次的原因,我不想用纸上谈兵这类贬义词,只是想说大家对C太热衷了,以至于忽略了其它,难道能用bash完成同样的事不更好吗?为何单纯只有C能体现技术含量呢?因为依恋C,因此扑在了socket,因此认为接网线,配路由,写脚本之类的事都是网管干的,结果自己就是一个代码民工。当然,这个现象也许和大学的课程安排有关,所幸我没有接受过那样的安排,我们当时只是简单的培训了网络协议和上机教程,随后我们还拿着网线钳做网线,好像是民工一样,然而正是那个时候,歪打正着的打下了日后需要的功底。
因此,学习网络编程的要点中,网络是更重要的,如果你把协议都了解了,都精通了,你的接下来的选择有很多,你可以写bash,也可以写java...但是如果你只会socket,那么可要当心夹生饭的危险,你的既有理念会阻止你去学习做网线之类的事(你认为只有写C的才是研发)(当然并不是说精通网络一定要做什么网线,只是随便举个例子而已)。学习曲线一定要确定。
Richard Stevens的两本书,从某种意义上讲,比较适合对网络协议已经很了解的人,他的《Unix网络编程》针对的就是编程,而他的《TCP/IP详解》系列我感觉还缺一本,那就是第0卷:TCP/IP协议概述,如果根本不懂什么是TCP/IP,直接通过抓包结果学习,那绝对是一头雾水或者喜欢就是论事,他的这本书比较类似国人毛德操的Linux内核情景分析两卷本,当然Richard Stevens在也不会再版了...因此也不便多说什么了。我主要想说的就是,在看Richard Stevens的书之前,你要确认自己已经很理解TCP/IP了。
另外,有位朋友提到要看TCP/IP的实现,当然这是必要,看Linux的实现是最方便的。然而对于自己来说,要看有没有必要,如果你只是一个实施人员或者售前支持,那么就没有必要十分精通它的实现,因为精通其实现最主要的目的是调优,而调优是研发的事。但是最为一条总的学习路线,看实现总是没有坏处的。
虽然我好像一直都在降低编程的重要性,但是事实上,正好相反,编程的地位应该是最高的,它正好像蒸煮好的米饭一样,是一切的最终实现,但是切莫产生夹生饭。任何的TCP实现都是通过编程语言实现的,因此我对学习网络编程的建议是:
1.写代码,了解API,但是不要在此阶段停留太久;
2.阅读RFC,了解原理,这个步骤一定要细致;
3.写代码,侧重原理的确认,确认你所在RFC中看到的事情是真的,这个阶段要花费些时间;
4.闲暇时可以看看《TCP/IP详解》,《Unix网络编程》之类的书,没时间就算了;
4.1.如果你就是想完成工作,养家糊口,那么到这一步就为止了,否则接着往下看。
5.看Linux的TCP/IP协议栈实现,必要时候Hack之,如果你真的想理解TCP/IP并且搞点大动作,这个阶段花点时间是值得的;
6.找一个网卡驱动看看,看看网卡为何这么设计,主要的是看看文档的说明,并且hack驱动,反证文档的正确性;
7.写代码,利用学到的知识不断提升性能,这个阶段就是完全自主的阶段了,你应该抛开一切的文档资料,自己实现一个优化的协议;
8.写代码,还是写代码,这个阶段,可能你要和国际大牛接触了,主要通过Maillist...
网络
编程
网络编程
只是
就是
学习
代码
阶段
网线
重要
必要
问题
文档
时间
路由
原因
原理
只有
夹生饭
学校
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网站模板需要服务器吗
手游方舟优质服务器什么意思
九江求职软件开发
软件开发项目小组的成员构成
宁波网络安全认证企业
郑州十大网络安全上市公司
移动服务器天威运维管理平台
甘肃网络安全日
cidr数据库下载
软件开发过程分几个阶段
学校食堂数据库表模板
家长会网络安全教育内容
网络技术环境现状
服务器网赚
北京网络技术招聘信息
信息系统和网络安全管理制度
上海预付费软件开发
金蝶数据库交换平台
互联网电子数码科技行业
贵州地方文献全文数据库
计算机专升本考网络技术吗
学校网络安全之我见
应聘网络安全岗位的自我介绍
串口服务器接线照片
联想网络安全法
hmc服务器配置电源
电子游戏软件开发哪些学校招生
八大数据库搭建
软件开发社团会徽
网络安全法实名