关于开源:社区圆桌分享代码学习无止境程序员如何规划自己的职业生涯发展

8次阅读

共计 9298 个字符,预计需要花费 24 分钟才能阅读完成。

CloudWeGo Study Group 是由 CloudWeGo 社区发动的学习小组,发展以 30 天为一期的源码解读和学习流动,帮忙新成员融入社区圈子,和社区 Committer 互动交换,并学习上手 CloudWeGo 几大框架我的项目。

目前 CSG 第二期——Hertz 框架篇曾经正式启动!本期流动期间安顿了 4 期直播分享,主题别离为:

从精通烤肉到精通 HTTP——HTTP 框架初识;
如何利用命令行工具 Hz 疾速开发 Hertz 服务;
如何对开源我的项目进行学习——从全局到部分剖析的思路;
代码学习无止境,程序员的将来归于何处

本文为 CSG 第二期第四场直播中 杨文 王伟超 李龙 圆桌探讨分享的内容。

回放链接:https://meetings.feishu.cn/s/…

01 圆桌议题

  • 议题一:开源自 2020 年开始列入国家布局后,开源我的项目越来越多。开源我的项目的涌现,为大家提供了学习和深度理解降级我的项目的路径。从学习的角度来看,一个开发者如何参加我的项目、学习我的项目?
  • 议题二:CloudWeGo 开源我的项目次要方向是云原生微服务框架,这类我的项目次要的应用场景是什么样的?学习这类我的项目的价值点在哪里?混迹社区有什么教训分享?
  • 议题三:程序员作为我的项目使用者的角色,开发者作为开源我的项目设计者的角色,这两种角色关注的点有什么不同?作为一个经验过这类角色转换的社区 Committer 来说,有什么教训能够分享?
  • 议题四:在社区视角和全局角度下,谈一谈为什么大厂都在招聘 Go 工程师?程序员应该如何布局本人的职业倒退?程序员最终的归宿是哪里?
  • 议题五:大佬分享环节,大佬们关注的博主 / 学技术的网站 / 书籍举荐。

02 嘉宾

03 议题一

开源自 2020 年开始列入国家布局后,开源我的项目越来越多。开源我的项目的涌现,为大家提供了学习和深度理解降级我的项目的路径。从学习的角度来看,一个开发者如何参加我的项目、学习我的项目?

分享人:王伟超

对于这个问题的介绍次要从以下四个方面开展:

  • 如何与 Kitex、CloudWeGo 社区结缘;
  • 集体对于云原生和开源文化的意识;
  • 为什么要参加开源以及我了解的开源精力;
  • 集体当前对开源的想法。

如何与 Kitex 和 CloudWeGo 社区结缘

其实与 Kitex 的结缘是十分偶合的,尽管做了几年后端开发,然而感觉在技术上还是存在一些瓶颈,因而想要晋升本人。回顾一下自己的过往经验:

  • 2021 年 9 月尝试在 InfoQ 做输入,挑战日更,更多是做翻译;
  • 10 月底决定学一点特定的技术,发现之前本人学习的更多是“道”和“法”层面,次要对于编程理念的常识和了解,很少对于“术”和“器”;
  • 联想孔子的一句话:“吾尝终日不食,终夜不寝,以思,有益,不如学也”,就是之前都是思维层面和架构层面的思考,不如学点具体的技术。因而,我决定再找一个话题,从感兴趣的方面动手,然而 Docker、云原生、架构设计、微服务思考这些话题十分炽热且竞争很大,可能一时难以动手做出本人的货色;
  • 想起刚刚开源的 Kitex,以及刚开源的 CloudWeGo 我的项目中相干的一些中间件汇合的材料和实际应该比拟少,于是开始了《CloudWeGo 微服务实际》系列,做了一个小的汇合,然而也没写残缺,只是写到了操作数据,不是一个齐全的业务实际。

对我集体而言,理解微服务框架是一个很好的入门,并且更重要的是可能参加到社区中来。我在理解框架的过程中,常常在 CloudWeGo 飞书群理解相干动静,看一下 CloudWeGo 相干的 PR 或者 issue,关注一些最新动静,看看哪些货色本人是能够做的。前面我次要是为 Kitex 服务发现、服务注册相干的组件、单元测试等方面做了一些奉献。

集体对于云原生和开源文化的意识

那么我是怎么一步一步理解或者接触到开源文化的呢?

这大略要回顾 2018-2019 年,过后在深圳常常加入一些技术峰会、Meetup 等流动,这个城市的技术气氛还是比拟不错的。那时就能显著地感觉进去云原生、围绕容器的虚拟化 K8S 相干肯定是一个技术趋势,过后也是因为对 Docker 感兴趣,所以更多地注意了 K8S 这些相干的技术畛域。

最初在机缘巧合下,理解到 Linux Foundation,即 Linux 开源基金会,会有一些技术认证。过后我想通过这种机会,特意地学一些特定的技术,比方他们推出了 CKA、CKS,所以这也是一种学习的渠道。

不仅如此,我还会常常关注基金会推出的一些开源我的项目。过后在学 K8S 的时候浏览了一遍 K8S 相干文档,给他们的文档提过一些 PR,这是我最早接触到开源。

为什么要参加开源以及我了解的开源精力

  • 学习优良的开源我的项目

防止做井底之蛙,要走进来看看他人是怎么做的。比方:优良的编码、代码标准、设计模式、架构思路等等,寻找更多正例和最佳实际,宽阔技术视线。

  • 开源世界是一个容纳凋谢的世界

你能够在 Github 发现世界上更多更优良的人,与他们共事,向他们学习。理解他们的技术思路、思维形式、职业规划,也会给本人带来启发。

  • 协同共建,从点滴做起,融入社区带来成就感

开源很多时候是用爱发电,开源的第一步是把代码凋谢进去,后边很多时候是靠社区驱动迭代和演进,众人拾柴火焰高是开源的精华和意义。咱们为社区奉献的点点滴滴当前都有可能帮忙很多用户解决问题,这是开源我的项目生命力的体现,也是咱们成就感的起源。

  • 集体当前对开源的想法

如果能够,我当前想把开源当成事业。次要起因有以下几点:

  • 幻想

已经有一个幻想,可能近程工作,即为开源产品奉献代码或者在一个基金会工作。

  • 布道者

能够和喜爱的人和事打交道,不必思考太多商业化,不必内卷。

  • 将来打算

以后想法可能不能欲速不达,然而至多在 CloudWeGo 找到了一个切入点,心愿能更好地为社区奉献一份力量。从字节跳动的一系列动静和策略布局来看,CloudWeGo 将来肯定能够在 Go 微服务畛域做出更多具备影响力的开源我的项目。

分享一名很有代表性、具备极客范儿的开源爱好者——苏业钦,是云南的一名儿科医生,然而他业余其实也是一个 Linux 玩家,感兴趣的同学能够理解一下。

最初心愿大家都可能在代码的世界里找到乐趣!


分享人:杨文

对于这个问题,从我的理论教训登程,将从两个方面进行分享:

  • 本人去做的角度;
  • 参加我的项目的角度。

本人去做的角度

本人主导去做开源,其实相对来说不是很硬核,比方 Go 夜读这样一个 Repo。

Go 夜读目前在 Github 上 Star 数应该有 1W+,其实 Star 数量自身不会代表什么,它更多代表的是一种经验,从这个角度来看,我感觉 Star 数的参考有助于咱们了解开源的精力,或者说它是开源所带来的反馈。

  • 明确开源我的项目运作的意义

不论是自身很硬核的我的项目还是根底组件,或者是一些能解决理论问题的、帮忙大家学习成长的内容,咱们都要去想这个货色到底有没有帮忙,怎么样做起来,这其实就是思考参加开源的一个模式。如果你是为了赚取 Star 数,那可能会有违你的初衷。其实在我看来你要把它当做一个开源我的项目去运作,这个外面可能学到的货色或者可能去了解开源精力,以及开源所带来的一些正反馈其实还是蛮多的,不须要关注 Star 数自身。

  • 我的项目倒退须要过程

起初,开源我的项目的倒退可能是由某一两个人发动的。在这个过程中,你能够引入一些对这方面感兴趣的人,或者通过你的我的项目给他人带来帮忙,而后吸引他人进来,进而逐渐扩大我的项目规模。不论是什么样的我的项目,其实都是这样的过程。即使是那些现阶段比拟成熟、规模较大的我的项目,比如说 Go 夜读、PingCAP 的 TiDB 以及其余的一些 Go 的 Repo,其实都是这样一点一点做起来的。

首先就是要去做,做到一个你认为还不错的水平,而后在你的朋友圈或社区去推广。比方  CloudWeGo,其实也是通过理论解决了一些场景需要的问题,而后开源进去,之后一步一步操之过急倒退起来。相似明天咱们这样的一个流动,其实都是在实实在在地帮忙社区的人。我的项目自身如果有价值且有生机,不论你是组长还是参与者,只有退出其中,其实都能学到很多货色。

以上就是从本人的角度登程,找到一个你本人想要去投入的我的项目,或者对于你来说须要解决的痛点问题,而后继续迭代。是金子总会发光的,我的项目也一样,只有我的项目是实实在在有价值的,总会被更多的人关注到。

  • 参加我的项目的角度

另外一个视角就是参加一些我的项目,但在参加我的项目前要有所抉择,抉择规范能够参考以下三个方面:

  • 能解决你的问题。这是评判你要怎么抉择我的项目、参加我的项目的条件或规范。
  • 确定开发语言。抉择相对来说覆盖面比拟广的开发语言,不论是我的项目构建还是开源的运作会更体系化、规范化,防止踩坑。
  • 参加开源我的项目的目标。思考开源我的项目的影响力,是否有所学习和播种并为我的项目输入一些本人的价值。

就我的教训而言,倡议抉择较为欠缺、影响力比拟大的开源我的项目。在 2018 年我参加 TiDB 并取得了 Active Contributor,尽管我参加理论硬编码的维度不是很深刻,然而更多的是重在参加。很多货色必须得投入去做,能力继续产生和输入你的价值,同时也一直排汇到社区给你的反馈。

总之,抉择以后适宜你的,以及明确你想要成为什么样的人,承当什么样的角色,而后对应地寻找一些我的项目帮忙你实现指标。其实参加开源我的项目也要不自量力,抉择真正适宜本人、感兴趣的畛域,而后在这个技术畛域之上持续深耕。只有通过长期的技术方面的投入,才可能在该畛域外面真正有一些比拟好的产出和后果,从而真正学到内核并取得晋升。


分享人:李龙

对于开发者如何参加开源的问题,我提供了以下三种参考形式:

  • 通过参加 First Good Issue 奉献 / 解决社区 Issue;
  • 通过实战(我的项目实战 / 性能比照等),发现可优化的点,解决并反馈社区;
  • 间接浏览源码。

参加 First Good Issue 奉献 / 解决社区 Issue

  • 个别社区会有很多积压的 Issue,初期能够筛选一些简略的 Issue。

我最后做开源也是因为写业务,基本上在字节外部所有的 Go 服务都会应用 Gorm 作为它的 ORM。我在理解 Gorm 的时候,发现过后 Gorm 的 Issue 其实是比拟多的,包含当初也是积压了 100 多个左右。于是我发现能够通过解决一些社区的 Issue 上手参加开源。

有的 Issue 可能是应用方面的 Bug,能够尝试修复这些 Bug。我通过一直地解决 Issue,逐渐相熟框架,有简略的 Bug 去修复,大略继续一到两个月,对这个框架基本上也就比拟相熟了。

  • 开源社区个别会不断提供老手工作,大家能够积极参与。

CloudWeGo 社区常常发一些 First Good Issue,即老手工作,能够通过接老手工作参加社区。我和伟超老师起初接的老手工作都是服务注册发现的扩大、一些 Demo 服务、示例服务等,在写这些示例服务的时候,其实也能够发现一些问题,而后再去修复。

综上,能够通过社区发 Issue 或者本人被动找 Issue 的形式参加开源。相比而言,像 Gorm 自身 Issue 就很多,感兴趣的同学能够挑一些简略的 Issue 加入。CloudWeGo 会定时发一些老手工作,大家也能够踊跃加入。

参实战(我的项目实战 / 性能比照等)

  • 批改文档上的实例 Demo 反馈社区。

一些开发者可能会看文档上的 Demo,把 Demo 粘贴过去运行,然而发现间接粘贴过去无奈运行,或者是文档写得有问题,此时能够通过批改文档上的实例 Demo 反馈社区参加开源。

  • 做一些压测,去压下不同框架的性能。

之前就有一些同学喜爱压测比照不同框架的性能,这种形式须要尽量保障偏心、清晰的准则,当时对框架有所理解,通过压测后发现能够优化、迭代的点,从而优化后奉献社区。

间接浏览源码

当然也能够间接浏览源码,然而对于小白来说比拟难上手,也会比拟苦楚。

以上是三种参加开源的形式,另外在对象抉择上我集体比拟偏向于钻研平时会应用到的我的项目,比方我平时会应用到 Kitex 或 Gorm,这样感触会好一些。

04 议题二

开源 CloudWeGo 开源我的项目次要方向是云原生微服务框架,这类我的项目次要的应用场景是什么样的?学习这类我的项目的价值点在哪里?混迹社区有什么教训分享?

分享人:李龙

CloudWeGo 的应用场景

如果是心愿抉择一款高性能、灵活性强以及能够满足外部定制化需要框架的用户,CloudWeGo 提供的微服务框架会是一个不错的抉择。CloudWeGo 开源我的项目次要有以下特色:

  • 高性能(Netpoll / Sonic / Frugal 等)

比方底层的 Netpoll 自身就是一个高性能的网络库;Hertz 内置了 Sonic 高性能的 JSON 编解码库。

  • 提供了丰盛的扩大能力

无论是 Kitex 还是 Hertz 都提供了丰盛的扩大能力。Kitex 比如说像限流扩大、Transport Pipeline-Bound 扩大等;Hertz 自身的扩大能力也比拟强,能够满足一些比拟共性的定制化需要。

  • 优化的用户 API 接口

提供了一些比拟敌对的用户 API 接口,并没有特地简单。

学习这类我的项目的价值点

  • 学习框架分层设计 / 一些比拟好的设计点

【举例】Hertz 的四层分层设计,各层之间不耦合,扩展性强。

参考资料:字节跳动开源 Go HTTP 框架 Hertz 设计实际

  • 学习框架的一些性能优化的 tip,扩大本人的视线

【举例】Netpoll 的性能为什么会比规范库在某些上场景下高很多?

参考资料:https://juejin.cn/video/70462…

  • 压测框架性能,探讨交流学习

社区里很多同学喜爱压测框架,尤其是针对 Kitex 和 Hertz,以及它的两个 Benchmark 仓库。咱们十分心愿能在社区见到这些对于底层的技术优化以及相干探讨,并且不拘于 Kitex 和 Hertz 两个框架之间的差别点及应用形式。通过对相似于像 Hertz、Fasthttp、Gin 框架的性能测试和比照,能够关注其性能改良以及性能优化这种比拟底层的技术深度的逻辑。

社区教训分享

  • 一个好的 Case:通过在社区学习优良的设计和性能优化点,奉献兄弟社区。

例如 liu-song(Github ID)对于 shardmap 中 size 大小的调整 · Discussion #306 · cloudwego/kitex,在社区发动探讨,并将优良的、可借鉴的中央利用到其它的开源我的项目中。

探讨地址:https://github.com/cloudwego/…

  • 一个不好的 Case:对应用的框架提出了一些含糊的问题 / 评估。

例如经典评论:“设计的不太好 / 设计的太重了”,具体哪里设计的不好须要说出理由,这种 Case 请及时躲避,尽量用数据谈话。

05 议题三

程序员作为我的项目使用者的角色,开发者作为开源我的项目设计者的角色,这两种角色关注的点有什么不同?作为一个经验过这类角色转换的社区 Committer 来说,有什么教训能够分享?

分享人:王伟超

我的项目使用者视角

作为一名我的项目使用者,在考量开源我的项目时会思考以下几点:

  • 开源我的项目是否会继续保护;
  • 文档是否丰盛;
  • 社区是否沉闷;
  • 以后我的项目是否可用、好用,能解决当下团队的技术问题;
  • 不满足的中央是否能扩大。

开源我的项目设计者视角

作为一名开源我的项目设计者,次要是思考如何更好地或者更快地帮忙用户解决其问题。以 CloudWeGo 我的项目来说,作为字节外部实际的总结,开源进去是想帮忙更多人解决一些共性问题,因而可能会更多思考以下问题:

  • 通过保护我的项目承受用户反馈,还有哪些共性的问题没有笼罩到;
  • 开发新的一些个性;
  • Bug 的保护是否及时;
  • 是否比拟快的帮忙用户解决他们遇到的问题;
  • 文档保护与不断丰富,业务案例的整顿。

06 议题四

在社区视角和全局角度下,谈一谈大厂为什么都在招聘 Go 工程师?程序员应该如何布局本人的职业倒退?程序员最终的归宿是哪里?

分享人:杨文

为什么大厂都在招聘 Go 工程师?

  • Go 语言的逐渐倒退

我感觉 Go 倒退起来很重要的起因,在于云原生方向的倒退、Docker 容器化畛域、K8S 包含前面串联起来的 Grpc 整个生态,从而导致或者触发了一些根底组件的研发。再加上云原生、K8S 在各个厂商的利用,触发大家去做很多的基建、流控、分布式链路追踪业务,以及后续很多根底组件的开源都抉择了 Go 语言。

  • Go 语言的个性

基于 Go 自身的语言个性,去做这些事件是比拟善于的。Go 语言自身高性能且简略的特点,具备切换成本低,上手门槛低的特色。语言根底方面,C 语言根本能够实现无缝连接,如果是脚本语言,可能绝对要换一下思路,然而 go 的性能比拟好,PHP 转 Go 能够解决很大的一个性能问题。而且 Go 上手很快,官网文档运行 demo 也很快,所以如果要去学习不必放心会很难以上手。

  • 大厂的利用场景

大厂其实会有理论的一个利用场景和解决问题的需要。Go 语言能够很快上手并实现相干业务,速度快、性能好也满足了其业务须要。从基建的维度看,之前大厂很多时候可能用 C、C++ 或者 JAVA 构建整个链路,一套下来会比拟影响效率,相比较而言,Go 的实现就会比拟疾速、高效。

程序员的职业倒退及最终归宿?

我有一个观点:语言只是用于解决问题的工具。

对于集体职业倒退和职业路线,须要思考好以下几点问题:

  • 自身善于语言,心愿在技术深度下来发力?
  • 联合所在业务,心愿晋升业务能力、相干的集体软性素质以及治理能力?
  • 通过技术解决业务的问题,带来业务价值?

从集体角度登程,如果要去看职业倒退,可能就不能单单只是看你的技术栈或者你的技术点,而是要看你善于的货色,以及在你可预感的时间段,你的劣势和你想要倒退的方向,跟当前工作联合起来,明确本人的需要。

Go 所带来的价值维度,只是作为一个能帮忙你踏入门槛、或者可能帮忙你去解决问题的语言工具。而集体的职业倒退次要取决于以后你本身的定位和价值点。Go 是用于业务,还是去做基础设施和底层一点的内容,都取决于你本身所在的畛域、或者是工作需要,它只是作为可能满足你职业倒退须要的一门语言工具。

另外,以后我了解,Go 工程师的工作还是偏差业务的,或者产品性能偏多一些,在基建或偏底层一点的绝对比拟少。大厂应该也是业务或产品居多,然而基建等其余方面的需要可能会逐渐处于回升的状态。

Aftership Go 利用次要还是业务侧,还有一部分会和云原生或基础设施有肯定的关系,然而还没有笼罩很广、或者像字节这种有专门的架构部门去做 Go 生态的根底建设。目前还没有,依据公司倒退的阶段前面可能还是会须要并去开展做这方面内容。

07 议题五

大佬分享环节,大佬们关注的博主 / 学技术的网站 / 书籍举荐。

分享人:李龙

举荐起因:

  • 《设计数据密集性利用》

是一本特地经典的书,会笼罩到开发过程中各个方面遇到的一些问题,绝对比拟全面。

  • 《程序员的自我涵养:链接、装载与库》

内容会比拟偏底层相干,次要包含链接、装载、编译等。

  • 《Google SRE 工作手册》

不只是 SRE 须要看,研发也能够看。

  • 《微服务架构设计模式》

大家在做微服务开发时遇到的一些问题,在这外面会失去一些解决方案,供大家参考。


分享人:杨文

举荐起因:

  • 《微习惯》

比拟偏差集体,从养成微习惯的心智与集体思考的维度开展。微习惯的理念,就是构想到一个十分小的维度,不论怎么样你都能达成,也没有累赘。书中想表白的概念,就是很多时候做事件次要是要口头。习惯为什么难以养成?次要是在于你会认为它是一个累赘、影响你的失常工作与生存、打乱你的节奏,所以你做不到。因而就要从很小的出发点开始。用一段时间,用一个渺小的口头,束缚本人逐步形成习惯,最终实现幻想或者达成指标。

  • 《沸腾新十年》

这本书举荐的起因是有很多小伙伴刚刚毕业,尽管晓得挪动端互联网,然而可能有很多货色还不是很理解,或者不太晓得互联网倒退的十年(2010-2020 年)历程。在最近十年以内,有一些什么样的企业或者利用?有哪一些挪动利用以及它们是怎么一步步倒退的?这个过程中遇到了什么问题与变动?这本书会比拟具体的开展解说。

  • 《Salesforce 传奇》

这本书跟我当初所在的行业 ToB SaaS 相干。Salesforce 是 sale SaaS 行业的引领者,或者说是一个开创者。这本书就是介绍 Salesforce 从开始、到它逐渐发展壮大的整个历程,是 Salesforce 的一部成长史。这本书对于 SaaS 行业有很大的指导作用,怎么样一步一步到哪个阶段、能够采纳什么样的形式、或者会经验一个什么样的阶段,对于在这个行业外面去了解 SaaS 应该还是会有很多帮忙的。


分享人:王伟超

  • 书单

我的书单举荐其实更偏差于“道”的层面,“道”的意思指这些书很多都是一些架构或者编码、编程的思维。Ruby 之父松本行弘的《代码的将来》外面有一点对于面向对象的解释令我印象比拟粗浅,书中解释了咱们当初的编码编程为什么要从面向过程做到面向对象,它的益处是什么?背景是什么?大家感兴趣的话能够看一看。

  • 博客

面向信奉编程、极客兔兔,这两个是比拟典型的博客。一个是面向 Go 设计底层的,一个是面向 Go 编码的一些框架、中间件的实现。Go 夜读这个是比拟综合的,如果想在 Go 的技术栈深耕的同学能够理解一下。

  • 软技能

这其实是一个很大的话题。就任场软技能而言,比方麻利开发,当初很多公司都在提议,咱们作为开发也能够理解一下规范的或者说最佳实际,麻利开发应该是怎么做的。还有就是沟通反馈,件件有着落,事事有回响,这些沟通的技巧也是须要留神的。

08 Q & A

Q:Go 语言后续的一些整体架构的演进如何?次要是为了反对什么?

A:次要是针对性能的问题,反对一些业务倒退。就字节跳动外部的一些场景来说,框架调优次要是为了性能优化。比方对于框架而言,传输的整体损耗在数量大规模积攒的根底上都是实打实的老本,所以通过优化性能能够缩小咱们老本的一些损耗。也正因为如此,字节跳动,包含 CloudWeGo,都在性能畛域继续的推动,以期达到最优的状态。同时,心愿更多关注这一方面技术,心愿在这里可能取得一些极致的性能的框架,包含一些极致的性能的体验的同学继续地关注咱们的我的项目。

Q:大厂对 Go 工程师的需要和要求?

A:大厂招聘 Go 工程师以后业务侧会多一些。还有一部分就是在做基础架构的内容,次要针对根底的框架,对其性能方面进行整体调优。这一部分所波及到的语言会比拟偏硬核,可能不光要会用 Go 而且对于 Go 的内核,包含语言生态、底层逻辑都要十分相熟,而后再在这外面去做相干的一些框架的性能优化。

联合云原生现状,以后其在行业里处于倒退中的状态,很多企业正在处于云转型的阶段,而这个过程是须要肯定工夫的,可能无奈一次性迁徙到位。这种状态之下,其实会波及到十分多的后盾逻辑与操作,所以针对架构调整、演进可能也会是后续 Go 工程师倒退的一个职业方向。而依据不同公司倒退的阶段,后续更多的公司倒退起来之后,可能会减少对于根底建设的需要,推动和保护本人的基础架构,由此对于 Go 语言工程师的需要也会有一些相应的晋升。

我的项目地址

GitHub:https://github.com/cloudwego

官网:www.cloudwego.io

GitHub 9K Star!字节高性能开源微服务中间件 CloudWeGo 技术沙龙来了!相干链接:https://mp.weixin.qq.com/s/x0…

正文完
 0