如何充分利用开源项目

最大化利用开源项目使自己受益

如何充分利用开源项目

开源项目是一件有趣的事情,不仅仅在于把代码push到GitHub时的成就感,更在于与它的使用者沟时你能发现一些有趣的现象。今天这篇文章的灵感来自我自己的开源项目使用者提出的问题。在我想与各位分享一下我自己对开源项目的理解,以及如何充分利用开源项目的一些想法。

以我在GitHub上的开源项目 cnn-facial-landmark 为例。该项目都提供了完整的深度学习模型训练流程,并充分考虑了初学者的技能水平。这种开源项目类似将发动机的金属外壳换成透明玻璃,让你清楚的看到内部齿轮咬合的具体细节,适合学习TensorFlow使用。目前从微信公众号寻来的提问者以学校的学生为主,集中在本科毕业与硕士研一这个阶段,大致可以分为三类。

第一类,以应用开发为目的。他们的问题集中在代码的具体使用方法。例如在哪里下载数据,如何生成数据集等基础问题。这一类提问者对深度学习的理解较浅。所提问题的答案大部分能够在README文件、教程文章、代码中找到。也许是由于应用开发的周期短,他们的目的非常明确:将代码跑通即可,不想去研究其中的细节。

这种情况下,我会询问他们这么做的背景是什么。每一个开源项目自诞生起其实就有着明确的使用倾向。例如TensorFlow这种开源项目,对大部分人来说研究其源代码的必要性很小,使用编译好的文件是主流。所以,如果使用者的目的是将它作为应用的一部分,我会推荐一些更加偏重应用的现成解决方案。该项目对于他们来说并不合适。

第二类,学习者。这一类人群其实正是该开源项目的目标受众。他们的技能水平不一,有一些已经具备了基本的代码编写能力;有一些还需要掌握Git这样的基础操作。但是他们的目的往往是一致的——掌握TensorFlow的使用方法。

这一类学习者在时间上较为充裕。对于这种状况,我会建议他们不要急着跑通代码,而是抛开现成的代码,从头开始,一步一个脚印慢慢成长。首先掌握与项目相关的基础知识,然后尝试自己从零开始构建解决方案;在遇到无法解决的问题时,转向开源项目寻求灵感与帮助。

这种方式听起来很耗费时间,但是从长远来看却是最节省精力的方法。真正的学习过程是将外部知识“内化”的过程,这个过程必然要经历困难与挫折,但是这是人类大脑有效处理信息的一种方式。这也是我自己在学习新知识时所采取的策略。

第三类,研究者。这一类人群的目的是在该项目主题上获得最佳表现,他们关注具体的指标参数如NME等,最终的目的可能是技术报告与学术论文。他们中的一部分人目前还属于第二类学习者,另一部分则可能已经掌握了必要的知识与技能。

如果是前者,我的建议是先参考第二类学习者,掌握必要的知识与技能。之后你自然就会明白该开源项目的使用方法,例如将其作为初始模板或者参考实现,然后改进并加入自己的想法实施验证。如果是后者,他们往往很清楚自己该如何做。

以上是我自己在维护开源项目过程中的一些体会。这些建议仅供参考,如果你觉得有用欢迎分享转发~