防止断更 请务必加首发微信:1716 143665
关闭
讲堂
算法训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

结束语丨我相信这不是结束,让我们江湖再见

2019-10-30 盛延敏
网络编程实战
进入课程

讲述:冯永吉

时长05:44大小5.27M

这是“网络编程实战”的最后一篇文章了,提起笔来,竟然感觉到有些不舍,回想起这个专栏的诞生,和总编、编辑反复地讨论选题,根据用户反馈不断打磨大纲,一幕幕都感觉恍如昨日。时间过得飞快,感谢大家几个月以来的相伴,不管大家对这个专栏有什么样的评价,我都可以自豪地说,我是很用心地在做这个事情。感谢极客时间的总编郭蕾,还有这个专栏的编辑,没有你们的支持,很难想象我会坚持完成这个专栏。
虽然我自认是个高性能网络编程领域的老手,但是在此之前,整个知识体系都是碎片化的,实践中虽然有过一些经验和教训,却很难形成一个完整的系列。平时也读过不少网络编程方面的书,大多也是为了解决实践问题进行的查疑解惑,从来没有动力去把这些碎片化的知识加以整理,所以,也非常感谢极客时间的这次邀约,使我能够以一个更加系统的角度把自己之前碰到的问题结合理论加以梳理,最终能形成一个比较完整的系列。我感觉自己在做这个事情的过程中,也收获颇丰。

学习方法论

谈完自己的感受,作为这个专栏的结束语,我还是非常希望能给坚持学下来的你们,我的忠实朋友们谈一谈学习方法论。

动手实践

前两天和同事们一起去登山,有些同事身体很棒,一溜小跑就奔到了山顶。我在下面远远地看着他们,无比羡慕,萌生出一个想法,如果能不登攀这些石阶直达到山顶,那该多好啊。
可是,这终归是一个不切实际的的幻想,我知道我还是要一步一个台阶地迈过这些石阶,才能达到山顶。当我最终到达山顶时,那些疲惫和羡慕都随风而去,自己所能感受到的,则是“无限风光在顶峰”的畅快。
我拿这个登山的例子来类比我们学习计算机技术的过程,这两者是何其的相像。有的同学非常羡慕可以动辄写出框架的专家,其实,要成为专家,中间的一些台阶必须要自己迈过的,没有人可以一步登顶,只是有人跑得快,有人跑得慢而已。
计算机技术是一门非常重视实战的学科,网络编程更需要静下心来不断试错,因为它通过系统内核交互。只有通过试错,才能让你的理解慢慢接近真实的答案。如果只是读文字而不去实践,不可能帮助你成为一个真正的专家。
我在和同学们的互动中,发现有相当多的同学已经能动手去写,并且在这个过程中有不同的领悟,可以问出一些高质量的问题,这都是非常好的现象。坚持下去,一定会引起质变,让自己成为这个领域的专家。

学习源码

除了动手实践外,看源码也是一个快速提高自己的途径。俗话说,熟读唐诗三百首,不会做诗也会吟。源码读懂了,就可以帮助你大幅度理解原理,技巧也会得到提升。
在网络编程这块,我推荐你看 libevent、ACE 或者 Asio 的源代码。
libevent 是一个轻量级的基于 event 回调机制的网络编程库,可以支持 Linux、Solaris、Windows 等系统,它本身是用 C 语言写的,代码量不是很多,比较适合入门级的阅读。
Asio 是 boost 里的网络编程库,是用 C++ 语言写的。里面用了很多 boost 的数据结构和技巧,包括大量模板的使用,有一定的语言难度,如果你对自己的 C++ 能力比较自信,可以试着去读一读。boost 库本身也已经成为 C++ 的标准库,其设计和实现也可以说是一个学习的样板。
ACE 是老牌的 C++ 网络编程库,我读书那会非常流行,也基于 ACE 写过很多网络程序。很多设计模式如 reactor、proactor 都是 ACE 首次提出并倡导的。当然也有很多网络编程的大佬们觉得 ACE 有点过于设计了,搞得太复杂,没必要。这个我觉得见仁见智吧,有些好的思想可以拿来用,觉得不合适该抛弃就抛弃。ACE 强在设计模式和抽象,如果对设计模式感兴趣,可以花一些时间学习下 ACE 的设计。

技术总结和分享

还有一个需要注意的地方就是总结和分享。要学会从源码中总结,即使是前人已经有的总结,如果你可以有自己的心得和体会,也可以总结出来,发到个人博客或者 GitHub 上去。长期坚持下来,你也会收获颇丰。我个人在面试候选人的时候,对这种比较喜欢总结,有自己想法的同学是会高看一眼的。
GitHub 是一个非常好的资源,学会使用 Git 和 GitHub 会让你如虎添翼。
总结需要你对原理、代码反复咀嚼。总结的方式有很多种,你可以画框图,写流程图。对技术反复考究的态度,决定了你可以在这条路上走多远。
分享这件事情使我们有一定的成就感,在这其中也不用担心出错,如果有人帮助你纠正了错误的理解,而你付出的不过是倾听和感谢,岂不是一件非常好的事情。
在互联网高度发达的今天,学会技术总结和分享,将会使我们事半功倍。

不是再见的再见

我期望这个专栏可以帮助你快速复习和掌握网络编程相关的领域知识、编程模型,为你今后的职业发展奠定良好的基础。你可以写下你的心路历程,非常期望未来和你进一步的互动,我们江湖再见。
文章结尾处有一份调查问卷,希望你可以抽出两三分钟填写一下。我想认真倾听你对这个专栏的意见或者建议,期待你的反馈!
© 加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。
上一篇
35 | 答疑:编写高性能网络编程框架时,都需要注意哪些问题?
 写留言

1716143665 拼课微信(9)

  • 2019-10-30
    谢谢老师,学到很多,也正好解决了一些现网上线过程中遇到的几个网络引起的性能问题,最近终于项目上线完,正在学习C语言,打算学完然后彻底重学一趟整个专栏,一步步实践更进一步吃透。因为没学过C,刚学完指针结构体,但是还是不懂怎么看库源码api类似,有点小懵,不知道老师能不能补充一个小专题,比如对刚学完C的或者C比较薄弱的,还需要哪些知识怎么学,才能比较独立用C跟上专栏~
    展开

    作者回复: 找一本C语言的书看下,多写多看吧。C语言的书我推荐
    https://book.douban.com/subject/1139336/

    1
    1
  • 2019-11-03
    虽然落后了好几天才把专利跟完,但是收获真的很大。以前对网络编程的底层API总是一知半解,网上看的资料也是零零散散不成体系,《unix网络编程》一类的砖头又有点让人望而却步。学完专栏之后,自己也能对一次IO的整体流程在脑子里生成一张比较完整的路径图了。尤其是最后的实战篇,感觉真的很棒,共享的代码很值得继续研究。感谢老师。
    展开
  • 2019-10-31
    花的最值的一门课,感谢老师,笔芯❤
    展开

    作者回复: 谢谢,同笔芯❤

  • 2019-10-30
    我第一个跟完的专栏,收获颇丰,谢谢老师,在学习网络编程的同时顺便也熟悉了一下C语言,接下来打算去读一读Redis网络部分的源码练练手
    展开

    作者回复: 谢谢支持。

  • 2019-10-30
    感谢老师的辛苦付出!

    我之前工作中也是用c语言.
    也写过一些网络方面的东西.
    现在看了老师的c代码,自愧不如.😁

    现在虽然没从事c语言开发了,但看起在性能篇中讲的那些模型,还是蛮熟悉的.
    以前也确实是从select -> poll -> epoll过来的,再就是异步和线程模型.

    现在从事golang开发,很多底层的网络库,都不需要自己写了.
    很多都有开源的解决方案了.
    但是知道了些理论的东西,在需要时,上手起来也快.
    展开

    作者回复: 非常同意,知道原理,会让我们上手和解问题的速度都快很多。

  • 文章内容都没看,直接下来评论,我竟然还收到了更新,以为不会更新了哈哈哈,笑着下山😄😄😄😄

    作者回复: 谢谢一路支持~

  • 2019-10-30
    这个专栏让我更有自学看tomcat和netty源码啦
    感谢老师,希望以后能成为同事!

    作者回复: 期待~

  • 2019-10-30
    一篇篇文章看到了最后,还是有很多不理解的地方,但收获颇丰,同时我也跟一楼一样在学c,最好了二刷专栏的准备。老师辛苦了
    展开

    作者回复: 有针对性的问题可以继续讨论哈。

  • 2019-10-30
    自己是从 I/O 多路复用,了解到网络编程,也是通过网络编程,让自己明白基础知识的重要性。在这个专栏里,学到了很多,谢谢老师。
    展开

    作者回复: 谢谢一路支持。