从毕业到现在已经接近两年了,在这段时间里,我日常开发都是使用的 Java,因为大学自学的是 Java,然后毕业找到的工作也是做 Java 开发的。现在做 Go 其实也没多久,但还是想把自己的一些经历和学习经验都记录下来,要是能帮到你就更好了哦!
其实 Go 在这两年一直都挺火的,毕竟是 Google 的亲儿子,又凭借着 docker 和 k8s 这两大杀器,自身又有一些相对于其他语言的优势(例如并发处理、通道),而且近几年 Go 的工作岗位也在慢慢增加,一些大厂都逐渐使用 Go 做为开发甚至主力开发语言。去年(2020) 6 月份的时候,我可能是闲着没事干,就在网上订阅了一个 Go 语言的小专栏,然后跟着学了一些,这算是开启了自己的 Go 学习之路吧。
当然平时还是以工作为主,所以那时候学习 Go 仅仅是出于兴趣,并没有要打算转行到 Go,学习起来也没啥压迫感,挺慢的。学习的方式很简单,就是跟着专栏上的内容,照着敲代码,由于有 Java 的经验,所以基础语法知识这一块学习起来没啥压力。我认为编程其实就是熟能生巧的东西,没啥技巧可讲的,特别是对于一些初学者来说更是如此,很多不明白的东西,自己多动手敲几遍就慢慢懂了。
几个月之后,大概 2020 年 10 月份的时候吧,靠着自己在零碎时间的学习,Go 的大多数基础知识我算是掌握了,并且这期间我还在 Leetcode 上刷了一些题,使用 Java 和 Go,算是对基础知识的一个巩固。这也是一个不错的经验,当你学习一门编程语言的时候,如果想要巩固一下基础语法,那么多敲敲代码,例如刷一些 leetcode 的题目就是一个很不错的选择。我的 github 上面记录了自己刷过的一些题,建议你学习的时候,也可以参考一下,动手实现一些常用的数据结构和算法,并且刷一些 leetcode 题目,是一举两得的事情。
https://github.com/roseduan/algo-learngithub.com
在国庆节放假前夕,我在网上看到了一个简单的数据库模型的论文,内容很简单,我很快便理解了,于是我想能不能使用 Go 来实现一下,借此更加好的巩固自己的 Go 知识。事不宜迟,我便开始了,但是事情并没有我想象的那么简单,看起来容易,但是代码并不好写,完全不知道如何下手。于是我查阅了其他的资料,借鉴了其他的一些项目,到 12 月初的时候,才开始写这个项目的代码。然后整个 12 月,我都在用 Go 写这个项目,大概一个月的时间,项目最初的版本便写完了,我将它放到了 github 上:
https://github.com/roseduan/rosedbgithub.com
经过这一个月的代码量,我自认为对 Go 算是入门了。这也是一个很不错的经验,那便是学习的目的在于实践,如果知识只停留在理论层面,那么你对它的理解和认识一定是模糊的,一定要去实践一下,才会发现更多的为什么,才会真正搞懂自己在理论学习阶段的很多没搞懂的东西。
如果你也正在学习 Go,并且不知道有啥好的实战项目,那么强烈建议你看一下我的这个项目,这是一个很简单的数据库,我把它命名为 rosedb(我的英文名字是 Rose),Go 的大多数知识都用到了,一定会是巩固 Go 知识的一个绝佳的素材。你可以自己先耐心的看,然后再试着自己写,或者给这个项目提交代码,完善功能。
到了 2020 年底,我有了跳槽的想法,于是开始找工作,我在我的简历上写了 Java 和 Go,投递简历的时候,Java 和 Go 的岗位都有投递。先后面了几家公司,有两家 Java 的,有两家 Go 岗位的,在面试 Go 的时候,面试官都让我介绍一下我的开源项目 rosedb,这其实说明,如果你的简历上有不错的开源项目,不管 star 数量多不多,都会是一个不错的亮点 ,因为这至少能证明你的动手能力、编程能力等等都是不错的。
现在在 B 站的工作主要是用 Go,进入到实际的项目之后,才发现其实我还是有很多不懂的东西, 比如我们项目中使用到的 gRPC 和 GORM,于是我在阅读项目代码的时候,会结合着官方文档学习一下这些技术,也会针对一些比较重点的内容,买一些书籍结合着来看,然后在实际项目中不断踩坑历练,对于一些业务相关的基础技术就能够很好的掌握了。
现在回头来看,其实当初我并没有要转语言方向的打算,只是碰巧学习了一下 Go,然后找工作的时候恰好找到了 Go 开发岗位的工作,算是误打误撞吧。这里也给看到这篇文章的小伙伴一些良心的建议,其实国内的这些互联网公司,技术总体来说还是服务于业务的,所以无论你学习的是什么技术,只要能够在业务中产生价值,让你拥有成就感,我觉得就是一件挺好的事情。关注技术热潮不是什么坏事,但是切忌心浮气躁,看着什么火就去学什么,到头来很可能什么都学不精通,最好的便是专注于某一个领域,在精力有余的情况下,学习一点自己感兴趣的东西,这也可能也会给自己的未来增加一些不确定性。