为什么参加

参加第六届字节青训营之前,我也参加了今年5-6月的第五届青训营,最初是在我们学校一个工作室群里看到的,是一个学长发出来的,当时看到了非常感兴趣,想着是学点新知识,因为当时我差不多就比较会python,但是用这个做后端开发的厂很少,或者都是一些小厂,出于对当前行情的判断,很多大厂都逐渐将业务往golang靠拢,甚至字节已经全面拥抱了go语言,并且还自研了HTTP框架hertz和微服务框架kitex,当时就觉得字节好厉害,如果能来青训肯定能扩宽自己的视野,于是就报名了第五届青训营,那时候的话还是golang小白,就是纯纯啥也不会,相信大家看过字节内部课的都知道,内部课的节奏整体偏快,更加适合一些对golang有了解的同学,或者是其他语言基础非常扎实的同学,看字节内部课的效率就会相应的高一些,我在看wkc老师讲的第一次课就有些跟不上,雀氏我又瞄了下第二次课,更别提有多痛苦了,于是当初我选择去b站找golang入门课看,看的是千锋的韩茹老师的课,当时的5-6月还在学校上课,后面到了期末考试前,也还在不停的学习go语言,差不多我的第五届就在入门golang中度过了,虽然“混”到了结营证书,但是心中却还有几分遗憾,为啥?第一是很多精致的字节内部课还没看,掘金会员就过期了,第二是没有做大项目,当听说第六届青训营有大项目的时候,我就被吸引到了,我毅然放弃了学校的惯例——大二下去企业实训(但是这个听学长学姐说都非常水,并且浪费时间,跟实习还是有很大差别,所以我就用竞赛抵了实训),权衡下来,青训营比实训含金量高多了,自己可以安心的学技术。
其次是如果在第六届青训营中的表现比较好的话,比如大项目获得了比较高的奖项,对之后的实习投字节还是很有帮助的,哈哈哈我初步打算大三下去字节实习(现在得卷算法和八股了┭┮﹏┭┮),加上我还是抖音up主(忠实用户),非得去闯一闯不可。

开营前

我们学校期末考试考试之后,我留在了学校里,继续学习关于golang的知识,这次学的就是比较偏进阶的内容了,比如Goroutine,通道之类的,后面又在b站上找了两个网课,练手了两个小项目,一个用了Gin+Gorm,学习资料和源代码我己经放在了Github上,另外一个用到了beego,我也放在了仓库里,这两个项目还是非常值得练习的,练完这两个项目之后,差不多对golang这门语言也有了大致的了解,还是非常有意思,兴趣也还算浓,另外还报名了宣传大使,嘿嘿最后免试进入了进阶班,还送一个月掘金会员和空调毯,简直爽的不要不要的。

开营后

开营后就不得不提大项目组队了,这次的项目是极简版抖音,据说跟第四届的大项目一样,当时心想做个抖音出来肯定还是很有挑战的,心里就想着组队不能马虎,得找些大佬带我做项目才行,当时是在飞书群里组队,看到有我们学校的队伍,我就毫不犹豫得加了进去,最后咱们队伍又来了两三个人,总共八个人,全是泥电的,我真的要笑哭,我“辈分”最小,其他的几乎都是研究生,瞬间感觉压迫力满满,其实到了后面也没那么觉得了。组队完成了,于是一个难题出来了,那就是选队长,群主问有谁愿意当队长,群里迟迟没有回音,我最后说我之前有过几段项目队长的经历,于是……,于是工具人队长就是我了。开营后我有在跟着内部课的进度学习,这时候的感觉跟第五届截然不同,差不多都能跟上了,也能跟着做笔记,果然入门了golang就是不一样,想起我第五届,难绷哈哈哈。当然跟着青训营进度的同时我也有在做其他课外的东西,完成开源导师给的issue,对github熟悉了很多,学习考试腾讯犀牛鸟人才计划(这个里面的课题感觉不太适合我,就没报,混了个开源人才证书而已),复刻了github上一个比较好的博客项目,日常写博客文章……

做项目

我定期给组员开展组会,通过腾讯会议的方式,合理安排任务,比如数据库的设计,框架的了解选定等等。最后我们初步选定beego为为我们项目的http框架,并且安排了分工,比如谁去写基础接口,谁去写互动接口等等,以及谁最后去写测试,写文档ppt等。刚开始咱们队伍里面都还是比较认真,差不多过了一周左右,我们就完成了整个项目,那时候好像是8月14日,但是我们并不满足现状,或者说我不满足现状,我深知这样的作品肯定在最后的答辩评比中无法拿到一个比较高的名次,于是我就又召开会议,商量下一步的技术选型以及安排。大约开了两次会后,我们才初步有了个结果,比如在现有的基础上,加入微服务,消息队列,etcd,redis等等。于是我就去从网上找教程,找网课,发现beego结合微服务的实例少之又少,唯一找到的几个也说的不清楚,我大概花了接近两天的时间去试错,处于那种一天24小时除去必要时间都在看代码写代码状态,终于,通过我的不断试错,得出的结论是——放弃beego+微服务,转用gin+gorm+微服务,我及时跟组员说,他们也同意了我的看法,于是我们的极简版抖音项目正式从1.0版本向2.0版本推进。但是不幸的是有三位组员都不能参与接下来的迭代开发了,都说自己很忙,当然作为组长的我只能表示理解,也不能强迫别人,毕竟我的“辈分”最小,你说是吧?后面有想过用grpc作为微服务框架,但是grpc是比较纯的rpc,go-micro呢则是一个封装的比较好的微服务框架,学习成本相应的低一些,考虑到要在短时间完成迭代,并且在实际开发中可能还会遇到重重问题,所以我们选定go-micro为项目的微服务框架。由于大家都没学过,也没什么经验,于是我就率先加班加点学习go-micro,便于其他队员学习。经过我艰苦奋战一两天,写完了一个微服务,并且开会给他们讲了整个项目的架构,该从哪里开始写代码,有位队员甚至还没有啥后端开发经历,我也只能挨着挨着将每个文件夹,每个文件是啥意思,以及完成一个微服务的步骤仔细阐述,这样他就用不着花时间去学go-micro了,我最开始想的就是我得最先把写完一些例子,这样他们就可以模仿着写,事实证明在短时间内这样开发的效率雀氏高多了,那几天我确实忙的很,从8.15-8.25这十天,我几乎是没日没夜的写代码,通过谷歌以及chatgpt找相关的用法,比如etcd,jaeger等,我深知只要我能弄出来,我们其他队员肯定就可以弄出来。我仍然记得有天晚上,我写代码写到了凌晨五点,简直不要太疯狂,习惯了每天一两点睡,当然我的身体也有一定反应,这里就不细说了。这十几天虽然很忙,也推掉了导师给的任务,字节内部课也没时间去看了(由于我当宣传大使多了一个月会员,开学之后还可以继续学习,真不戳),但我真的学到了很多,自己独立解决问题的能力有了很大的提升,我也会随时远程远程连接组员帮他们解决问题,每次连线都非常有意义。写代码的项目能力也有了一定的进步,google、copilot和chatgpt真的就是我的编程得力干将(怪不得说以后程序员要失业,难绷),我非常享受每次编码的过程。队员呢也还是非常给力,能够快速完美地完成分配的任务。毫不夸张地说,2.0版本和1.0版本有着天壤之别,代码量,工程量大了好几倍,当然我也希望我们的付出能够得到不错的回报。

答辩

截止目前,我们的2.0版本还在优化,解决一些小bug,总体进度已经完成了95%以上,接下来就是写测试,写文档,准备PPT和演示视频,准备答辩。

我们开了组会,确定了ppt的主要内容,在答辩前我也有做准备,把握语速、控制时间等等。就这样,答辩的这一天到来了,我是第五个答辩,听了前几队的答辩,感觉他们都做得很好,但是有个问题我直接懵了,字节的评委问了有一队为什么不使用字节内部的框架去开发,比如HertzKitex,我感觉这是硬伤,好感度直接降了,虽然没有强制要求。到了我答辩时,评委也问了我这个问题,我们组用的是Go-MicroGin,我当时就说网上找到了更详细的视频教程,关于go-micro的,然后,,,,我肯定也知道,分肯定不会太高,后面评分结果出来后,果然,几乎所有的没用字节内部框架进行开发的队伍的分数都不是很高,我们组只获得了优秀奖,害,毕竟努力了,也不算后悔。

所以给所有想要参加字节青训营的小伙伴们说一声,尽量用字节内部的框架进行开发,这样评委的好感度会高一些,毕竟字节搞这么一个免费的青训营,其中一个原因,估计也有提升自家研发的框架的知名度吧。其实这么一想,获得低分也就不那么奇怪了。哈哈哈哈,没事,付出努力了就好。

最后附上我们组项目的GitHub地址:https://github.com/UESTCByteDance/ByteRhythm,欢迎star!

获奖

jyzs

dxmhj