ASoC参与经验分享
本篇博文主要从个人角度去叙述个人参与ASoC的整个过程及相关收获和建议,希望给小伙伴儿有所参考帮助,有问题也欢迎在评论区留言!
个人github账号:lyf712
个人CSDN账号: adventure.li
个人基本情况
本人是22年考研至南软的学生,计算机基础以及编程能力还是比较薄弱的,当时的情况大致如下:
- 编程语言:Java基础的语法,常见的设计模式
- 算法方面:力扣零零碎碎200道左右
- 项目方面:Spring全家桶
参与前期
在5月份的时候,因为考研上岸之后就拒绝了携程的Offer,后面想想暑期不能荒废掉,于是开始打算去南京的某个公司实习,为23年的暑期实习 做准备(因为南软是两年制,时间比较紧)。
经过投递简历,发现这个时候春招和暑期实习差不多已经结束,也不清楚日常实习这个概念,我便另谋出路(寻求线上实习),通过 搜索线上实习,我发现了开源实习这个新大陆。
注:信息差真的很重要,需要学会在巩固基础、磨炼技术的同时关注业界动态,不断去拓展眼界,参与开源,了解前沿。
而这个时间段我浪费了大量时间在寻求南京小公司的校招和学习一些机器学习研究生相关的东西等和未来发展相关性不那么直接有帮助的上面。
在6月初左右,我联系到开源之夏的老师(李晓双),此时开源之夏已经快截止。在他的建议之下,我了解到编程之夏。 并通过寻找和自己技术栈及能力相关的题目确定下来了 nacos配置变更插件化 这个题目。
注:尽量选择和自己未来发展相关以及有挑战、有难度的题目
选好题目之后,去调研一下前人的方案模板,然后根据自己的想法去写设计方案。从方案设计内容以及和技术相关性甚至排版都需要精心去准备一下。于我而言, 其实基础很薄弱的,但是表达十分有兴趣,并且有一定的基础能够完成该题目,那么就是很有希望的。同时也需要和导师保持沟通!让他感觉到你是有精力去完成的。(能力和态度总得有一个O(∩_∩)O)
注:写设计方案时,一定需要提前多看看相应的文档和原理书籍,并且将项目搭建起来看看源码,有一定的初步理解,之后再根据自己的技术能力去写方案(大致需要包括设计目标,整体架构设计、代码实现方案,难点等)。
到7月初,导师打视频和我沟通,考核。据他说该次选这个题目的有十来个人,需要打视频\语音进行沟通考核一下!我当时很慌,他问了些一致性原理以及容错、容灾方面的设计以及nacos相关知识。 我答得不太好,以为无望了!但最后名单公布有我,并且导师也和我说虽然我基础比较薄弱,但是有兴趣和精力,而且还是有一定的基础去完成的 ! 所以说,当大家能力差得不太多的情况下,就主要看态度了!当然最主要还是能力说了算,刚好我这届可能运气比较好,没有大佬来和我争这个题目。 (据我了解,在ASoC起初时,一个杭电大佬 大三参与nacos开源一年升committer了,然后大四直接又升PMC了。)
注:个人的角度给一些同样基础较薄弱的小伙伴建议
- 夯实计算机理论基础、啃啃经典书籍以及设计类书籍 -- 培养计算机基础技术能力
- 多看源码、分析源码(最好结合语言本身),参与issue分析 -- 培养设计能力、业务分析能力
- 学会从技术代码、设计,架构思想、业务等多方面思考问题
- 多和导师或大佬进行探讨、讨论,思想理念很重要 -- 提升思想观念
参与中期
在8月至9月,即项目实施阶段了。主要就是进行对方案的设计了。该阶段需要做的就是深入理解源码(切忌为了完成任务去,尽早 代码实现),一定需要先理解透彻。画流程图去分析逻辑链以及整个架构的全貌,同时也需要明白该项目的业务领域以及服务用户。 多去社区逛逛、交流区看看用户的问题。此外,重点分析自己题目相关的需求,做到合理的设计。既不要轻设计也不要过度设计。 此外,还需要时刻和你的导师保持交流,确定你的设计没有问题。我此段时间就犯了一些小错误! - 过度设计问题 - 追求代码实现 - 项目模块理解不够到位
当然在导师的帮助下,都顺利解决,也收获不少,所以说沟通真的很重要。大型项目开发特别是开源项目,有效的协作及项目推进很大 程度来源于有效的沟通。
此外,除了完成以上任务,还需在语雀上更新你的进度以及完善设计方案(据说这是社区评分能否结项的依据,但其实只要认真做了都会给结项的)
参与后期
最后,9月初左右,进行了结项答辩。其实主要问了一下收获相关的,比较愉快,只要暑假两个月认真做,结项就是走个过程。 后面在十月也陆续收到了奖杯、背包(十分精美)和奖金,真的性价比很高。
一些感悟
一些建议
- 大胆尝试,不要害怕失败,尝试了才有可能有机会!
- 参与开源,一定需要坚持持续!
- 多和优秀的人结交,学习他们的优点!
- 时刻保持 编程语言、算法、应用、设计架构、问题分析的学习!
个人在研究生开学之后又陆陆续续参与OB数据库大赛、研究生课程学习及参与导师课题杂七杂八的。就未能 保持参与nacos建设。有余力的小伙伴儿还是建议可以将分析社区issue问题,反复看项目的代码设计和复现来专研透一个项目,从中学到并且深入理解项目的维护,架构设计和关键技术点,切忌半灌水。