做主程序员是怎样的体验?
做了两年游戏服务器开发,依旧徘徊在业务逻辑上。
想成为一名主程序,不知道主程序需要会哪些东西。
是不是每个主程都有自己的框架?是不是要熟悉各种技术的底层内核?
各位前辈,我想了解的是需要哪些技术才够支撑起一个主程。
https://www.zhihu.com/question/42379470?share_code=1mrrF1rP3Jojf&utm_psn=1980659127366747397
无意之间刷到了这个问题,想起了我刚步入职场的时候。但是我后来发现,作为主程可能并不适合我。我其实我有自己的思路,于是写下了这个回答。
不止不觉我已经步入游戏程序员的职场十年了。每个人的职场经历不同,想法也会不同,并且随着时间的流失整个游戏行业市场也发生了翻天覆地的变化,所以我个人的观点和经历大概率无法成为任何人的参考,但是我愿意把自己的经历分享出来,希望多少可以帮到一些工作没太长时间的同学。
当我刚毕业的时候对主程其实没什么概念,我只是觉得主程就是团队当中技术最厉害的人,当然,如果你进入过职场你就知道,肯定不是这样。很多刚毕业不久的人总是有一个类似象牙塔的心态,我今年成为初级、明年成为高级、后年可能成为主程然后再往后成为技术总监,就和到了年纪就要成家、买房、生娃一样。但是这个世界并不是这么运作的。
我经历过很多项目,我经历的第一个项目是一个孵化项目,总共没有几个人,主程序是一个刚毕业的研究生,他也没有任何经验,但是他担负着解决项目技术问题的指责。另外我的一个学长,在毕业一两年里面也成为了主程序,虽然项目不大,但是最终上线并且收益还行,但是在项目上线的第二年,他就来到腾讯,成为了一个大头兵,虽然不是主程但是经常拿到五星也是混得风生水起。
所以任何工作并不是先成为A再成为B再成为C,和当时的机遇和你自己的选择有关,而作为主程你需要的不光是技术问题,还存在管理问题。很多人是在当上了组长或者主程之后才开始关心这一块,慢慢学习的,很多时候也不存在你准备好了之后你才能作为主程这一说法,完全取决于公司是否需要你或者认为你适合担任这一职责,你行你就上。
但我觉得题主提到的个人成长,我觉得当时我有自己的逻辑。工作到现在,我觉得一个程序职场人拥有3个阶段。
第一个阶段:我不知道我所不知道的
这个阶段往往在刚刚毕业或者工作没几年的时候遇到,我在大公司工作的时候隐隐为未来的年轻程序员感到担忧。因为在大公司实习的程序员,能够接触到的内容实在太狭窄了,很多人只关注自己眼前的业务,实际上并不知道也不关心整个游戏是怎么跑起来的。
在这个阶段,整个项目都是令人新奇的,战斗逻辑是怎么写的、AI是怎么做的、UI框架怎么样才是易扩展的,整个游戏是怎么构建出来的。读代码和巩固基础应该是这个阶段最应该做的事情,之前milo曾经推荐过游戏程序员的必读书籍,推荐的书有一部分可能已经过时,但是大部分还是挺好的。里面涉及了几乎绝大部分游戏程序员需要知道的内容。https://github.com/miloyip/game-programmer 因为我的学校并不好,所以我早期的项目都是在小公司做的。我在这个阶段的时候,每天做的事情就是读代码,并且看书,并且将学习到的内容运用到项目当中,或者发现项目中有什么地方可以通过我学习的内容进行改进。当我有机会运用我的知识时,我会尽可能将我可以用的知识运用进去,并且我会复刻一些当时项目当中的一些框架和功能,并且有了我自己的通用库。我知道,写通用库这件事情其实非常地自以为是,因为大部分公司往往已经有了自己的一套通用框架,重复写这件事情本身对项目而言没有意义,但是我知道,我已经熟练掌握了这些制作流程。这个时候,游戏制作当中的战争迷雾慢慢变少,我知道我有哪些东西是薄弱的,没有深入进行研究的,也知道我对哪方面更拿手,也更感兴趣。
第二个阶段:我让所有人知道我能做什么
我后面去了一个初创团队,当时项目只有2个和我一样工作经验2年的程序,以及一个主程序,主程序也是从服务器转过来的。因为我当时复刻了大量之前项目的框架,所以这个项目的很多工具和系统框架是由我来搭建的。从这个时候开始,我的自信心开始爆棚,并且就是这一份自信让我能够不断地继续将我已经学会的知识进行扩展,在项目当中进行了很多创新,因为做出了很多框架的贡献,所以主程把一些很重要的研究工作也交给了我,当时我们的项目在介入C#和C++互操作的框架,我花了一个月把一整套东西吃下来了,不要误会,我现在回想里面使用到的知识其实并不高深,而是项目愿意花这个时间让我来做这件事情,而于此同时的其他系统程序大部分是在写业务,我觉得他们来做这件事情他们也能吃下来。这里就出现了这个阶段的关键结果:项目负责人知道我会做什么,并且愿意将时间花在我身上去研究新的东西。在这个阶段的时候程序员的成长往往并不是卡在不会做什么东西上,而是卡在你的领导愿不愿意把这件东西交给你来做。所以在这个阶段我认为更应该去初创项目,他们的人更少缺人了才有你的表现机会,你也有更多的机会来展现你的才华。
但是在小公司的问题是,你会发现,项目当中大部分的东西你已经了然于心,你能学到新东西的概率远远小于你解决枯燥问题的情况。如果你一直在这个项目,或许你的上限也就止步于此了。当然在当前游戏行业大环境下,我不建议跳槽,但是在我那个游戏发展的黄金年代,去到一个有更高水平的项目对我来说是更好的选择。当然,这里也有因为当时我所在的项目因为发生动荡,核心成员纷纷离职,我也随着这一波离职潮一起离开了。
反复前面两个阶段
经历上述的项目之后,我来到了某一线大公司的成功上线项目。因为根据前面的经验,我打算学习大公司项目是制作方法,并且融入我自己的经验当中。但是很不幸的是,我发现大公司的代码和工作流并不比我当年在的小公司高明多少,甚至很多工作流令我至今都嗤之以鼻。更可怕的是,我当时是技术优先主义的人,我认为项目当中一些所存在的不合理之处都应该用更好的技术方案解决,我当时缺乏正确的推进事情的方法论,导致若干次的和领导的承诺落空,这导致我失去了领导的信任,我在公司当中做事情也并不顺利,推进工作往往充满了阻力。
不过在大公司的这几年并不是毫无收获,首先大公司的项目是UE项目,让我拥有了UE的经验,并且也知道了引擎当中很多的优化方法,并且通过通读大量的引擎模块,我开始逐步熟悉一些底层机制的实现,而非Unity当中的“魔法开关”。另外,虽然工作上面并不顺利,但是我开始编写自己的引擎,并且真正将引擎当中的知识融入到自身。逐步积累自身知识,并且发现了大量自己不知道的东西。并且进行学习和实践。
三年之后,我找到了一个合适的契机进入了另外一家正处于快速发展的游戏公司,并且由于我业余时间开发了诸如:独立的静态反射框架、自定义UBT实现等等框架工具,用于开发我的个人项目。快速将可用的东西融入到了当前的项目当中并且取得了很好的成果。我的领导很信任我,我也非常相信我们的项目能成功上线。我让项目组的同事相信我的能力,并且我也没有辜负大家的期望做出了不少实质上的贡献。
不过很可惜,当年的项目并没有成功,我也活水到了公司的另外一个项目。
不知道谁说过这么一句话:你的职业生涯最终总是会位于你刚好能胜任的工作位置上。
第三个阶段:让项目和自身一起成功
经历了前面项目的失败,我越来越意识到,技术虽然能够决定项目的上限,但是远远不足以让项目本身成功。我可以说,在我之前的经历里面,我认为,个人成长的优先级远大于一切,从严格上来讲,这似乎是缺乏职业道德的。然而,当你在一个项目当中作为组长、主程或者任何和项目成功与否的利益相关方,需要关注的是项目本身是否能够成功,而绝非仅仅是技术问题。这个阶段,你不再需要向谁证明你的技术如何,或者你能否做一些事情。对于主程序来说,技术过关已经不是优先级最高的目标, 而是他知道做成一个项目需要哪些前提,需要有什么样的人才来解决这些问题,并且让这些人才同时工作,这些人才当中不乏一些技术专家,当然在一些公司也存在管理主程和执行主程的职位分工,我觉得某种程度上是合理的。把马化腾、马云、刘强东塞到一起创业并不能创造伟大的公司,只有各司其职,找到解决问题的方案,才能让项目本身成功从而让你自己也获得成功。
最后,针对这个问题,如果你更喜欢专注于技术,那么主程并不是一个很好的职业发展路线,理顺项目的流程,和项目当中大量下属的沟通会成为你日常的主要工作。如果你更倾向于掌握游戏的整体制作,并且你擅长与人沟通并且在项目当中有一定的影响力,那么或许主程会是更好的选择。
但是人总是会变的,就像我当时是个对技术痴迷的业务小哥,到现在开始更关注项目本身是否成功,再牛的技术,如果对于项目无益,那么也是无用功。
这只是我个人经验的分享,而且目前的环境也不像我当时18、19年的环境一样这么好跳槽和涨工资了,我们还是本着实事求是的态度追求自己的人生目标,我想要什么,我需要做什么,我只是在当时人生的十字路口做出了我自己认为最合理的选择罢了。成为主程不能成为目的,而只是职业生涯当中的一个状态而已,成长本身是永无止境的。
后记:写完之后发现这个问题最早来自16年4月,2年工龄是14年上班的,我靠哥们比我工龄还大一年。僭越了。

