结束语 | 真正的高贵,不是优于别人,而是优于过去的自己

你好,我是袁武林。

不知不觉中,在大家的耐心陪伴下,即时消息专栏的更新马上就要结束了。

首先,要感谢各位同学对我的信任和宽容,给我这个机会,让我能够在这段短暂的时间里,带领大家一起来学习即时消息这一门古老但又充满活力的技术。

对我来说,这是一段非常特别和有趣的体验,我也第一次尝试通过专栏的方式,将自己了解的知识进行体系化的输出。

当然这并不是一件简单的事情,知识点整理、稿件打磨、录音、留言反馈等等,背后的艰辛可能也只有经历过的人才能体会到。但每次专栏更新上线,看到自己的付出有帮助到一些同学,并且得到肯定的时候,我瞬间感觉又充满了战斗的能量。

关于专栏的落地

实际上,在开始筹备这个专栏的时候,我个人是比较没有信心的。

原因倒不是说技术层面的问题,而是担心即时消息这个话题,因为受众相对没有那么广泛,在推出之后,如何让更多非IM行业的小伙伴,也能够感兴趣并且参与进来,一直是我和极客时间团队需要认真考虑的一个事情。

因为一直没有想到更好的办法,所以这个专栏甚至中途一度停滞中断。直到6月下旬,经过和极客时间小伙伴们的多次讨论,我们才最终决定继续推进这个专栏的落地。

关于即时消息技术的前景

从我们的角度看,随着4G网络的普及和5G网络的逐步推广,在移动网络场景中,不管是流量资费还是网络的稳定性和速度、带宽,相比几年前都有了非常明显的提升。

在这样的大环境下,原本更多被用于聊天等社交场景的即时通讯技术,也被大范围应用于“万物互联”的物联网场景,以及新型社交模式,如直播互动、游戏互动等。而且,还有越来越多对实时性要求高的业务场景,也都开始引入即时通讯技术,来提升用户的使用体验。

因此,我们觉得,开设一门即时通讯技术相关的课程,不仅能够让同学们从基础原理层面上更体系化地了解即时通讯底层核心的技术实现,并且能够帮助大家在各自从事的业务系统中,结合实际场景,来尝试引入课程中介绍到的某些适合自己业务的技术点。

专栏真正开始落地后,在一系列自我摧残式的存稿,以及逐字逐句和编辑的磨稿过程中,我才切身体会到做一个专栏有多不容易。

和以前随意写写博客相比,一个严谨的专栏需要耗费大量的时间和精力去提炼技术点,并且要尽量用“通俗易懂”的文字来组织语言。

专栏的落地对于我自己来说,也是一个成长和学习的过程。

特别是在留言区,就某些技术点和各位同学们的讨论,大家的一些有趣、富有想象力的观点,也能让我重新思考,涉及的这些技术点是不是某些方面的考虑还不够,或者是否还有更好的实现落地方案。

在专栏即将结束的时候,我也想借这个机会,和参与到这门课程学习中的你,聊一聊我对技术和学习方法的一些个人的思考。

学习方法论:知识的广度和深度问题

很多时候,我们搞技术的小伙伴经常会听到人们对于知识的两种学习路径:一种是追求知识的广度,力图多点开花,前后端通吃;另一种是追求某一个知识点的深度,从对某一个小知识点的“了解和会用”,到“底层原理分析”,再到“思考优化”的这种路径来学习知识。

但是对于很多从事技术的小伙伴们来说,这样很容易陷入到一个“两难”的学习方法论的抉择中,毕竟现在的新技术层出不穷。

就拿即时消息的技术体系来说,暂且不去讲多种语言实现的问题,光是Java体系下网络通信的NIO框架就有好几种,要选择哪个框架就是一个让人很纠结的问题。

这种情况下,很容易让人陷入一个怪圈:就是我们可能花费了大量的精力,放在框架特性介绍对比、框架使用方法研究等知识上面,力求通过掌握更多的NIO框架的使用,来提升自己这方面知识的广度。但从我个人角度来看,是不推荐这种学习和研究方式的。

我认为所谓的知识广度是一个伪命题,换句话说,知识的广度只是一个结果,而不是一种学习的方法。

我更推荐的是:针对某一个特定的技术点,从使用方法下沉到原理层面上,再逐步去拓展和了解研究学习过程中碰到的各种疑问与实现细节,从而“由点到面”地去吃透该知识点。

打个比方,要对NIO框架进行研究,我觉得没必要先去纠结各种框架的优劣,而是可以选择一种比较主流大众的框架去做实践;然后,逐步去了解这个NIO框架使用到的JDK的IO库的实现方式。

比如,搞明白JDK的IO库模型,是从传统的阻塞型的BIO,发展到JDK 1.4开始支持多路复用的NIO,再发展到JDK 1.7继续改进的异步的AIO,以此来了解这几种模型的区别和迭代改进的地方。

最后,再深入到底层的操作系统层,了解它们是如何支持这些IO模型的。

比如,要了解Linux的select和epoll的实现原理,可能还需要了解IO过程中涉及到的IO事件、最终的TCP连接的状态,以及与数据收发之间的关系。因此,你还可以对TCP协议进行体系化的了解。

通过这种层层深入的学习方式,我们就能较为扎实地掌握一个NIO框架涉及到的垂直知识体系。

这样,你在掌握知识点的同时,知识广度方面也能自然而然地充实起来,以后再切换到其他NIO框架,就相对简单了很多,也能更客观和精确地对这些框架从底层原理层面来进行比对了。

当然,这种逐层深入的学习方法,在前期可能需要花费大量的精力和时间,因此需要你一定的耐心和坚持,但在对底层原理层知识有一定的积累之后,这种学习的方法也会越来越轻松。

学习方法论:碎片化知识和系统化学习

关于技术学习路径的另一个小小的建议是:从了解碎片化的知识开始,逐步扩大你在某一方面的技能树,然后再对这方面的整体知识进行系统化的学习和总结沉淀。

随着现在各种技术博客、技术类公众号、技术站点等等的普及和传播,大部分时候,我们只能通过工作之余的些许碎片化时间,来了解某些细碎的知识点。

当然,这些碎片化的知识点是一种不错的积累,但这些零散的知识点,在碎片化学习的时候,由于学习时间短、文章内容比较聚焦于一个小点,很容易让我们看完之后产生一种“我知道了”,然后就没有后续了,难以进行复杂的思考。

所以,我个人的建议是,对于某一技术点方面的碎片化的知识,在一段时间的学习后,还是需要进行系统化的“复盘”,一来可以补充遗漏的某些技术细节,二来能够形成对这个知识点的整理和总结思考,最终沉淀成自己的文档或者代码输出。

另外,你也可以尽量优先地去选择学习与自己工作内容息息相关的技术点,这样在理解知识和后续的输出实践上,也会更有帮助。

写在最后

对于从事技术工作的我们来说,技术探索的道路总是显得如此漫长,不断迭代更新的技术时常会让我们眼花缭乱,各种技术知识产品的爆炸式推广,让我们获取知识的方式变得如此简单。

但另一方面,在快节奏的生活方式下,在繁重的工作、与家人朋友的相处时间之外,我们的时间总是显得远远不够用。

如何保持一颗对新鲜事物的好奇心,如何高效有序地管理时间,如何形成一套适合自己的学习方法,这个时候可能往往比技术本身更重要。

海明威说:“真正的高贵,不是优于别人,而是优于过去的自己。”

无论如何,可能我们在一开始的时候,学习的技巧并不是那么高明,但只要我们保持终身学习的姿态,持续地投入到真正喜欢的事情上,就能让今天的我们比昨天进步一点点。

我相信,时间的复利最终能让你真正采撷到成功的芬芳玫瑰!

精选留言

  • starscatcher

    2019-10-29 16:04:55

    我是在硅谷某大厂工作的资深软件工程师,工作内容和IM毫不相关。一次偶然的机会听了袁老师的第一课,从此不能自拔,追了一个月的时间,一直听完了最后一课。毫不夸张地说,你的这门课是我近几年来听过的讲得最好的课程,无论中文还是英文。你把零散的知识碎片梳理总结成系统性的课程,这其中的方法论很值得我学习。非常期待有朝一日能与你见面交流!
    作者回复

    哈哈,过誉了,能够对你有所帮助我非常开心,也希望给课程多提意见。

    2019-10-30 20:30:21

  • starscatcher

    2020-03-11 10:04:57

    袁老师,我前两天在北美华人的的一亩三分地论坛里大力推荐你的课程啦,收到了热烈反响。请看https://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=605509

    不少同学已经去注册这门课啦!


    下面是我在论坛上的推荐词:

    我发现我近期听的一门课对系统设计面试很有帮助,大力推荐给大家。
    极客时间里的这门“即时消息技术剖析与实战”(https://time.geekbang.org/column/intro/225)

    虽说这门课讲的话题是“即时消息”,但是基本涵盖了所有系统设计的要素:分布式,streaming,batch,cache,容器,网络,并发,扩缩容。

    这门课主要针对职业码农,非常重技术实践和解决方案,比如各种情况下技术方案的取舍。

    我基本是在开车的时候听的,听完了之后收获很大,曾经的碎片化的知识都成系统了。
    另外,这个主讲人的讲课思路非常好,每个模块都基本是按照“主要需求-主要需求实现-次要需求-次要需求实现-扩容”这个思路讲的。这个思路和系统设计面试时的思路差不多,所以对我系统设计面试的帮助非常大。

    不忍独享,推荐给大家。
    作者回复

    感谢您的热心推荐,也希望大家多多指正不足。我会继续努力的~

    2020-03-13 15:55:21

  • 墙角儿的花

    2019-10-18 19:50:50

    感谢老师,很受益。终究要再见,不能再进行交流了,好遗憾
    作者回复

    感谢你的支持,不说再见,可以随时在留言区和我交流的哈。
    另外也可以关注
    我的微博:https://weibo.com/u/1243432494
    我的个人博客:https://coldwalker.com

    最后借留言区打个广告,我们团队在招聘IM高级工程师,有兴趣的同学欢迎应聘这个职位:
    https://www.lagou.com/jobs/6487085.html

    2019-10-18 21:59:10

  • 🐾

    2019-10-18 09:04:26

    真正的高贵,不是优于别人,而是优于过去的自己。
    完整学了一遍,很不错的专栏,还会二刷三刷,袁老师辛苦了。
    作者回复

    谢谢你的肯定,与你共勉。有问题可以留言区随时再交流。

    2019-10-18 21:22:24

  • 我来也

    2019-10-18 23:43:33

    老师辛苦了!
    现在im确实很流行,slack实在是太厉害了。
    恰好最近的项目也是作im的,就再看看别人是怎么做的。等到后期用户量上去了,也知道该往什么方向优化了。
  • leslie

    2019-10-18 09:01:05

    非常喜欢陈皓老师在二叉树视频中的一句话“芝兰生于空谷,不以无人而不芳”。学到现在听过各个老师的方式:最终还是选了刘超老师的方式改进成自己的。
    学习其实很简单:从开课一路坚持到最后一节课一周不拉的学完,其实学习的过程中还是碰到了大量的问题,导致不得不去扩展学习,不过庆幸的是最后坚持的学完了;坚持到最后其实就是一种胜利。学习的过程其实就是不断的自我否定自我前进的过程:定期对比自己每个季度能看到自己的的进步就是一种自我的胜利。
    虽然今天是最后一节课,不过还是想求教老师一个问题;如果自己部署IM的话,那么有没有可用的开源监控系统可用?老师的课程中提到了这块而自己又OPS多年-学习中觉得这块还是非常重要,再好的系统不可避免有问题,监控系统是及时发现问题和解决问题的必要条件;希望老师在这块最后能简单的分享还不错的开源工具,让我能学习和修正。
    谢谢老师一路以来的辛勤付出和顿顿教诲:希望将来还能看到老师的分享;谢谢。
    作者回复

    开源的监控系统很多呀像我们现在就在用graphite,grafana,zipkin这些,也确实不错,有机会可以分享下我们在这一块的工程实践。另外,也谢谢你对我的专栏的支持,有问题可以随时交流。

    2019-10-18 21:21:27

  • bbpatience

    2019-12-25 11:03:57

    今天才读完,有所收获, 感谢老师
  • 小可

    2019-10-18 09:36:31

    这个专栏是我追的比较紧的课程,之前虽然我没做过IM系统,但对IM有点兴趣,网上虽然有类似的博客文章,但都不是很深入。我想知道真正的IM系统是怎么实现的,是不是和我想的一样?一节一节看着专栏,也在一步一步验证我的想法。有些点,经过老师的讲解也是茅塞顿开,真的感谢袁老师真心细致的讲解,谢谢。
    作者回复

    感谢支持和肯定,你们能够真正从中学到东西就是我最大的收获。也相信你的努力会得到应有的回报。

    2019-10-18 21:27:09

  • clip

    2019-10-18 09:22:37

    说来惭愧,之前买了很多的专栏但完成度都比较低。这个专栏是第一个几乎跟着更新看完的,留言的参与度也是最高的。因为现在的工作是 IM 相关的业务开发,但是因为实际开发接触面有限不知道整体的架构。学习专栏之后通过和已经知道的一些信息做对比就有更深的认识了,对之后的工作也会很有帮助。多谢大佬的专栏!
    作者回复

    谢谢你的肯定,能够对你们有所帮助是我最开心的事情。

    2019-10-18 21:24:20

  • 2019-10-18 08:59:33

    老师好,老师的专栏结束了,感觉还没有学够,感觉要学的还太多。如何把im落地生产环境还是摸不着头脑,好在老师已经给我们提供了一个demo。以前没接触过im,问您一个问题。我们想在app中做个消息提醒功能,您说我们该用什么技术,用户在2万左右。目前想用websocket做可以吗?还是用http2的推送。或者在前端做轮询定时请求后端接口就好。还有哪些好的方案?我们用的springboot。
    作者回复

    用户量小的话可以先尝试用轮询来实现,这种实现成本是最低的,然后再逐步发展的话可以基于mqtt来做长连推送,或者直接用第三方的推送服务,用户量小的话也花不了多少钱。

    2019-10-18 21:15:57

  • 哆啦a喵

    2024-04-28 13:14:25

    谢谢老师的课程。

    现在2024了,ai狂潮已经持续整整一年了,其实我理解很多的ai c端应用都可以是一个im系统,尤其是如果加入人人互动的话,那会更加和老的im系统相似了,老师有没有考虑更新一些和ai交互的im系统又会有哪些新的挑战以及技术的变化呀,期待一下
  • 文敦复

    2023-11-02 16:41:50

    谢谢老师,专栏很给力,又看完了一个专栏,继续Go...
  • 追风筝的人

    2022-09-02 14:16:21

    海明威说:“真正的高贵,不是优于别人,而是优于过去的自己。” 人可以被毁灭,但不能被打败。
  • 橙子橙

    2020-10-27 21:30:57

    老师优秀! 收获满满! 好奇老师这种什么都懂的架构师大佬,下一个兴趣点是哪里? 感觉老师应该会对service mesh有浓厚的兴趣 哈哈哈 之前做过一段时间im 小公司也没有量 碰不到这些高并发的线上场景 听了你的专栏 居然有这么多需要深挖的点! 后面肯定会再细读第二遍 加油~!祝老师一切顺心~
  • kevin

    2020-04-13 12:36:56

    请教下老师,有没有资料可以更深入学习下IM这块,特别是高迸发、大消息量的处理
  • Allen

    2020-03-27 09:24:57

    我也是搞IM,但是一直没有机会深入研究,看完这个专栏,很值,感谢!然后最后这个学习方法论也是非常中肯!感谢大佬
  • pedro

    2020-03-19 11:24:42

    在极客摇一摇得到了 “7 天免费看” 这个小奖项,选择了自己还颇为感兴趣的IM专栏,虽然没有从事这方面的开发和研究,但好在 websocket 以及很多东西我都懂。
    在业务设计以及场景探究方面收获很大,准备七天过去了,再买这个专栏好好研究。
  • 尔东橙

    2020-02-15 21:49:39

    老师,基于最近的疫情,导致远程办公软件需求暴涨的情况,能不能加餐谈一谈这种类似于钉钉的软件在这种高并发情况下的问题和解决方案
    作者回复

    这个话题比较大,最近比较忙,等抽出时间我整理一篇来说一下。

    2020-03-13 15:09:43

  • 天健园扛把子

    2019-11-24 20:11:28

    感谢老师,一路走来收获颇丰!
    作者回复

    感谢支持

    2019-11-26 20:40:04

  • yic

    2019-11-22 09:14:50

    第一个学完的专栏,感谢老师的辛勤付出。系统性的讲解了IM系统,很完善的系统。要把这样一个完善的系统做好还是需要一个团队,甚至多个团队的努力。可惜微博在北京,不然倒是想加入一睹老师风采,哈哈
    作者回复

    会有机会的:后厂村欢迎你

    2019-11-26 20:39:25