游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2373|回复: 1

游戏程序员修炼手册(二):技术瓶颈期如何转岗转职?

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2017-7-12 10:07:09 | 显示全部楼层 |阅读模式
v2-38e3d0435e4354d1a3757c1facc993f6_r.jpg


  文/顾煜 授权游资网发布

  前篇讲了从Junior到Senior程序员的成长过程,现在谈谈转职。

  从我自己的工作经历来看,工作了5-6年以后,就遇到了技术上的瓶颈期。当我开发很久的逻辑和AI,也包括一部分网络对战模块,在几个不同项目中锻炼后,多数相关的细分领域都接触过了。我逐渐对这些技术提不起兴趣了,于是想转岗去做点引擎相关的事情。

  职场新人是一张白纸,有机会在不同领域换岗位。而工作几年的老人,常常有自己擅长的领域,不如小朋友可塑性强,且体力也不如年轻人。这时候要转新的岗位,就有一定的难度。常常看见很多人想做渲染、想做引擎,但却没有太多的知识储备。问他们为什么不提前准备,他们就说:工作很忙,没空学习渲染和引擎,但你不让我做一下,我没有经验,又怎么会有能力做好渲染和引擎呢?非常遗憾,这个逻辑是错的。

  这里有一个必须注意的地方。在转岗这个事情上,公司是不会为了你的理想和野心买单,他们只会为你的能力买单。我们把它翻译成人类的语言,就是公司一般不会仅仅因为你想转岗就让你转岗,只有你具备了新岗位需要的能力,才有可能让你转岗。举个例子进一步说明,职场潜规则里,如果有几方利益相关团队要推动一件事情,潜规则就是哪个团队受益多,哪个团队就会更主动推动这件事。你的小算盘是转个岗,学点新东西,公司想的是每个人安分做一颗螺丝钉,做好自己最擅长的事情,工作效率才高。双方利益有一定的冲突,这时候如果你表示,我已经具备新岗位的能力,对公司来说,只不过是把你这个螺丝钉换了一个位置,而不是重新在新岗位造一个螺丝钉出来,这样公司会容易接受得多。

  所以结论就是,想转岗,先自己学,能胜任了再去提。

  回到我的个人经历,由于参与的几个项目都是使用了Unreal,所以技术上有比较好的一致性。由于自己平时也比较重视跨界知识,引擎那一块基本也有一定的熟悉度。于是和领导提了一下想转做引擎的事情,领导说忙完这个项目就让你去搞引擎。

  很快找到了一个好机会,开始去SplinterCell4项目做引擎。接到的第一个任务,是独立把Unreal引擎移植到Xbox360的Alpha版开发机上。当时接到任务,虎躯一震。Xbox360架构和PC不太一样,当时EpicGames官方也没有Xbox360版本的UE可用,我们找了一个其他游戏Xbox360移植参考,但参考价值不大,因为Ubisoft喜欢深度定制引擎,Unreal2的引擎部分已经被SplinterCell组改得面目全非,估计连TimSweeney(Unreal引擎的爸爸)都认不出这是Unreal了。第三方的引擎移植无法直接参考。

  那就开始搞吧。拉了一个分支版本,二百万行代码,无从入手,先编译通过再说吧。我建立了Xbox360的项目,开始编译,不停修改编译错误,一时搞不定的大问题,就先把整个模块注释掉,做好笔记以备后续修复。当时开发环境也比较差,Xbox360编译器Bug还挺多,而且预编译头文件设置有bug,预编译头文件非常小,且无法通过参数扩大,这就导致大量代码无法放入预编译,偏偏Unreal的结构重度依赖预编译,我的代码编译速度极慢。编译的时候就只能看看文档,什么都做不了干着急。

  我没日没夜搞了1个多月都没有完全编译通过项目。。。每次开周会的时候,都觉得自己快死了,翻来覆去就只能汇报说自己还在和编译器搏斗。游戏引擎的前期移植,不比大规模开发,前期移植通常只能让很少的人参与,基本无法并行操作,你都编译不过,别人怎么插手。如果我搞不定,就要换一个人来搞,浪费很大。估计老板也是心里骂娘但嘴上不说,鼓励几句让我继续搞。

  心理压力是一方面,能力短板也是另一方面的问题。虽然我做了很多引擎技术的提前储备,真正面对整个引擎规模的移植,还是发现缺口不少。我在业余时间拼命补课,把不懂的东西学会,才能推进。但很快又碰到新问题,有些领域是Unreal专业领域的知识,并非通用知识,很难学习,也找不到人咨询,而且涉及到的面比较广,没有办法在短时间里面全部看透。这就需要我在信息不完备的情况下做技术决策这个模块大致应该往什么方向做,如果出了问题怎么办,我可以怎么回溯。做一两个决策还好,但往往是一个决策套着一个决策,前后的技术决策有依赖关系,要回溯就要一起推翻。没有什么坚实落地的技术决策,就好像走在半空的索桥,每一次摇晃,都在动摇我信心的根基,做到后来都怀疑人生,觉得这活真不是人干的。

  好在终于还是编译通过了...然后就是调试程序,要让引擎运行起来,哪怕没有渲染也不要紧,只要有主循环跑起来就好了。只有那样,更多的同事才能参与进来帮忙。

  后面断断续续又有了很多的障碍,Xbox360的内存模型以及AlphaKit的bug,序列化的BigEndian和LittleEndian的区别,Fixfunctionpipeline在xbox360里面完全被去除了,性能的问题等等,硬着头皮一一搞定,终于勉强在电视屏幕上画出点像素,虽然各种飞面,光照全错,一会就会crash,但至少把主循环跑起来了,当然也是基于很多不知道是正确还是错误的技术决策。先快速走通流程,比什么都重要,铺好了路,咱们的大部队就能一起来和我并肩作战啦。

  当时已经和主干的开发版本分开两个多月了,于是又花了2周来Merge最新的改动,整个开发团队那时候就有20多个程序员,几十个美术和10多个关卡策划疯狂的上传,Merge的过程也是非常不顺利。Merge了几轮,才勉强追上项目的进展。然后趁大家周末休息的时候,一口气上传了所有的改动,还要抓紧测试看看主干版本,带上了Xbox360的代码,是不是还能编译,是不是还能正常运行。相关的工具也都需要简单测试一下。

  忙完这一切以后,自己有了非常大的变化。最重要的变化,是终于有了技术上的自信。觉得没什么自己搞不定的了,只要给我足够的时间。尼采说过,杀不死我的,只会让我更坚强。做过一个规模足够大的工作,在绝望里挣扎过,这样的经历非常能锻炼人。那几个月整天低头Coding,基本不用和别人说话,一坐就是一天,和编译器斗,和Xbox360Kit斗,和Unreal斗,经常陷入困境,也时不时会有突破,随时进入心流状态,收获自信和满足。现在回忆起来,那几个月也成为我技术历程中最大的一个飞跃。

  今后的很多工作中,有了这个自信,就开始敢在技术上决策,在团队里面,有些事情自己搞不定的话,别人也很难搞定,也就不再想太多。和团队也逐渐建立起了信任,大家就更愿意让我做决定。

  做到这一步,整个引擎勉强能跑,但没什么东西是正确的,渲染模块还是一团混沌,逻辑方面都没有正确工作,还需要艰苦的工作。后续还需要把我一路Rush过程中欠下的技术债一一偿还,把整个版本弄成Xbox360上可以顺利跑起来,再做架构调整,适应新主机的新架构,充分利用多核框架。2005年搞多核引擎框架,还是个高科技。很多可以做的,很多可以学习的。非常可惜,由于工作上的调整,我被调离了这个项目,去另一个FPS小项目做AILeader。这个经历下篇再聊,主题就是从Senior程序到Leader的过程中,又有什么是重要的。

  快速总结一下本篇的中心思想:

  - 公司不为你的野心买单,为你的能力买单。你想要什么,先让自己能配得上它。

  - 经历过绝望挣扎,才能变得更强大,迎接挑战,建立你的技术自信。

  相关阅读:游戏程序员修炼手册(一):适合初学者的几点提升要诀

17

主题

583

帖子

1899

积分

金牌会员

Rank: 6Rank: 6

积分
1899
发表于 2017-7-12 13:18:38 | 显示全部楼层
且不论你能不能搞成,就这种做事的思路和方法,就够操蛋的。坑了自己,坑了团队,坑了公司,是极其可能的。你觉得你自己提高了,那主循环跑起来就算完事了?那也许差的远呢,坑多的狠呢,多到你老死了也改不完呢。

点评

人家现在过得很好,项目也很好。  发表于 2017-7-18 17:24
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-25 17:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表