机器之心:你在 Github 上非常活跃,Github 也是现在最流行的开源项目平台,在国外使用已经很普遍,一些学习相关专业地同学甚至都会习惯把学过的课程的作业代码保存在 github 上;但对于国内一些听过开源概念,下载过开源包,却从来没有尝试过参与开源项目的同学来说,还是比较陌生的,甚至他们对于 Git 的 workflow 都不是很了解,可以为这些同学简单讲讲 Github 开源项目的参与流程,以及开源社区的文化吗? 唐源: 大部分的开源软件的发展都是在 Github 上完成的,大家需要去自己熟悉和实践一下 Git 的用法,Github 的开源项目里面一般大家都在 issues 里面讨论一的中会想到一些有趣的点子来对项目的性能进行改进和功能进行延伸。大家可以根据自己的兴趣爱好和需求选择自己想贡献的开源项目,fork 这个项目,对项目进行改进和修改,然后提交 pull request 来让项目管理者进行代码审阅。我最先开始参与的开源软件是 Python 的 pandas 库,它有着特别活跃的贡献者社区,也有着特别有耐心有帮助的项目管理者,每个 issue 都会被标上难易程度以及是否欢迎第一次贡献者,这样大家就可以先选择简单的 issue 来下手,开始熟悉这个贡献的流程。我的第一次代码贡献花了一周才被接受,项目管理者特别细心地对我写的每一行代码进行审阅和评论,保证我的改动不会影响现有用户以及要求新的代码必须有新的单元测试。我在这个过程中养成了很多很好的开发习惯也认识了世界各地的朋友,也希望我的这些建议能帮助到大家。 机器之心:你一方面在 Uptake 带领团队,另一方面又是开源社区的活跃贡献者,从公司以及社区成员的两个不同的角度看,将项目开源的优势和劣势分别是什么呢? 唐源:在参与这些开源项目的过程中,我深刻地体会到这个社区的活跃度以及创新能力。拿 XGBoost 举个例子,一旦有人在竞赛中使用 XGBoost 取得好的名字,这个项目也就得到大家的认可,更多的人就愿意尝试使用,甚至使用在公司核心的软件当中,这样一来,广大的社区能够很好的测试这个产品,我们也能够通过 Bug report 和 Feature request 来更好的理解用户的需求和改进产品,这个过程中几乎所有的对话都是公开透明的,大家都可以参与到这个过程当中,有时候一些小小的代码错误能够被广大开源社区发现,软件的性能甚至突然得到成倍的提升。对公司来说,开源代码也意味着大家都知道你的公司在用什么样的算法,其它公司也可以模仿使用,这样公司间的竞争更大。由于代码都是开放的,很多时候甚至有安全隐患,不过我相信公司开源代码前都是对这些隐患有深刻的理解和应对方式的。 机器之心:一般什么样的项目会被开源?一个项目被开源意味着什么? 唐源:这个有很多情况,比如说有些在公司使用了很多年的代码突然决定开源,这有可能是这个项目的某些员工离开了或者是算法过时了,没必要再保密了,公司决定不再花时间维护,而将维护和测试的责任交给广大的社区用户。也有可能是很新的项目,为了减少自己维护的成本,将项目开源,atv直播,这样大家可以更全面的测试,也能够及早得到用户的反馈意见,打造更加满足用户需求的产品。也有公司的开源是战略性的,想让大家知道自己在这方面是专家,等等。不同的公司有着不同的开源软件维护方式,政策,和原因。一旦项目被开源,这也代表着所有的代码,算法,以及实现细节都是透明的,这意味着所有的竞争者都知道这个公司使用的技术以及在某个细节上的实现,这有一定的安全隐患,但是我相信在开源前这些都是考虑透彻了的。对员工来说,一个项目被开源意味着自己多年来在公司的心血和贡献都能够被大家知道,也让自己的工作更有动力。 机器之心:很多人无法理解开源的理念,认为开源就是免费,和商业利益是相冲突的,你怎么看待这个问题? (责任编辑:本港台直播) |