前言

大家好,我是一位来自南京二本院校的CS专业的大四学生,你们可以叫我烟雨。这篇博客主要分享我的大学学习/生活历程和建议,以及对于一些想作为一名程序员进入游戏行业的人的建议。

本篇博客仅仅是建议,仅供参考,每人有自己的人生观,价值观,人生路线规划,我也尊重每个人的人生观,价值观,人生路线的规划,如果某些言辞刺痛了你,我提前道歉。

目标人群

仅限在校大学生。

正文

行业介绍

在游戏行业,细分了很多工种,比重比较大的,有GamePlay程序员,策划,美术,测试,当然还有比较稀缺但珍贵的技术美术(TA),这也是我当前在努力的方向和目标,由于我本身学习路线是属于GamePlay工种,所以主要讲Gameplay方面的内容了。

先给大家大体介绍一下这几个工种的具体分工吧

  • GamePlay程序员:主要负责游戏逻辑代码的编写,功能/架构的开发,插件开发
  • 策划:策划游戏的玩法,战斗系统,游戏的活动
  • 美术:主要负责提供游戏中的美术素材,比如我们看到游戏中的UI,模型,特效等
  • 测试:负责对程序功能进行Bug测试
  • 技术美术:顾名思义,既需要懂技术,又需要懂美术,所以难度较高,由于程序员与美术有行业鸿沟,但又联系紧密,所以需要技术美术来进行协调整个工作流

大学时间线(工作向)

对于找工作这方面,我不推荐大三之前去实习,因为那时的学业繁忙,容易耽误学业,挂科很难受的。

更详细的信息,可以参照我的春招,秋招科普视频,这里就不展开讲了。

生活建议

我想了很多,还是决定把生活建议说出来,虽然知道这可能有些冒犯,但请原谅我,因为我不想看到有些同学浪费不必要的时间。

社团

对于社团,我的建议是,加一个,最多两个自己感兴趣的社团,而不是随大流,别人加什么,你加什么,社团理应是我们生活的增色剂,如果社团让你疲惫不堪并且毫无收获,那将是毫无意义的。

图书馆 or 宿舍

诚然,图书馆有更好的学习氛围,但是宿舍有更好的环境,如果舍友对你的影响很大,那图书馆是你的不二之选。

兼职

大学兼职,分种类,一种是传单,服务员,我称其为无意义打工,因为这种兼职除了微薄的收入外,并不能让我们有任何提高,因为他和我们日后的工作没有任何关系,长远来看,是害了自己。

我们大学生,应该静心去学习钻研技术或者其他有助于自己长远发展的知识,而不是被眼前的小利益蒙蔽双眼,最后耽误了自己。

还有一种打工,是公司实习,我称其为有意义打工,因为我们可以获得技术的成长,并为以后找工作提供一定的优势,这正是我们应该努力的方向,获取报酬的同时,提升自己。

学习与娱乐

对于这方面,可能是我个人比较懒惰和佛性的原因,常常学习时间与娱乐时间55开,所以我建议大家也不要压抑自己,适当放飞自我,学习效率更高。下面是我2019年一月份到今天的时间分配截图(来自软件ManicTime)。(仅供参考,个人是佛系学习+网瘾少年。)

技术发展建议

QQ技术群和知乎社交

当我们开始学习一个领域时,会习惯性地加几个QQ群,去知乎搜索相关问题,但是这两个社区都是鱼龙混杂,大家应该自行甄别,学习前期QQ群可以多看看,中后期可以屏蔽大部分QQ群了,因为里面讨论的很多内容对于那时的你没有任何养分。

百度和谷歌(网络资料)

这边建议不管是不是初学,都从谷歌开始,因为谷歌的信息索引做的确实比百度好,而且百度当前被CSDN无用博客污染的很严重。对于从网上获得的知识,我们要有一定的甄别能力,因为很多时候,我们获取的信息是错误的,残缺的。当然要做到这一点对于初学阶段的我们来说可能不是一件容易的事情,但也要尽量做到多方对比减少错误率。

重视数据结构和算法

数据结构和算法贯穿我们程序设计的整个生命周期,学习数据结构和算法可以让我们写出性能更好的程序,还可以在我们脑中存储一些特定编程场景下的解决方案,甚至大家开发项目时遇到了算法问题,都可以先尝试着凝练一下关键字,去刷题网站搜索。推荐大家平时可以去力扣网刷题。

多想,多写,多分享

我们学习过程中,不能只看,还需要自己思考,然后去写代码,如果能够将自己的学习过程做成学习笔记就更好了。

推荐大家多看Github(全球最大开源社区),并积极创建自己的开源库,积极提交。

笔记软件推荐

在学习历程中,记笔记是个非常好的习惯,包括但不限于网上好的学习资料,自己学习过程中的心得感悟与总结,个人推荐Typora+坚果云+阿里云OSS做自己的笔记系统。

进阶

在学习过程中,我们会经历很多很多次的进阶,进阶往往是痛苦的,但是痛苦之后的蜕变又是让人愉悦的,进阶也分很多种,一种是学习新技术的进阶,一种是巩固夯实现有技术的进阶,学习新技术就不说了,夯实现有技术最好的方法就是开项目,做项目,并且把它坚持做完,我从两年前开始做模仿LOL的Moba开源项目,一直坚持到现在,收获了太多东西。所以对于进阶,我推荐大家动手去做项目来获得。

书籍推荐

为什么推荐大家看书呢,因为网络上获取到的知识总是零散,片面,甚至是错误的,而书籍中的知识是精华的,浓缩的,所以综合来看读书是我们获取知识最快,最安全,最高效的。(当然也不是说书中的内容一定是正确的,大家要保持一颗批判的心去看待事物)

内功

对于我们这一行,内功(基础)是很重要的,所谓内功,是指计算机科学基础(CS),比如计算机操作系统,计算机编译原理,计算机图形学,计算机网络等

对于计算机操作系统,计算机编译原理,我推荐CSAPP(深入理解计算机操作系统)和编译原理这两本书,通过这两本书,你可以明白计算机是怎么组成的,底层是怎么运作的,又是如何运行我们编写的程序的

对于计算机图形学,我推荐大名鼎鼎的虎书(Fundamentals of Computer Graphics),这本书看完后,相信你对计算机是如何渲染画面的已经有了一定程度的认识(建议配合GAMES101食用嗷)(如果想继续深入底层的学习计算机图形学与渲染,推荐Real-Time Rendering, Fourth Edition)

基本功

内功说完了,我们来说基本功,所谓基本功,就是编程语言数据结构和算法设计模式

对于编程语言,无论你以后的工作是否和C++有关,我都推荐去看《C++ Primer Plus》《C++ Primer》,前者偏入门,后者偏初级,之所以推荐大家去看C++,因为我们可以通过他深入了解程序运行过程中内存模型的变化,这对于我们学习其他语言有很大的帮助(事实上学过C++之后,学其他语言非常快,一周左右即可入门)。此外,如果在学习《C++ Primer》过程中感觉到脑子中已经有了基础的知识框架,但是并不知道在项目中怎么去更好的实践,这时候就可以去看《Effective C++》《More Effective C++》

如果想要学习Unity游戏引擎,C#是必学的,事实上在我学过的语言中,C#是最优雅的语言,推荐阅读《深入理解C#》和《CLR Via C#》

数据结构和算法的重要性前面已经提及过了,推荐《大话数据结构》,并且有空去力扣网刷刷题。

最后是设计模式,我们为什么要去学习设计模式呢,因为我们项目达到一种体量后,如果没有设计范式,项目会一团糟,很多耦合,而前辈们总结出的常用23种设计模式可以环节这种问题,推荐阅读《大话设计模式》,不过要避免过度设计的陷阱哦(不过这是后话了,到了那个阶段自然就懂了)

个人学习路线分享

我个人的学习路线其实算是野路子了,可参考性可能不是很高(但我会尽量整理时间线让它变得适合大家参考),大家随便看看就好。

首先我是Gameplay入行,所以一开始学的就是C#,并且在Siki学院进行Unity基础操作的学习(咳咳,Siki老师,打钱),但是在这里我更加推荐大家去Unity Learn去学习,因为官方的教程无疑更加科学和适应初学者,但是也没必要奉为经典,因为很多东西在我们实际项目中是不会那么去做的。

跟着教程做了几个游戏后,大家应该对Unity使用有了一定的基础认识,这时候就应该尝试自己去做几个想做的Demo了。

然后我们就需要学习框架了,因为在此之前,我们都不知道真正的商业项目代码规范是怎么样的,通过框架去学习是非常高效的一个方法。这里我推荐两个开源框架:

Unity GameFramework:一个重度的Unity客户端框架,其恰当使用了良好的设计模式,尤其对于资源管理模块更是无可挑剔。

ET:ECS架构的双端框架,但是更加偏向服务端,开发迭代起来十分高效。

在学习完框架后,我们对商业级的项目开发规范也有了一定的认识,为了夯实这些知识,我们要开始做项目,这里推荐以一个大型网络游戏为目标基于某个框架做开源项目(比如我就是以LOL为目标开了一个项目:https://gitee.com/NKG_admin/NKGMobaBasedOnET),这样获得的提升是巨大的,因为开发项目体量大,就逼迫着我们以更加严谨的视角去看待问题,思考问题,解决问题,这样我们的成长就会非常的快。

在项目开发过程中不可避免的会遇到工具制作,特效制作,Shader编写的需求,我们就顺应这些需求去学习这些方面的知识,最大化项目带给我们的成长收益,而不是遇到困难就退缩。

对于Shader这一块,推荐大家去学习《Unity Shader入门精要》,由于我们有虎书和RTR4的基础,看起来会很丝滑,没什么学习曲线。

因为我个人职业规划是要转型技术向工具链的TA,所以要接触一些DCC软件,目前在学习Blender和Houdini。

待续。。。

总结

说了这么多了,想说点题外话。

干游戏这一行,其实是真的需要对游戏感兴趣,并且真正的热爱游戏的,否则你的心力会被很多核心游戏设计开发之外的事情慢慢消耗殆尽,到那个时候,日常的工作对你来说就是坐牢一般的折磨

这点对于商业游戏来说更是如此,除了游戏开发的核心内容(Gameplay设计,渲染画面,关卡设计,剧情设计等),还有很多为了商业化做的“无用功”,比如各渠道SDK,安卓,IOS原生SDK,活动,排行榜,各平台问题,代码热更新适配,复杂晦涩配置表联调开发,后台GM等等等等就不一一列举了

倘若心中没有对游戏的热爱与执着支撑着自己砥砺前行,长期在这种工作环境下的我们,心态会变成什么样?钱难赚,屎难吃莫过于此

祝福

祝君前程似锦,武运昌隆。

愿你走出半生,归来仍是少年。

愿天下心诚剑士人人可剑开天门!

提问时间

大家有任何方面问题都可以在评论区问,在下定知无不言。