最近一直在思考自己在技术学习上是否过于低效的问题。出现这个问题的缘由是,自己工作下班之后没多少精力和时间去留给自己学习。本来就有限的时间,如果还没有合适的学习计划,而是一昧凭兴趣去学一些离自己目标方向比较远的东西,可能会事倍功半。

就我而言,自己目前的水平更像是“磨”出来的,东学学西学学,什么都有点印象,但是专业方向的知识之间的连接却非常离散。读研的时候有大量时间给我“磨”,总归能学会点什么,但工作则不一样。

例如一本《Shader 入门精要》目前看了两次,但仍然害怕离开书来写 Shader。再者,一门技术很久不用,再拿起来也需要时间。为此,我总结了三点原因:

  1. 工作中很少用到,游戏有特效师,自己也不会主动地思考怎样的 Shader 能为游戏带来更好的效果。
  2. 学的时候只光看了,跟着书敲了,但一直没有走出书本,去自己实现自己想要的功能。
  3. 觉得 Shader 像 CSS 一样,要记各种东西,凭经验实现效果,而这种知识自己最容易不用就忘。(当然这是错的,这也是为什么我在上期导读选择跟 Games101 图形学课程打基础)

基于上面的原因,导读也是偏向自己打基础的方面。

上一期的博文在:《2020年4月技术导读》

书籍

《软技能2:软件开发者职业生涯指南》

豆瓣地址

其实正如上文所说,我学东西靠的是“磨”,但这并不是什么好的学习方式。而且除去编程,作为一个开发者,我们仍然有很多“软技能”需要注意,例如自己的职业规划、如何发现技能短板、如何推进职业生涯等等。

我相信不止是我,很多开发者也在不断地摸索如何成为一个目标中资深且专业的开发者。而本月出版的这本书就是为这方面而量身定做的,是著名的《软技能》的第二版。这本书目前看到的翻译都十分优秀,每次开卷都有益。如果你也想专注于自己的职业发展,我十分推荐这本书。

下面是书中介绍的十步学习法,自己根据它来调整了下学习计划:

十步学习法

公开课

Games101 图形学入门

这门公开课我已经在上期导读中提到:《2020年4月技术导读》,再次提到是因为经过学习,我认为课程中理论部分讲的深入浅出,而且也能了解到当下流行的图形技术和它们是怎么跟我们所学的联系在一起。

闫老师提到他的学习方式是:Why, What then How,课程也是按照这种思路来设计的。先问为什么要学这个东西,然后问学的是什么,最后了解这东西具体是怎么运作的、怎么用。How 部分是最不重要的,也是最容易忘的部分,我们只需把握好 Why 和 What 部分即可。

那课程是怎么把知识点联系起来的呢,就凭借一个个 Why 来连接。拿光线追踪来举例,下面是我做的笔记:

光线追踪笔记截图

如果你对笔记感兴趣,我也将其分享了出来:《光线追踪》

The Cherno 的游戏引擎教程

油管地址

B站搬运地址

教学版引擎仓库地址

Up 主 The Cherno 在自己的 CPP 和 OpenGL 教程之后,再基于两者推出了游戏引擎教程。引擎的仓库是跟着视频教程的进度而推进的,有兴趣的可以了解下。

The Missing Semester of Your CS Education

课程地址

B站搬运地址

这门公开课是通过知乎专栏《6.NULL:恨不相逢“未嫁时”》了解到的。

Classes teach you all about advanced topics within CS, from operating systems to machine learning, but there’s one critical subject that’s rarely covered, and is instead left to students to figure out on their own: proficiency with their tools. We’ll teach you how to master the command-line, use a powerful text editor, use fancy features of version control systems, and much more!

简而言之,这门课不是教计算机的理论,而是介绍一些常用的工具,让你在面对问题的时候有更多的手段。自己可以看看一些不熟悉的主题查漏补缺。

MIT 教授 Gilbert Strang 「线性代数」课程

课程地址

这门公开课是通过知乎专栏《86岁还在录网课:MIT教授Gilbert Strang最新「线性代数」课程上线》了解到的。

这门课程在今年录制,目前有 6 个视频讲座,对于之前录制的课程也可以在 B 站找录播,例如:麻省理工公开课:线性代数

具体介绍可以看知乎专栏,自己对于这门课程优先级比较低,线代遇坎儿了再学。

其他计算机公开课

有网友总结了国外的计算机课程,还附上了视频链接,可以参考《电子工程和计算机科学系》

文章

  • 图形程序学习经历
    • 文章作者认为从图形 API 开始从底向上了解硬件做的事情到摸透一整个流程是个好的学习过程,其中也给出了很多有价值的参考资料。作者声称能以较快速度在两个月满足工作要求,完成图形程序入门的知识体系。
  • Entity Component System for Unity: Getting Started
    • Ray Wenderlich 的教程通常会提供初始项目,手把手带你写代码,加上独特风格的配图,很适合用来入门某个技术。这次带来的是 Unity ECS 的入门,用 Entities 包实现一个坦克射击游戏。
  • Fixing Performance Problems - 2019.3
    • Unity 发表的关于解决性能问题的教程,里面有很多小知识点,对初学者可能有帮助。虽然之前好像看过,但这是 2019.3 版本的。
  • Cache的基本原理
    • 作者图文并茂地讲解了缓存内部是如何运作的,Visio 手绘风格的图画也很清晰明了。对缓存感兴趣的还可以进一步关注作者的专栏。
  • Refactoring.Guru
    • 这网站也图文并茂地介绍了重构、 设计模式、 SOLID 原则 (单一职责、 开闭原则、 里氏替换、 接口隔离以及依赖反转) 以及其他和智能编程主题相关的内容。
  • 每位程式設計師都該知道的記憶體知識
  • Zero allocation code in C# and Unity
    • 文章作者开源过叫 Svelto 的 ECS 框架,这篇文章是他对 Zero allocation 代码(也就是自己管理内存)的理解,也介绍了相关的概念、书籍和很多查看内存分配的工具,对想了解 DOTS 的同学可以阅读一下。

最后

其实本篇导读相当一部分在讲的是我个人怎么样看待自己目前学习情况,每次导读中所有的内容我其实只能看完一部分,怎么样更高效地学和怎么样更好地平衡生活是我最近不断思考的问题。当然了,我不会放弃。

这次导读分享的多是游戏内存、缓存、图形学相关的内容,自己没分享过某种具体实现的 Shader 的文章,是因为我认为自己基础要先打好,这也是我对其他 Shader 课程的态度。希望这次分享能对读者有帮助。