【腾讯犀牛鸟开源人才培养计划】如何准备实战项目

794 阅读6分钟

相信大家在之前的学习中都有了或多或少的收获,很多同学也已经跃跃欲试,准备编写 proposal 大干一场。 但是编写proposal之前有些建议要给大家。

挑选合适的项目

如何选一个适合自己的项目简而言之就是选择自己有把握能够拿下的,因此对于本次13个开源项目有一个初步的了解至关重要,选择开源项目,主要根据自己的能力、时间、擅长的领域。本次13个项目涉及到多个领域,可以根据自己的知识储备选择一个与自己的技术栈相关项目。

image.png

  • 人工智能:Angel-高性能分布式机器学习平台,ncnn-神经网络推理框架,TNN-跨平台AI推理框架

  • 物联网:TencentOS Tiny-腾讯物联网操作系统

  • 大数据:Apache Ozone-分布式大数据通用存储

  • 云原生:TKEStack-开源容器服务平台,SuperEdge-云原生边缘计算平台,TARS-高性能微服务治理框架

  • 后端:TencentKona JDK,APIJSON- 后端零代码接口和文档ORM 库,Apache InLong(原Apache TubeMQ项目)

  • 前端:Hippy-跨平台动态化框架,OMI-前端【跨框架】框架

我们可以通过观看乐享平台的13个项目的配套项目介绍与相关文档并简单浏览项目 Github 仓库对自己有意向的项目有一个初步的了解,再查看每个项目的导师提出的 idea 有哪个自己能力能够达到,如果感觉都是比较难的也不要灰心,先去了解你预选的项目,查看项目的官方文档,跑一个 helloworld 程序(基础项目 demo),大部分项目的官方文档是有引导的 start 部分的,当基础 demo 跑通之后,可以去看看项目的feature 列表和 issue 看一下有没有自己力所能及的可以很快修复开发的,pull request 能够帮助你很快的深入项目,不要灰心,参加项目也并不需要你直接上来就啃源码,很多项目的开发也是围绕项目的周边生态进行扩展或者重构,因此多去使用这个项目,发现项目问题,并想出你的 idea 也是一个不错的办法。

深入项目 idea

无论是导师提出的 idea 还是 自己提出的 idea ,都需要对于这个 idea 有些深入研究,导师为何提出这个 idea ,这个 idea 涉及到哪些技术 ,如果是你如何设计这个项目的方案,目前是否有相关的解决方案可以迁移,分解你的项目需求,把需求细分,逐个设计,最后拼在一起。尝试编写第一版 proposal ,包括你对于项目的了解对于idea的想法,如果你是自己提出的 idea ,可以从为何提出这个 idea ,这个 idea 的提出有哪些意义,第一版 proposal 是你与导师第一次交流的主要工具

联系导师

联系导师这个环节也非常重要,大多数 idea 都是由导师建议提出的,当然你也可以提出你自己的 idea 与导师探讨可行性,因此提前与导师联系是必不可少的,如果你能和导师探讨一下他的方案,至少让他感觉你懂他的方案,并且心里有底能够实现,那这个环节的任务就算完成了,当然最基本礼貌,热情是必须的.有几点需要注意,邮件交流大多是异步沟通,建议一次性把你的问题想清楚,并且有条理的整理成文,这样可以节省双方时间,并给你的导师一个不错的第一印象,不要害怕去提问,无论是项目理解还是对于idea的想法,都可以深入交流,但是还要注意一点就是,联系导师之前一定要对项目有一定的了解,并且做了一些准备。

编写 proposal

对于大项目,proposal 一定要简洁,把你的想法用最简洁的语言描述清楚,具体的实现细节可以详细介绍,编写正式 proposal 可以按照以下三方面来编写。

技术方案

技术方案主要包括你对项目的理解,以及实战项目中导师提出的 idea 或者自己提出的 idea 原因,项目idea实现的你认为的技术方案,并佐以前期研究的相关资料。

  • 根据自己的理解和前期项目学习储备来拆解目标开源项目,尽可能描述各个模块的功能;
  • 重点对项目发布的任务或需求进行分析,体现自己的思考和思路;
  • 具体描述自己的技术方案,比如自己的方案将会添加哪些模块,以及这些模块如何与现有模块通信;
  • 最好能为自己的方案找到一些可执行的依据,包括但不限于:其他项目的成功经验;论文等提供的理论依据;

在了解项目与idea并于导师初步沟通过,基本上你已经可以较完善的编写出项目的技术方案了,总而言之你可以通过以下途径去深入了解项目。

  • 使用该项目
  • 阅读源代码和文档
  • 跟踪邮件列表和开发提交
  • 解答新手问题
  • 提交BUG报告和重现BUG代码
  • 提交Patch和测试代码,反复修改Patch
  • 讨论新功能需求和设计

时间规划

本次实战项目持续8周,时间规划的颗粒度最好以周为单位,可以辅以时间表来表示,每周做些什么,最终能够实现什么功能,多个功能怎么妥善的整合,当然编写时间规划的时候,最好根据个人的开发能力安排进度并留出空余量,每周周末时间用于复盘项目开发进展,进行查缺补漏。

项目经历

项目经历这一点就相对比较简单了,项目经历的描述是为了让项目和项目导师对每一位申请学生的技术实践能力有更清晰的认识,从各种方面去展示自己就好了单不仅限于(个人开源项目,开源项目贡献,实习经历,参与开源社区建设) 如果有github或者gitee账号并且有日常维护的项目可以写上,这是加分项。(如果是只是刚注册账号的话,没有什么实际项目还是不要写上了)

总结

总之编写proposal的核心就是围绕项目与idea提出你的认识与想法,并从各种角度展现出你对于项目的热情,与能够完成任务的能力。希望大家都能交出一份满意的proposal。