为期一个多月的青训营即将结束,回顾自己一个多月的奋斗,还是有点为自己感动的。简单梳理一下自己这么多天的学习历程和收获吧。
知识体验 | 大道至简的Golang
字节跳动的课程让我认识了golang这一门全新的语言,我惊叹于其简洁的语法设计和可读性。
golang作为静态且自带GC的编程语言,其提供的库函数和go协程让我真切感受到了开发的便利性。golang中只需要go一个关键字就能创建一个协程,且标准库自带http包。
同时,"中心化管理"是go的另一大特点,中心化管理思想使得Go语言的设计和发展都围绕着一系列明确的指导原则。这有助于避免设计上的混乱,确保所有语言特性和功能都保持一致性。然而,这也可能在某些情况下限制了一些创新和灵活性。
瑕不掩瑜,我总体上非常喜欢go语言的设计思想——“大道至简”。
知识体验 | 惊艳的Go三件套
gorm、hertz、Kitex分别是数据库ORM、http和RPC的框架。这些框架的学习让我熟悉掌握了工程开发工具的使用。
在学校的课程学习中,我们更注重于基础知识的学习,例如HTTP报文都会让我们手动解析,因此第一次看到支持IDL生成代码这样强大的工具给我带来的惊喜就想南方的孩子第一次看到了雪。
开发体验 | 充实的大项目实践
这次青训营中,是我提升最大的不是视频课程中的知识,而是实际大项目的拷打:从无到有、从地基到大厦,我自主设计了简易版的抖音后端服务。
由于各种原因,小组内实际开发的队员只有3人,我作为队长,设计了整个项目的架构、确定项目的新需求和改进方向。尽管十分辛苦,但收获到了许多课程中我学不到的东西。例如,项目不同功能之间的实现是否需要解耦?业务逻辑如何分层实现以提供各部分代码的复用性?这些问题在学校学习过程中是很少考虑过的问题,但在实际项目开发中确是很关键的问题。首先,代码需要尽量分层,这样以来,底层的系统调用或IO操作可以被多次服用,其次就是分层的设计有利于后续新功能的添加。
项目的需求复杂多变,通过这次大项目的开发,我进一步学会了各类官方文档的阅读。比如项目的整体框架分层设计我参考了Gorm和hertz官方提供的示例代码,Redis框架go-redis的使用也是通过官方文档学会的。
开发体验 | 优雅的Git多人协作
本次大项目开发时,在git使用方面的收获是:规范化commit、慎用代码格式化工具、commit回退。
由于以前是自己一个人写代码,因此git的commit操作较为随意,但在多人开发中就需要注意了。
首先是commit的信息一定要说明白本次commit解决了什么问题、新增了什么功能,且需要在团队里规范化固定的commit格式。这样有助于组内成员对项目代码的理解。
其次,慎用代码格式化工具。Vscode、Goland等IDE都提供了格式化代码的功能。在我自己写代码时,随手格式化是肌肉记忆,因为这样的代码最好看。但是实际开发中,一个重要的日常场景就是队员比较两次commit的不同点(新增或修改了什么代码),这时如果2个人使用的IDE格式化风格不同,就会造成无法准确地对修改的代码进行定位,因为例如注释风格这样无关紧要的地方也会被标记为不同。因此,实际开发中,要么所有人统一使用相同的IDE,要么大家都不要使用格式化代码这个功能。
最后是对git功能的进一步学习,除了巩固merge、fetch等基本操作外,我还学会了如何撤销多余的commit。例如某队友提交了错误的commit,使用reset --soft功能就可以撤销该次提交,进而让代码树保持相对简洁。
结语
总而言之,充实的青训营体验!感谢字节跳动提供了这样的课程和项目,使得广大学生有机会得到到大厂的一线程序员的课程指导。也感谢勤奋刻苦的自己,不负韶光!