乐趣区

关于数据库:开源代码难阅读几位研发的妙招帮你解决

毫无疑问,开源曾经成为将来软件倒退的一大重要趋势。对于企业来说,开源可能进一步晋升产品的影响力,拉近与用户的间隔,那对于程序员来说,开源又能带来什么呢?作为程序员的你,是否也会产生这些困惑:工作这么忙,哪有工夫参加开源我的项目?程序员如何能力退出到开源我的项目中去?浏览一份开源代码都很难,更别提去 Review 代码了……为了找寻答案,咱们沟通了几位深刻参加了开源我的项目的研发共事,把他们的相干见解进行了整顿和总结。

首先要理解你本人,参加开源我的项目的初衷是什么

分享人:涛思数据研发工程师 唐方智

作为一个有教训的程序员,大大小小的我的项目我也参加了不少,程序员圈子里的一个景象是,在做我的项目开发时总是感觉被赶着跑,这或者也是大环境下的一种无奈。对于这一点,我前面开始无意识的调节,办法之一就是踊跃地参加开源我的项目,和泛滥开发者一起合作、分享、激励,这种情绪也失去了极大地改善。

我参加开源我的项目起源于一次偶尔的尝试,因为帮忙同部门的一个搭档排查代码缺点而入的坑。大略状况是,他认为一家开源社区的代码写的不好,就本人改了一下还提交了 PR,后果被人驳回了,他不置信本人代码有问题,感觉这个开源社区有些针对他,就拉着我一起排查。但在排查之后,咱们发现的确是他改写的代码有误,之后我俩单干批改后再次提交了 PR,令人高兴的是,很快就收到了 GitHub 发来的合并胜利的告诉邮件,还播种了社区代码管理人员的一个大大的赞。

这次经验让我感觉惊讶的一点是这个社区的开发者程度,瞎话讲,我帮着批改的代码提交的确有点难度,如果没有资深的内核开发功底是很难解决的,但社区的开发者对于轻微的对错也能很快分辨进去,其功底之强让我眼前一亮,对这个我的项目也产生了很大的趣味。

基于此,我关注了这个开源我的项目并成为了它的 Contributor,前面还加入过他们组织的 Meeting Up,也和社区的开发者频繁地探讨技术问题,令我惊喜的是,在这个过程中,我对此前略感干燥的开发工作有了截然不同的激情。究其原因,我感觉是因为开源社区和关闭部门集中开发的工作模式齐全不一样,在这里你能遇到同道中人,既能沟通技术,也会 Battle 办法,而这些社区开发人员也带着一股对技术油然而生的酷爱,并没有像企业开发者一样被明确的指标和功利谋求所左右。

综上所述, 我参加开源我的项目的初衷,一是感觉本人的代码创作失去了认同,二是在日常的工作之余,关注开源我的项目让我对程序员的日常有了新的感触,也为我打造了一个既能提高又不会产生太多解放的社区圈子。 咱们在做任何一件事件时明确本人的初衷和目标是很重要的,如果你明确了本人参加开源的初衷和目标,不仅会干起来更有劲,还能从中享受到乐趣。

有志愿去尝试,但如何口头?

分享人:涛思数据研发工程师 唐方智

我晓得还有一些小伙伴,有心想要投入开源,但却迟迟没有找到无效的门路。从参加开源的教训登程,我总结了以下几点办法和门路,给到大家参考:

(1) 圈定几个指标,找到喜爱的我的项目。 多关注 GitHub 上热门的方向,剖析这些技术方向和本人想尝试的方向是否匹配,从中选取技术体系和本人相符、利用前景和本人想从事的畛域大致相同、并且我的项目社区沉闷、开发者绝对丰盛、交换也简略的我的项目。

(2) 找到喜爱的我的项目后,能够多关注一些它们分享信息的渠道, 包含微信群、博客、Twitter、issue 邮件告诉、网站信息等,便于你及时地找到社区搭档,并疾速融入其中。

(3) 尝试对一些 issue 进行剖析和解答。 先不要急着提出问题,能够先看下他人都提出了哪些问题,联合你本人的技术实际,看看这些问题是否本人也可能解答,这样根本能够评估出社区开发者的程度。当然,还是要感性地看,冀望一个社区中全是资深的精英开发者,那是不事实的。

(4) 去排查并尝试解决一些 Bug。 在进行破绽修补的过程中,能让你更好地相熟代码构造和代码内容,并对代码中的模块有一个全局的认知。

(5) 尝试做一次 Pull Request。 联合你对我的项目的相熟和了解水平,开始真正地为我的项目奉献代码力量,能够试着发动一些合并申请,将你的 ideas 奉献给社区,并附上你对我的项目和代码的思考,看是否可能获取到一些共识。

(6) 写一些博客或者技术分享的文章。 在文章中能够对我的项目做一些分析,去发现我的项目更多的热点,而后和身边的人一起探讨,和气味相投的开发者融入到一起,也为本人积淀一些思考。

(7) 加入一些线下的 Meetup。 以线下见面的形式结识沉闷在社区中的网友,以及我的项目的开发成员,去理解他们的理念和价值观,并做一些深刻的技术交换、行业交换,进一步拓展视线、思维和人脉。

(8) 置信本人所做的致力和工作具备长期价值。 当你真正身处其中后,你会发现参加开源为本人和参加其中的开发者带来技能晋升和精力愉悦等诸多价值,是帮忙你实现胜利的一个有效途径,强化这股信念,最终让本人酷爱合作,酷爱共享和开源精力。

我本人也参加过很多开源我的项目,就拿我目前在参加和建设的 TDengine 来讲,当初基本上做物联网大数据场景的企业,都会将其列为 Database 选型调研的产品之一,接下来随着物联网的疾速倒退,TDengine 肯定还有更大的利用空间。 无论是从哪个角度来看,本人参加建设的开源我的项目可能始终失去倒退和保护,这都是一件让人十分愉悦的事件,毕竟它代表着咱们对生存和技术的酷爱。

咱们从开源我的项目中能取得什么?

分享人:涛思数据研发工程师 温洲

我从开源我的项目中学到的第一件事就是如何去浏览、了解大量的代码,这也是成为一个业余选手的必经之路。在当下开源已渐趋风行的时代,开源我的项目也是层出不穷,很多优良的开源我的项目源码都是通过实际验证、千锤百炼而成的,和我一样年老的程序员,能够从这些我的项目中学到很多课堂上学不到的货色。从本身开源经验登程,我总结了以下四个方面的取得:

  • 编码格调。在开源我的项目中你能够看到各种各样的编码格调,尽可能让本人尝试去适应这些不同的格调。此外,你还能通过代码格调识别我的项目业余水平,如果一些我的项目应用了多种编码格调,那它就会显得不太业余,对立的代码格调对于代码的可浏览性十分重要。
  • 编译形式。从开源我的项目中你能够学习到不同的编译形式,例如:Make、CMake、GYP 还有各种 IDE,学习到如何用各种形式配置你的工程。
  • 代码治理形式。从开源我的项目中你能够学到不同的代码治理形式,例如:SVN、GIT。学会熟练地应用它们,并且高效地使用到开发过程中,这会帮忙你更加深刻地理解我的项目分支的治理。
  • 解决问题的形式。从开源我的项目中你可学习到工程师是如何解决问题的,比方如何抉择算法、如何抉择库、如何把设计转化为模块等,借鉴他们的教训来帮忙本人更好地解决工作中呈现的问题。

Review 代码真的很难吗?

分享人:涛思数据解决方案架构师 刘溢清

不晓得大家有没有这样的感触:浏览一份开源代码太难了,更别提去 Review 代码了;面对一个宏大的开源我的项目,真的不晓得如何下手……我之前也有过这种困惑,直到起初在应用 TDengine 这款 Database 时遇到了一个问题(此时还尚未退出涛思数据)——我须要从 TDengine 迁徙数据,官网提供了一个 taosdump 工具,然而导出的数据表有失落。

过后我第一工夫向官网反馈了这个问题,但因为源码是开源的,我就想抱着试试看的心理,本人进行一下修复。随后我就关上了 TDengine 在 GitHub(https://github.com/taosdata/T…)上的源码。

二话不说,gdb 走起:

(gdb) p tableDes->cols[26]
$17 = {field = "inspection_well_place", '\000' <repeats 44 times>, type = "NCHAR\000\000\000\000\000\000\000\000\000\000", length = 150,note = "'一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一", <incomplete sequence \344>}
(gdb) p tableDes->cols[27]
$18 = {field = "\270\211 四五六七八九十一二三四五六七八九十一二三", <incomplete sequence \344>, type = "\272\224 六七八", <incomplete sequence \345\215>,length = -1159429960, note = "\214 三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三", <incomplete sequence \344>}

随后发现在代码里曾经把这个字段截断了,回过头去查看代码,发现这里对导出字符的长度做了限度:
#define COL_NOTE_LEN 128

接下来把这个长度改得更长了一些,编译运行,表就顺利地导出了。我也胜利参加到了开源的事件中了,自我感觉还挺良好。

试想一下,如果说当初抉择了一个闭源的软件,产生了这个问题或者有了新的需要,咱们就只能去分割开发团队,至于什么时候可能修复或者开发都还是个未知数。如果可怜开发团队曾经遣散,就彻底凉凉了。

除此之外,在我看来开源软件还有很多长处:

  • 开源的代码让人更有信念去应用。源码开源,他人就能够去钻研底层的实现,能够去证实你的性能和实例。
  • 好的开源我的项目,代码品质更高。越是好的开源我的项目,越是有更多的人违心去保护他,长此以往,性能就会越来越欠缺,代码也会越来越强壮。
  • 好的开源我的项目,代码更长久。一个好的我的项目不只有作者本人保护,还会吸引更多的开发者去协同,如果作者不再保护,也会有其余的人站进去持续保护。
  • 开源的代码能够有更多的客制化开发。没有一个工具能够做到实用于任何场景,每个我的项目都会有各自不同的需要,咱们能够依据需要来定制属于本人的版本。当初阿里抉择 Flink 的时候,Flink 也并没有如许欠缺,阿里也是重构了 Flink 的分布式架构,实现了增量的 Checkpoint 来应答阿里的需要。

通过参加 TDengine 开源这件事,我也给本人建设了信念,发现其实加入开源并没有咱们设想的那么难,以至于起初我越来越多地参加到了开源的我的项目中:

从这件事件说起,不仅是为了分享我是如何踏入开源大门的,也是为了证实 Review 代码真的没有很难,你能够从以下三点登程:

  • 需要驱动:对于需要驱动型的人,带着需要去学习,效率才是最高的。很多时候,咱们并不需要通读所有的代码,齐全能够从本人的需要登程,这样也会充斥能源。
  • 抉择低终点:咱们能够从一些简略的模块动手参加到开源我的项目中,较低的终点更容易上手实际,也有利于更深刻地去浏览其余代码。
  • 高效应用工具:通过 gdb 等本人善于的调试工具,能更快地理解代码运行逻辑,理解参数、栈的信息,对于源码浏览很有帮忙。

一些好上手的开源我的项目举荐

分享人:涛思数据研发工程师温洲

万事开头难,对于老手来说,面对宏大数量的代码时必定会很困惑,所以咱们能够抉择一些对初学者敌对的我的项目开始。上面这几个我的项目是我参加过的,对于初学者来说上手会绝对容易。

Mozilla Firefox Source Tree
Mozilla Firefox Source Tree 蕴含有十多个子项目。他们提供了齐备的文档,便于新的开发者上手、奉献代码。因为整个开发波及到的技术比拟多,他们还设立了独自的 Channel,开发者能够在这些 Channel 寻求帮忙。在他们的文档页面上,列举了一些 BUG、缺点等,开发者能够从这些根底问题动手尝试进行学习或者开发。

Visual Studio Code
VS Code 是一个相当大规模的开源软件。目前这个软件有超过 5000 个开放式问题,这就意味着你能够很容易地从中抉择出一个或者几个问题来重点跟踪。在此过程中也能够提交新的问题、新的个性要求,对于你学习这个工程会有很大帮忙。

TDengine
TDengine 是涛思数据应用 C 语言自主研发的一款时序数据库(Time-Series Database),已在 2018 年 8 月推出正式商业化版本,目前单机和集群版均曾经实现开源,是一款较为风行的时序数据库产品。如果你对数据库或 C 语言感兴趣,那能够尝试浏览一下 TDengine 的代码,都有比拟残缺的文档阐明,上手操作会比拟容易。如果你违心,你甚至能够参加到我的项目的开发中。

写在最初

很多人在参加开源我的项目时,往往会纠结于本身工夫无限、常识储备有余、不晓得如何开始、找不到适合的我的项目,因而一拖再拖,直到激情消退。但其实参加开源我的项目基本不须要思考太多,它不像日常的公司我的项目开发,有进度要求、布局合作,很多开发者参加开源就是为了缓解工作中各种压力的。你能够随时随地投入到这项事业中,不须要有任何压力和包袱,在这里能够纵情地发表本人对于技术和代码的认识,与其余的社区成员沟通和交换。

从下面三位开源参与者的分享中咱们也能够总结出参加开源的意义:当你真的成为一名开源社区的贡献者后,你会为本人的 idea 被社区接收而兴奋,会为和社区开发者们欢快真挚的合作而开心,会因为偶然一次的线下见面会彼此感情的增进而愉悦…… 你会发现,除了日常的工作之外,原来还能和一群有独特抱负的敌人一起做这样有价值有意义的事件,过程中你不仅播种到了更多的认可和成长,也对技术和工作产生了更多的激情。


想理解更多 TDengine Database 的具体细节,欢送大家在 GitHub 上查看相干源代码。

退出移动版