GitHub Tencent账号下首个开源项目tinker的开发者shwenzhang受邀参加腾讯开源线下沙龙,分享他经过开源后在技术和个人影响力方面获得了怎样的成就,并追根溯源,表达开源项目应该“大而全”还是“小而美”的独特见解。开源不应该是压在开发者身上的额外负担,而是技术完善,个人绩效提升,塑造公司与团队形象的有效途径。

作者简介

Shwenzhang,张绍文,来自腾讯微信事业群,从事安卓开发,主要负责 Android 的性能优化以及终端质量平台相关工作,参与Android热补丁技术tinker的开发。

项目简介

Android热补丁开源框架tinker,具有稳定性高,兼容性强,简单易用等特性,支持在无需重新安装apk的情况下,完成对dex文件,库和资源的更新,紧急修复APP的bug,或发布新功能。

应用宝Top 1000的应用中,有包括微信之内的60多个应用已经使用了tinker进行APP的热补丁。tinker首日star数破千,登上全球日榜热度第一,取得首周star数4000+的成绩。

GitHub地址:https://github.com/tencent/tinker

演讲实录

今天我主要分享一下,开源可以让我们得到什么,可以获得怎样的成长?tinker开源有比较长的时间了,因此我以tinker为例,结合开源经历,向大家分享开源给了我怎样的帮助,希望大家能有所启发。

技术影响力

重构代码,取悦自己

程序员的使命,就是写伟大的代码取悦自己。但由于历史原因,或产品需求变更和迭代,我们往往只能恶心自己,写出来的代码连自己都看不下去。开源就不一样了,代码不仅自己看,还要放到GitHub上给所有人看。代码风格代表公司的形象,也代表我们开发人员的形象。于是,我们在代码规范、注释、项目架构上面都需要更费心思。这就给了我们对项目进行代码重构的好机会,可以优化那些写得不规范的旧代码,让它能被读者更好地接受。

技术视角

我们在公司做产品,要么跟以前版本做比较,要么跟公司其他产品做比较。开源就不一样了,我们的产品需要跟开源社区的业界同类产品做比较,分析他们的优缺点,挖掘他们没有解决的痛点,找到我们比他们优胜的方面。这是做开源前必须经历的步骤。当真正把项目开源时,我们会提供对比结果作为项目的介绍文案,例如微信终端跨平台组件Mars的网络库与其他网络库相比的优势,Tinker为什么比其他热补丁方案好。

“既要埋头苦干,也要抬头看路”,开源使我们站在很高的视角上,去了解社区的新技术,让我们意识到改变,阔斧革新了安卓客户端的开发工具链。

社区支持

开源除了把自己的技术向社区展示,同时我们也希望得到社区的支持。tinker对兼容性有极高的要求。tinker开源后便得到非常广的测试场景,先后在2000多个APP中得到验证,其中不乏UC、百度等知名公司。现在,华为、小米等厂商也会帮我们运行各种自动化的用例,项目出现问题就会及时反馈给我们。这是我们期望的社区帮助。

然而,目前国内的开源社区环境不是特别的好,80%左右的用户仅停留在用的层面,会提出bug或指出待完善的地方,而提出优化解决方案,并做出Pull request的用户不及20%,而且大部分集中在大公司。因此,我们筛选出一批只有30多人的来自阿里、百度、华为等知名公司的tinker种子用户。他们能给到tinker非常多的Pull request和优化方案。

个人影响力

情怀传递

开发者,尤其是新员工,都不会很在意个人影响力,认为只需要写好代码就行了。其实作为新时代的程序员,这样做远远不够。写好代码只是最基本的诉求,程序员还要会做总结,沉淀自己的工作成果,通过分享去引导大家进步。这恰好是开源对程序员的要求。Mars、tinker、WeUI等微信事业群的优秀开源项目,都离不开大量技术文章作为沉淀。项目开源前期和后期,我们都会输出一些有价值的文档,收拢起来,让大家了解一个项目开源的始末。

技术大会/沙龙/直播

开源一个项目就像对外发布一个产品。我们的项目即使再好,也需要发声,让更多的人知道。因此,我们积极参加GMTC、QCon等大型技术大会,还参加一些线下沙龙和直播,把我们的项目放到大舞台上曝光,得到向同行请教和学习的机会,同时也可以了解到业界的新技术。

社区交流

项目开源需要跟社区做一些反馈与交流,例如处理issue和pull request,筛选出种子用户并跟他们深入交流。我们还会给tinker项目比较优秀的贡献者寄礼品作为奖励,已经寄出两三批了。

个人发展

个人影响力的提升,无论是对你的晋升还是个人成长都非常有帮助。大部分参与晋升考核的员工,只是与过去的自己或公司其他人进行比较。可当你拿出的方案是,经过开源社区的验证,我在业界是什么水平,达到了怎样的高度。这显然比其他人更优胜。以我的晋升经历看来,tinker开源绝对是锦上添花的一笔。

开源还有一个很重要的意义是,无论你在哪里,都可以继续为自己的项目做贡献。所以我希望大家都能加入到开源的行列当中。

开源项目的选择

中国人的思维习惯倾向于一个项目做到"大而全",能满足所有功能。但我认为,不妨尝试一下"小而美"。项目质量好坏的关键,在于它能否直击一个特定的痛点,能否有特定的市场定位。它与竞品相比具备怎样的性能优势,在哪些场景下可以解决问题但竞品不能。可能是一件简单的事情,但star数却非常多。因此,优秀的开源项目不一定是功能全面的软件,也不一定是超级庞大的系统,只需要能解决某些人在某个场景下的痛点就可以了。

结语

Github地址:https://github.com/tencent/tinker

欢迎Star Tinker!

去年10月,Tinker在开源社区,尤其是安卓热补丁技术领域掀起热潮,一时名声大噪,带动腾讯开源迅猛发展。但事实上,部分开发者认为,做开源劳累于代码审核、项目运营和社区交流,而这些工作的成效却不一定是立竿见影,因此做开源成为了自己的负担。

打造个人影响力,已经成为新时代程序员对自己职业生涯长期规划的保证。回顾shwenzhang的经历,我们看到开源可为自己赢得更多的上升空间。同时,开源能够为团队的技术能力注入新鲜血液。这些都将吸引着更多开发者加入到开源的行列当中。

文章来源: 腾讯开源 公众号

文章来源于腾讯云开发者社区,点击查看原文