极客时间已完结课程限时免费阅读

用户故事|罗杰:我的Go语言学习之路

用户故事|罗杰:我的Go语言学习之路-极客时间

用户故事|罗杰:我的Go语言学习之路

讲述:张浩

时长10:03大小9.18M

你好,我是罗杰,目前在一家游戏公司担任后端开发主程。今天,我想跟你分享一下我学习 Go 的一些经历,如果你还是一个 Go 新人,希望我的这些经历,能给你带来一些启发和帮助。
说起来,我接触 Go 语言已经很久了,但前面好多次都没真正学起来。
我第一次接触 Go 语言是在 2010 年,当时我还在读大二,一个学长建议我了解一下 Go 语言,毕竟是谷歌出的一门语言,可能未来比较有发展前景。所以我当时下载并安装了 Go 的开发环境,还写了个 “hello world”,但是由于没有中文的教程,也没有人一起学习,学习 Go 语言这件事情很快就被我抛在脑后了。
我第二次接触 Go 是在 2015 年。当时我跟在豆瓣工作的发小聊天,我说最近想学 Python,他却坚定地告诉我学 Go。因为他们团队无法忍受 Python 总是半夜异常导致全站挂掉,正在往 Go 迁移。但我当时并没有给予足够的重视,没有学半个月又去玩了。
第三次接触 Go 语言是在 2017 年。我当时的技术栈只有 C++,对于 Web 服务这块,几乎没有任何经验,而且我们组的其他成员也没有相关经验。我就在想,总不能 Web 服务这一块总是向其他项目组“借”个 PHP 的同学过来协助吧?
于是,我开始再次尝试学习使用 Go 语言,并且因为一篇《Go 语言 TCP Socket 编程》的博客认识了 Tony Bai 老师。当时我考虑把原本用 C++ 写的游戏服务改成用 Go 来实现,但当时能用中文搜索到的与 TCP 网络编程的文档非常有限,而 Tony Bai 老师的文章写得非常详细,使我对 Go 是如何做这一部分有了基本的了解。
这一年,我开始尝试使用 Go 语言写一些小的 demo,例如操作数据库,以及 Redis 和 Protobuf 相关等在 C++ 中要必须使用到的组件。
2018 年,在 Go 的实践上,我迈出了更大一步。我开始在新的项目上尝试使用 Go 语言完成了一些简单的功能,例如游戏版本控制,后台管理服务。但因为我从来没有深入学习过 Go 语言,在完成这些功能时,踩过好多坑。 比如,我当时开发管理后台,在谷歌上搜索要不要使用框架,就被某个知乎的言论坑得很惨。大意是 Go 已经非常简单了,没有必要使用框架。结果,我用 http 库辛苦搞了一阵后,才发现几乎没有人这么干,都是基于 gin 开发。这个时候,我意识到我必须要认真学习下 Go 语言了。
好在,当时的相关学习资料已经比较丰富了,我在慕课网学习了一遍 ccmouse 老师的视频课,算是正式入门了 Go 语言。期间,我因为 Web 后台需要,在多看阅读上购买了《Go Web 编程》,不过到现在我都没有认真把这本书读完,基本上是把它当工具书,遇到问题,查查看里面有什么解决方案。
2019 年,我的项目上线了,前面我用 Go 写的两个服务的重要性就体现出来了,版本控制负责了游戏登录前的工作以及所有的平台方充值,管理后台则是运营人员最主要的使用工具。要知道 Web 这一块,我之前想都不敢想,但是现在我竟然做出来了,上线之后,稳定性也超出预期。接下来基本上一整年的时间,我都在不停地重构与维护这两个服务,期间还由于涉及前端页面的东西,在 B 站学了不少 HTML/CSSJavaScript 的课程来配合业务方完成相应的功能。
但通过一年时间的修修补补,我意识到,我基本上还不能算入门 Go 语言,因为稍微高级一点的功能我都不会,也几乎没有深入到源码中去研究这些功能是如何实现的。
2020 年以疫情开始,在被 Go 语言折磨了近一年之后,我终于下定决心要深入 Go 语言了。当时我因为《深度解密 Go 语言之 slice》这一篇文章认识了饶大,也关注了一些“Go 夜读”的成员,以及 draveness,这些大佬们对我触动非常大。
看了这么多优秀博主的博客之后,我之前的恐惧都没有了,因为他们把底层的源码都翻了出来,努力解除我们的困惑,也让我更有信心在工作中使用 Go 语言。
不过,虽然有优秀的博客,但是我们学习一定不能只依靠零散的博客,而要成体系地学习。后来,我在慕课网上学习了 Tony Bai 老师的 《改善 Go 语言编程质量的 50 个有效实践》 。年底的时候,无意中又阅读了 COLLSHELL 《Go 编程模式》的系列博客,感觉对 Go 的理解又上了一个层次,作为回报,我在极客时间订阅了作者的专栏《左耳听风》。
通过近一年的 Go 的学习与积累,我应该可以算是熟练使用 Go 语言了,我开始尝试阅读一些源码,并且使用了 go-micro 作为框架层完成新游戏的开发。而且,使用 Go 开发的效率显然比 C++ 要高出不少,因为我们后端就只有两个人。
2021 年,学习的脚步依旧不能停止。这一年里,我最大的收获就是如何正确地学习。如今信息真是满天飞,各种各样的 APP 都想把各种内容塞给我们。而我们的大脑逐渐进入到了“看一遍就当记住了,收藏了就是掌握了”的状态当中。
我经常看了一个小时的手机,回头一想,刚才看了个什么,好像啥也没记住。这就是因为学习的方法错了,我发现学东西真的不能看一遍就了事。《论语》第一句就是:“学而时习之,不亦说乎”,为政篇更是提到“温故而知新,可以为师矣”。
除了勤奋之外,我们还应该明白学习要抓住核心、抓住本质。什么叫“书读千遍,其义自见”?就是说学习一定不是学得越多越好,而应该抓住本质。我最近很喜欢一部电影,叫《银河补习班》,电影里的爸爸把除课本以外的书籍都扔掉,发现所有课本才十一厘米。
关于更具体的学习方法,我推荐陈天老师的《如何学习一门技术?》,你可以学习一下,里面分享了非常多的干货,而且生动有趣。毕竟,在了解了大神是如何学习之后,我们才有可能成为一个大神。陈天老师在极客时间也有专栏《陈天 · Rust 编程第一课》,如果你有兴趣也可以了解一下。
从今年八月份起,我每周在极客时间 App 上学习的时间都超过了十个小时,算是非常活跃的用户了。
当我在推广页看到 Tony Bai 老师的课的那一瞬间,我就购买了。因为从老师的博客和之前的专栏上,我确实学到很多在其它地方学习不到的内容。我相信你在学这个专栏的时候应该也有体会,老师会不停地强调 Go 语言的设计哲学,更会直达 Go 语言的本质。
虽然我用 Go 语言做开发的时间已经超过三年了,但依然从这个专栏上学到许多非常实用的技巧,弥补了之前遗漏的很多知识点。我在其中一讲留言说:老师在我心目中就是 “Go 语言百科全书”,这句话真的是我对老师发自内心的敬佩 。
洋洋洒洒写了这么多,我觉得我在学习、提高的时候走了很多弯路,从一开始的学习方法就是错误的:
首先是没有主动性。如果 2010 年我就能坚持去阅读英文的文档,深入去学习 Go 语言,可能现在我也能跟这些大佬一样,写出优秀的博客来帮助其他人;
其次是懒得学习。2013 年,我是在 COLLSHELL 中学习 Vim,但是我没有再关注过博主的其它文章,其实当时博主很多关注 C++ 的文章,写得也非常优秀。如果我能更主动一些,就能发现更多的“宝藏”;
最后是方法错误。除了 Go 之外,我还学过 Python 三次,而且每次都完整地看完了一本书,或者学习了完整的视频,但是至今我也无法很快写出 Python 代码,因为我从来都没有实践过。
所以,我想跟你说的是,如果你想让自己的学习更有收获、少走弯路,我建议你多注意一下学习方法。你可以了解一下两个重要理论。首先是学习金字塔和费曼学习法,从这里我们可以知道,通过听讲与阅读知识的留存率最多只有 10%。第二个是艾宾浩斯遗忘曲线,从这里我们还可以知道如果不复习,第二天我们学到的知识只剩下了 5%。久而久之,我们就会对学习失去了兴趣。
学习金字塔
艾宾浩斯遗忘曲线
那我们可以怎么结合这两个理论,提升自己的学习效率 / 能力呢?
我跟你分享下我现在学习专栏课的方法吧:
第一天仔细阅读一遍(如果有不理解的,我可能会多读几遍);
第二天复习一遍,如果本周内时间充足,一定要做笔记;
如果有实战的内容,抽出时间写代码(如果没有时间,加到待办任务中,等有时间一定要做一遍);
如果时间允许,最好有一个月内再复习一次,这样才能有效地抵御遗忘曲线。
除此之外,我还会将学到的知识按照我的理解给同事讲解,一定要用心讲解,因为只有教会别人,才可能是自己真正掌握的时候。同时,我也会在工作中践行学习到的内容,比如最近我也在学习《设计模式之美》专栏,发现只有把学到的思想应用在平时代码中,你的学习才会有明显的效果。要是你没有能讲解的对象,也无法立刻在工作中使用,我想写博客应该也是个不错的选择,总之有输入必须要有输出。
最后我想说的是,学习真的要认真对待,我建议你养成做笔记的好习惯。不管是看专栏、读书,还是阅读微信公众号,看 B 站的视频,我们都可以将学到的东西记录下来,时常回顾。让学到的知识不轻易流失,让要学习的内容越来越少,我们才会觉得越来越轻松
希望所有人都能学会正确的学习方法,坚持终身学习的理念,让自己变得越来越好。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 56

提建议

上一篇
27|即学即练:跟踪函数调用链,理解代码更直观
下一篇
28|接口:接口即契约
unpreview
 写留言

精选留言(14)

  • Vfeelit
    2022-01-14
    这个同学就讲得很好 我也学习过很多门语言 go是我最喜爱的 没有之一

    作者回复: 👍

    6
  • aoe
    2022-01-01
    原来是 C++ 大佬! 感谢分享 gin 不然我也会天真的认为要什么框架,直接写 web 不行吗? 谢谢分享了很多优秀资源 这个专栏是我第三次学 Go 了,感觉要学会了

    作者回复: 第三次学go,韧性十足。👍

    共 4 条评论
    6
  • 瓜牛
    2022-04-10
    说下我为什么购买此课程吧,之前搜grpc问题搜到过作者的博客,阅读下来感觉很好,能感受到作者功力深厚,写文章抽丝剥茧,娓娓道来,于是就购买课程支持一下。之前也买过极客时间另一个go课程,作者的语言表达能力真是不敢恭维,总是自创一些词汇,看得十分吃力,能把人当场说晕过去。(当时也吐槽了一下,没想到主编还给我退钱了😢)最后说下学习方法,学习这么多年了,每个人应该都有自己的学习方法,适合自己的才是最好的。
    5
  • 小戈
    2022-01-06
    游戏服务器开发怎么学

    作者回复: 直接加罗杰为好友,问他吧😄

    共 2 条评论
    1
  • hcyycb
    2021-12-27
    罗杰同学优秀啊,学习

    作者回复: 👍

    1
  • $侯
    2021-12-27
    老师可以催更吗,无聊开始二刷了哈哈

    作者回复: 我会努力更的。:)

    共 2 条评论
    1
  • 菠萝吹雪—Code
    2022-08-20 来自北京
    和优秀的人在一起!

    作者回复: 👍

  • Z.
    2022-07-21
    初次接触go,感觉真的很难,希望能坚持下去

    作者回复: 加油💪。Go已经算是编程语言中较为简单的一种了:)。

  • Roway
    2022-07-08
    怎样加罗杰?
  • arronK
    2022-04-26
    分享学习方法 1. 拆分大的知识内容为小的知识模块 2. 专注刻意练习每个模块 3. 构建知识体系(建立知识之间的联系) 4. 用起来或教别人 5. 间隔性的检索(不是看着书复习,而是什么都不看,能不能像给人上课一样把整个知识体系全盘托出,如果不能请回到 2 重复)
    展开

    作者回复: 👍

  • 2022-03-09
    我叫李杰,希望有一天也能像罗杰一样优秀。😄

    作者回复: 💪

  • 码狐
    2021-12-29
    杰哥🐮,本文提到的方法这段时间学习专栏感受很深,确实要复习,阶段总结,不然就成了走马观花,很容易忘个光。 所以这段时间课程中的代码我都尽可能都敲一遍,发现很多看似简单的代码实际动手了还是没有思路。不过一定要切记不能抄代码,可以先列出注释,然后照着注释动手,有些过去的知识点也可以在写代码过程中有意识的融合进去,加深自己的理解。

    作者回复: 👍

    共 2 条评论
  • 进化菌
    2021-12-28
    不刻意去练习,真的太容易忘记以及放弃了。系统去学习go,用go~

    作者回复: 👍

  • 南极熊
    2021-12-27
    罗杰同学优秀,向罗杰学习

    作者回复: 👍