共计 5375 个字符,预计需要花费 14 分钟才能阅读完成。
#17176(https://github.com/apache/doris/issues/17176)在 Apache Doris 社区是一个非凡的存在。跟大多开源社区类似的中央在于,这属于社区为了吸引更多新生力量参加而设置的 Good First Issue。不同的中央在于,新生力量对于参加开发工作的激情超乎设想,每一批新工作的公开就如同春运期间火车票的发售——可能迟了一小会儿,就与心仪的工作擦肩而过。
Issue 发起人是廉玉康(GitHub id:Yukang-Lian),一名来自哈尔滨工业大学深圳校区的研二学生,2022 年开源之夏 Apache Doris 社区我的项目的参与者之一。或者玉康同学从未想到,一次偶尔的机会,会将他的成长经验与许多身处异地素未谋面却气味相投酷爱开源的同路人串联在一起。这其中也蕴含了唐思阳(GitHub id:TangSiyang2001),来自中南大学人工智能业余的在读学生,怀抱着有限激情立志在开源世界奉献本人的力量。也正是因为在社区的相遇,会让他动摇地在开源世界中摸索。
2023 年开源之夏再次启程,我和两位同学聊了聊,心愿诸位能够听听他们的社区成长故事。
从校园到开源
与步入实在职场合不同,学校的课程学习中接触的常识大都是形象而离散的,以理论知识居多,很难有机会将它们进行工程化的整合。而当一个成熟的、可供理论生产应用的我的项目出现在背后时,往往学校所授予的常识是远远不够的,也是一种截然不同的体验。
玉康很认同这一点,他之前加入过几次国外的公开课,写过一些 Project。而面对 Apache Doris 这样一个理论生产利用的我的项目,相较于课程我的项目来说,规模和难度都不可一并语之,具体体现在:
- 代码的严谨性与复杂性。课程 Project 代码总行数往往在数千行左右,相比之下 Apache Doris 有着近百万的代码、蕴含 C ++/Java 等多门语言,宏大的代码量须要在结构复杂且逻辑形象的同时令人易于了解是非常不易的,同时还须要兼顾内存治理及零碎最终性能体现,这对工程师的 Coding 能力是极高的。而在课程学习中思考的就绝对繁多,仅需思考如何实现即可。
- 我的项目的稳定性与测试的完整性。对于可能反对理论生产的我的项目,稳定性是重中之重。为了保障运行稳固,须要引入各种理论生产场景的测试 Case,从单元测试到回归测试,每一个 PR 都要通过测试流水线的测验以及 Reviewer 的评审能力合入。在开发过程中,玉康也逐步开始大量写测试 Case 来笼罩更多场景,以保障开发性能的正确性,这个过程十分晋升本身工程能力。相比之下课程中的 Case 就不那么残缺、品质绝对也不是太高。
- 与工业前沿接轨。时代在一直倒退,很多前沿的论文在一直发表,但这些论文的工程实现与落地十分艰难,通常一个想法在多年后工业界才会实现。而 Apache Doris 社区对科研火线关注水平十分大,去年启动重构的查问优化器和向量化执行引擎我的项目就是业界前沿论文的理论工程落地,这也使得 Apache Doris 在性能上获得飞跃性提高。对于学生群体来说,有机会能浏览到这部分源码无疑对论文和前沿趋势的了解更加深刻。
思阳同学同样意识到了这一点,每一行代码的敲打都须要思考实现是不是清晰的、可保护的、可验证的、易扩大的 …… 开源社区中的代码除了须要本人的认可,更须要经由同行前辈的评审并通过宽广用户群体的考验。这和以往本人作为惟一的作者和 Maintainer 的我的项目相比都十分不同,挑战性、成就感和技术上取得的晋升都有着质的飞跃。参加开源社区能够接触到很多课堂上从未学过的常识,参加 Apache Doris 社区的理论感触来看,刷新了本身对 SQL 执行引擎的认知,冲破了课堂上学习的 Volcano Model,意识到了 Pull-based 和 Push-based 的差别,意识到了 Vectorized Execution Engine……这些常识以前虽有耳闻,但究竟不如理论的设计文档和工程例子来得活泼具体。
初印象
“说起来纯属偶然,我是在开源之夏的泛滥数据库我的项目中顺手挑了一个 Logo 简洁难看的开源我的项目,凑巧就是 Apahce Doris。”玉康同学这样讲到。最后在开源之夏申请开源我的项目时,玉康同学对 Doris 的理解还比拟无限,查阅材料后理解到 Doris 与他将来立志从事的数据库畛域非常符合,于是抱着试一试的心态分割了导师杨勇强(GitHub id:dataroaring),对于不明确的中央始终秉承被动发问、穷追不舍的态度,正是凭借持之以恒的精力才博得了开源世界的入场门票。
绝对于廉玉康的缘分使然,唐思阳的抉择显得自有定数。一方面,是在日常学习和实际中接触了大量的开源我的项目,理解过许多开源社区的工作模式、也学习过许多开源我的项目的源码,然而另一方面,本身却素来没有亲自参加到开源的建设中,始终处于好奇、张望的状态,但开源凋谢、自在、理想化的合作模式始终深深吸引着他。也正是因为有相似 GSoC 谷歌编程之夏和 OSPP 开源之夏之类面向学生的开源流动,帮忙学生能够寻找到参加开源的契机。凑巧那段时间思阳同学正在学习 OLAP 相干的常识,因而尝试在社区的 Good First Issue 留言支付工作,也正是这条留言,玉康同学成为了思阳同学在社区第一个接触的开发者,在深刻的沟通交流后,思阳同学对 Apache Doris 社区也有了进一步的意识。对于思阳同学来说,Apache Doris 社区不仅欢送新鲜血液的退出,还一直推出一些开发工作供学生开发者实现,这对学生群体参加开发非常敌对,这也动摇了他继续奉献的信心。
值得一提的是,退出社区以来,玉康同学也在向思阳同学分享了许多学习教训和技术成长经验,给予了他很大的启发与帮忙。
第一个 PR 的合入
对于志在参加开源社区的学生而言,第一个 PR 的胜利合入至关重要,这不仅代表胜利迈入开源世界,还将是将来持续参加社区开发的莫大激励。
刚开始退出社区接触的 PR 都比较简单,尽管第一个 PR 的代码量只有不到 100 行,却正式将玉康同学引入开源之路。而思阳同学则是将 GitHub 头像第一次呈现在我的项目主页的短暂霎时截图记录了下来。或者对于社区的许多开发者来说这样的画面司空见惯,但作为第一次参加奉献的他来讲,的确有一种神奇又美好的体验感。也许多年当前回头看到这登程里程碑,也会为当年老成持重的本人感到快慰——加入开源,成为 Doris 社区的一份子,是他心中在大学生涯做过最有意义的事件之一。
或者有很多同学同样期待通过开源社区来晋升本人,却苦于无从下手,对此思阳同学有不少想法。
首先要找到适宜本人的社区,能够依据本人的学习方向先大抵过滤出适合的畛域,其次依据开源社区的沉闷水平、文档建设、合作模式进一步筛选适合的社区。再进一步,察看社区是否对老手敌对,比方 Good First Issue 标签下 的 Issue 数量、难度以及工夫散布、回应的踊跃水平,这些都是十分牢靠的指标。
在进入社区后,能够尝试踊跃地沟通。遇到困难时首先尝试自行思考、检索予以解决,解决不了的状况下将问题清晰地形容进去、提供充沛的无效的辅助信息,向 Mentor 发问、向社区报告,踊跃寻求解决办法。
敢于踏出第一步是至关重要的。毕竟本人也因为张望而错过了许多参加开源的机会。之前也胆怯以前素来没开发过 OLAP 零碎、没有足够的相干常识的储备,甚至对我的项目的代码都不太熟悉,胆怯不能胜任这些工作。然而来到 Apache Doris 社区后发现,咱们的老手工作对常识储备并没有设想中那么深的要求,甚至有些工作和 OLAP 甚至并无分割,比方实现一个简略的 SQL Function、做个简略的日志改善、实现一些 HTTP 接口等,也只须要相熟相干的开发语言便可上手。即使遇到了艰难,也有 Mentor 来领导帮忙咱们。
实际上,下定决心的第一步才是最难的一步,“敌人都是纸老虎”。
路漫漫其修远兮
乔治马洛里说,“因为山在哪里”。参加开源亦是如此,只管过程中不可避免存在艰难险阻,但每实现一项工作就如同登上一座险峰,即享受凌绝顶的成就感,也期待开启新的征程。
玉康同学印象最粗浅的工作就是 SSL 的加密传输,这也是第一个独立实现的性能 / 模块,实现灵感落地。独立做一件事件的时候,须要思考的货色很多,比方如何兼顾代码的简洁与性能的残缺、如何不毁坏之前的代码构造,如何不影响内存与性能等等,这项工作大概继续了 1 个月的工夫,期间遇到了许多艰难与 Bug,除了须要一直查阅、学习相干代码与材料,还要与社区同学多多沟通、思维的碰撞会带来火花。前辈的教训和倡议是值得参考和借鉴的,也正是因为有着前辈的反对和激励,才撑持他独立实现了性能开发。
这艰巨的过程让他播种了前所未有的能力成长,相熟了社区分布式合作的流程,包含提交 PR、Review、批改再到最初的合入流程,同时对大型工程项目的了解加深了许多。当初的他读代码和了解代码的速度相比拟之前有了十分大的晋升。
思阳同学同样遭逢了不少辣手的问题,首当其冲的就是 BRPC-http 这项 Task,这也是思阳同学承接的第二个 Task,目标是在 BE 端用 BRPC 实现 http-server 以取代原先基于 libevent 的 http-server。本来并非是一项艰难的工作,但在理论我的项目过程中遭逢了多方面的挑战:
- 其一,在回归测试的过程中碰到了许多麻烦——难以模仿的前置条件、难以获取的元数据、难以复现的、只会在线上的 P0 流水线才会触发的 crash…… 简直花了实现周期 2 - 3 倍的工夫,最初在 Mentor 勇强的指导下才顺利完成了绝大多数的测试;
- 其二,在实现这一 Feature 的期间,恰好社区另一位开发者须要实现 https 和鉴权性能,工作内容产生重叠,其间面临了协调与单干的考验,最终通过踊跃沟通顺利解决了这问题;
- 其三,也是目前正在攻克的一项难题:因为 BRPC 的 http 实现不满足以后需要,为了圆满地实现迁徙必须对 brpc 自身减少 server-end-progressive-reader 的 Feature。Mentor 勇强甚至间接分割了 BRPC 的作者之一,为这个 Feature 的实现做领导。目前这个工作仍在继续沟通和推动中,也期待思阳同学可能圆满地实现这项工作。
人不知; 鬼不觉,从思阳同学第一次正式参加社区奉献曾经数月,其间实现了 5 个 Task、合入了 9 个 PR,目前也依然在为下一个 Task 和 PR 继续致力着。这些在开源的旅途伊始踏下的或深或浅的足迹,也成为人生经验中不可或缺的一段播种。
这里不谋而合,他们也想通过这次机会向 Mentor 勇强、正宇(GitHub id:freemandealer)以及其余导师表示感谢。Mentor 在代码 Review 时提出过许多严格又中肯的倡议,也领导和推动了许多性能的实现,在遭逢问题时总能作为 Problem Killer 为他们答疑解惑,即使有时候只是些奇怪的或不合理的想法,也总能急躁地解答。同时也在开发习惯上提供了许多贵重的倡议,并为学生们提供了开发机解决了后顾之忧,使得大家可能毫无顾虑的进行工作开发。
精彩有限的将来
时至现在,从玉康同学接触 Apache Doris 社区曾经有近一年的工夫。在短暂的工夫里,他从一个经常提出问题的开源初学者,成长为能够为新鲜血液答疑解惑、可独立实现 Feature 的沉闷贡献者。不仅技术上播种微小的成长,更是结识了一群气味相投的小伙伴,接触了许多业界资深工程师,视线失去极大拓宽。对他而言,开源给了他一个走出舒服区的机会,可能不满足于当下、一直成长。
参加开源的这段历程也给了思阳同学不同水平的播种及感悟:从学习的角度来看,参加开源能够印证在校学习过的常识,此前浏览过的一些 Paper 的内容都能在 Doris 中找到形迹,而通过 Doris 也能找到更多同方向的、更深刻的材料进行学习。其次对工程能力的晋升也非常显著,唐思阳显著感触到浏览、了解代码的能力比起以前有了不小的晋升,开发、调试的技巧也有了不小的改善。从待业的角度来看,开源社区提前给了学生开发者最实在的职场体验,这份体验不只是合作沟通及能力的晋升,还能够通过尝试开源帮忙他们明确将来的职业方向。
身处在信息爆炸的时代,身边充斥了太多资讯,要想得到某个信息其实非常简单,只不过看本人是否违心去致力寻找,更要害的在于是否违心走出舒服区。如果有幸能找到本人违心坚持不懈的方向,请不要悭吝付出,因为可播种的更多,人生有有限可能。
值此 2023 年开源之夏启动之际,心愿用切身感受通知大家,“参加开源是一种成长,是一种历练,也是一种喜好,是一种现实的寄托”,也更多期待并肩作战的你。
开源之夏 2023 已正式启动,旨在激励在校学生积极参与开源软件的开发保护,造就和挖掘更多优良的开发者,促成优良开源软件社区的蓬勃发展。
Apache Doris 社区主页:https://summer-ospp.ac.cn/org/orgdetail/150a8cca-5352-471a-8e…
社区我的项目行将公布,报名参加我的项目者将会取得社区精品周边,体现优秀者更有机会取得社区用户企业内推机会、甚至间接取得 SelectDB 技术团队实习机会,期待继续关注!
# 嘉宾介绍
廉玉康:哈尔滨工业大学(深圳)管制迷信与工程业余 硕士研究生(在读)
唐思阳:中南大学 人工智能业余 大三年级(在读)