参与启智社区开源项目心得分享——陈彦骐

开源,顾名思义,指的是开放源代码。开放意味着任何人都可以自由阅读每一行代码,这给开发者无形中提出了很高的要求。

个人开发者或者小团队往往没有“我的代码是要给别人看的”的意识,而是习惯于自说自话。人们在网上聊天时尚且能够注意言辞,但在将自己的代码开源时往往忽略了别人的感受。就以往的经历来看,许多团队将开源变成了任务,为了开源而开源,一手复制粘贴就把自己那套没什么注释和说明文档的代码扔到开源平台上。这些代码作者对于有人提问代码细节常常不予回复,而如果指出了代码漏洞,有礼貌的尚且能感谢并修补,更多的是石沉大海,讨论也就沉寂了。

因此开发者大抵需要意识到,开源一方面是为了让他人更好的学习,另一方面也是为了吸收他人的合理意见而改进代码。一个代码量稍大的项目或多或少都存在bug,被指出了问题至少说明有人在认真阅读代码,这也是工作被认可的标志。

就SpikingJelly的开发经历而言,早期的框架是非常不完善的,代码仓库也无人问津。这时候的框架还停留在仅依靠“托管代码”来进行版本管理的阶段。当时的框架定位在自用,完全忽略了社区的存在。使我们态度发生转变的是,在开源一段时间后,我们注意到了另一个功能定位完全类似的框架,其开发者是同一科研领域的科研人员。他们的人手非常少,只有两个来自不同国家的开发者主导开发,最初开源的时间也与我们很接近。不同的是,他们已经累积了一定量的用户,这些用户基本也是来自同一领域的科研人员,以及一部分正在观望学习,想要进入这个研究领域的新生血液。这让我们开始思考:开源框架是给谁看的?亦即目标用户群体究竟是谁。一个基于科研用途的框架要求使用者至少拥有基本的领域知识,这样的门槛实际上已经把目标用户刻画得十分清楚了。基于此,在开发时,代码各个模块的功能与科研中的研究对象必须有非常清晰的对应关系,不然本领域人员都无法理解的话,就不可能再有人来使用了。我们重构了代码的层次,使得这个映射关系更清晰,同时也开始撰写文档,提供一些简单的范例。

经过这次重构之后,的确出现了少数人来关注开源仓库,不过也仅此而已。没有人真正使用起来,同时我们也注意到,有不少研究者在关注我们的框架时,使用着国外的同期开发的框架。于是我们又提出了问题:我们的框架有什么优势?就问问题提出的当时,我们无法作答。因此必须设法给框架制造一个亮点。这也是迄今为止我们一直在努力的方向。

对于基础性的编程框架而言,不同的框架往往侧重不同,框架功能的多寡往往也与领域自身的发展息息相关。回顾TensorFlow和PyTorch这两个深度学习框架的发展史,我们能够清晰的观察到性能与编程友好性这两个指标之间的权衡贯穿始终。深度学习社区中不少人也同时使用两种框架并贡献代码,这使得两者能够互相借鉴,吸收对方的优秀功能。我们也大概会遵照类似的路线,在打造自身亮点的同时,吸收现有其它框架的成功经验。

作为一个小规模团队,我们的开源之路道阻且长,需要时间检验我们的路线是否正确并不断修正。也期待能有同领域的科研工作者通过OpenI发现与试水,为科研领域倾注源源不断的动力。

作者:陈彦骐

上一篇:参与启智社区开源项目心得分享——严翔东
下一篇:参与启智社区开源项目心得分享——丁健豪