我是一个独立游戏开发者,在一个主机独立游戏开发团队里做主程。大学毕业 10 年,毕业以后就一直在做游戏编程,从一开始的“端游”,到页游,再到手游,到现在的主机独立游戏,也算是有一些经验了。
在这些年里见过挺多想了解“游戏是怎么做的”的人,也有挺多对游戏编程感兴趣的人。这些人里,有行业外的人,也有行业内的非程序员。我希望通过在这里写一篇文章的方式,向大家推荐一个学习资料,传授点儿学习方法,希望对大家有所帮助。
但是有一个事情我觉得大家需要先想清楚:你是哪种人?
之后我会针对这三种读者提出相对应的建议。不过首先,有一些东西是共通的,我认为所有人都应该尽可能掌握的几个技能。
其实下面列的这些技能,就一个目的:掌握第一手的高质量学习资料。然而由于各种各样的原因,高质量学习资料在国内并不多,第一手就再甭提了,所以我们需要在全世界寻找这些资料,于是我们就需要去 Google 搜索资料。
我接触过很多英语不好的朋友,说他们在上学的时候就对英语产生了抵触,看见英语就头疼。还有的人说,虽然不至于到看见就头疼的程度,但是单词背不下来,口语就更惨了。那我在这里就传授一下我是怎么学英语的。
先说清一点,这里说的英语技能仅包含“听说读写”中的“读”。因为这整件事的目的就是看资料,所以“读”就够了。
首先,先放下心理负担。很多人看到英语就头疼可能是因为潜意识里他们看到英语就联想到了考试,联想到了可怕的英语考试和自己悲惨的英语成绩,联想到了看到成绩后生气的父母,联想到了。哦,总之,先不要怕,你读一篇英文文章,并不是为了考试,也没有人让你在读的时候不许查词典,没读懂也不会有人骂你。你想想,多少游戏那么难,你不都打通了么,读个文章比打《血源诅咒》简单多了~
不要背单词!
不要背单词!
不要背单词!
重要的事情说三遍!
背单词可能是很多人的痛苦记忆。我个人认为,背单词这个方式一是为了考试,二是为了“速成”。这个“速成”并不是贬义。背单词对于语言学习来说的确是一种比较高效的方式, 如果你不抵触的话 。如果背单词已经让你产生抵触情绪了,那它本身意义就不那么大了。但是不背单词的话,怎么提高词汇量呢?我的答案是: 愣特么看 。
我来解释一下什么叫“愣特么看”。很简单,利用专业英语本身词汇量就比较少这个点,每次你看到一个生词的时候,去查一下词典,就知道是什么意思了对吧,然后你就继续看文章就成了。直到下一次你遇到这个词的时候,你还是不记得这词是什么意思,没事儿,再查一次,哦,是这个意思,继续看文章。
这方法简单到都不应该被称为是一个“方法”,但我的逻辑是,如果一个词出现的频率低到你只查了一两次,根本记不住,那说明,它可能在现在的阶段根本不值得你把它记下来;相反,如果一个词已经出现的频率已经高到你查了 N 次词典,那你差不多也已经把它背下来了。这个方法的重点其实是,看大量的英文内容,让你一遍又一遍的巩固这些经常出现的词,从而记住它们。把自己的手机、PS4 换成英文系统,想解闷儿去看 Reddit 或者 9GAG,想看图去 Instagram,想看新消息去 Twitter,想看视频去看 YouTube,想看直播去 Twitch,想看 ** 去 PxxxHxx。总之就是用英文包围你的生活,慢慢你就习惯了~
试试吧,这个方法在我那个看英语就头疼、四级都过不了的老婆身上亲测有效。
搜索大概是这个信息时代的特色了。使用搜索引擎的方法对开发效率的影响简直是数量级上的区别。有一次我老婆鼠标驱动出了一些问题,也 Google 了一下,但折腾了一个多小时找不到解决方法,后来我改了改搜索的关键词,5 分钟就搞定了。差别实在是大。
然后,多看 Wikipedia , 可以体验到在知识的海洋里遨游的感觉。一个词你不明白的时候,先去搜 Wikipedia,尽量看英文的。
对于只是想了解游戏是怎么跑起来的人,其实是不需要真正接触编程的。你需要的只是去看一些科普向的视频或者文章,比如 卡姐Cara 翻译的视频,还有卡姐那些视频的来源。卡姐比较好的一点是,每个视频下面会详细写清转载的出处,能看生肉的话,直接看源视频更锻炼英语。 另外机核上也有一些科普的文章,我之后也可能会写一些,看看这些文章就好啦~
到这个级别,你还是要想明白,你的“了解”一下编程是“了解”到什么程度?必须要自己写写代码吗?还是只要明白程序上的一些基本概念就可以了?
个人推荐零基础的朋友上手编程学 Python。可以看看这本 《深入浅出程序设计》 (英文名:Head First Programming),书里用很生动的语言讲了 Python 的基础知识,非常适合零基础的朋友上手。 等你对 Python 了解了以后,可以学学 C#,再搞搞 Unity。这个部分我反而不是很了解,因为我学 C# 和 Unity 都太早了,而且都是会了 C++ 以后学的,所以这个路线不是很熟悉,见谅。
推荐 Zachtronics 的游戏, 42 曾经介绍过 。玩了这些游戏,就可以对编程这件事有一些感性认识了~ 说明:对于编程语言的选择各有见解,此处的推荐仅代表作者个人意见。
在这里,我想跟所有想把游戏编程当作职业的人说: 游戏编程的确很难,学习曲线比较陡,在最开始学习的时候一定不要浮躁,不要急功近利,稳扎稳打才是精髓。
好,那且听我慢慢道来。应该学什么编程语言?我推荐C++。
现在 Unity 那么火,为什么不学 C#?首先,在主机游戏的领域,C++ 是完全的霸主地位,不用 C++ 的 3A 大厂几乎没有。另外,了解底层知识是非常重要的,C++ 是可以手动管理内存的。手动管理内存这件事情在游戏开发领域是非常重要的。就算你用了 Unity,写了 C#,资源加载卸载仍然是一个比较手动的过程,你可以先在 C++ 里习惯这种做法。
我当年学 C++ 用的是这本 《21 天学通 C++》 ,现在已经出到第 8 版了。不要被书名误导,你不用 21 天之内学完。慢慢看,慢慢学。关于编程的学习方法,下面有专门的一段会讲到,在这里就不赘述了。 如果你是个其它领域的程序员,但希望可以转向从事游戏开发,那么就需要注意一下 游戏开发的特点:极其追求运行效率。 我个人感觉,Donald Knuth 那句“ Premature optimization is the root of all evil ”在游戏开发领域甚至都不适用。
另外,我还有一些推荐的做法: 把标准库的一些内容自己写一遍。 我大学的时候把 .NET Framework 里的 System.Collections.Generic 中的容器在 C++ 里重新实现了一遍,收获真的很大,我推荐程序员们都去试试~
最后,我说的底层真的要很底层,比如你要知道虽然遍历数组和链表的时间复杂度都是 O(n) ,但由于链表在内存中的存储不连续,所以无法完全利用 CPU 缓存,出现 cache miss,导致实际上遍历链表比遍历数组慢。嗯,就是要底层到操作系统和硬件架构的级别。
我一直觉得,编程可能是全世界的职业技能里最好自学的了。 因为编程这件事反馈非常准确且及时。你编错了,就跑不起来,或者跑出问题;编对了,就没问题。但最开始学习编程的时候,还是可能走一些弯路,有两个点,我在这里先列出来,大家绕着点儿走。
这是很常见的问题。大家在学校学知识的时候可能习惯了这种学习方式,就一直沿用下来了。然而在学习编程的时候, 我推荐大家学一点儿写一点儿 。比如今天学了个条件判断语句 if ,那你就用这个 if 写个程序出来,跑起来看看是什么样,边学边用才行。一定不能狂看书不写程序,哪怕有些语法你记不住,要边查书边写,都比一直看不写强。否则的话,你在真正写代码的时候记不住多少不说,你还会被编译器的错误信息搞懵,很容易被打击。
在学习编程的时候,很多人经常为了实现功能就不管代码的可读性了,写到最后代码越来越长,也记不住之前定义的变量叫什么了,整个人都很烦躁。这是非常错误的。
首先,先保证你的代码格式整洁,缩进对齐,该空格的地方空格。我大学的时候,有同学代码调不出来,让我帮他改调。我一看,代码格式混乱,就让他把缩进对齐,该空格的地方空格,再来找我调。然后他就没找我了,因为调完格式以后他自己就明白问题在哪儿了。各种编程语言都提供了为你节省脑容量的功能,比如把一堆语句封成函数,把一堆数据封成类或者结构体,要用啊!
对于这个问题,有个比较简单的评价方法,就是去看看你一个月以前写的代码,看自己还能不能看懂。如果你看不懂,那说明你一个月前的代码的确可读性有问题。如果你还觉得看着你之前的代码感觉有点儿恶心想吐,那说明你在这一个月里进步了,因为你知道什么样的代码恶心了。
这一部分是我额外想多说两句的。现在社会上对程序员的刻板印象一直都是不太说话的理工男,但实际上,起码在国外的程序员教育上,是非常强调沟通的重要性的。一个游戏,除非策划程序美术全你一人搞定,否则你一定会面临沟通的问题。与人沟通的技巧已经有无数文章和书在讲了,我在这里就讲两个跟游戏开发密切相关的点。
应该有不少人看过 《硅谷》 ,知道剧里面 Richard 和一个妹子因为用 Tab 还是用空格吵翻的故事。另外你可能也听说过大括号放上行还是放下行之类的程序员宗教问题。 我想说,多人合作最重要的就是入乡随俗。你用 Tab,但团队里的规范是用空格,那你就用空格,没什么可说的。当然,你写自己的小项目还是可以用 Tab。这些程序员宗教现在都是程序员之间开玩笑用的了,不要把电视剧里的情节当真啊~
这是一个程序部门和其他部门沟通的话题了。作为一个游戏程序员,你的代码面向的客户可不是只有游戏玩家。策划、美术、测试、市场运营等等,都是你程序的用户。把游戏的编辑器做好是你的义务。我在公司里要求程序员都去学习 UE/UX 的知识,就是为了他们把编辑器做好,让用户用着舒心。我可是见过 N 多个因为编辑器垃圾离职的策划或者美术。
啰里啰唆写了这么多,不知道大家看着觉得如何?如果大家对编程的一些概念还有兴趣的话,我可以再开一篇文章,用比较白话的方式,结合主机游戏的内容讲讲编程的基础知识,比如:
作为 2011 年开始听机核的老听众,第一次在机核投稿,求各位大佬轻喷~ 欢迎大家在文章下面留言,也欢迎大家私信我一起聊聊天~
评论区
共 86 条评论热门最新