不知不觉, 作为一个打工人, 作为一个写程序的打工人, 职业生涯的第十个年头悄然而至.
从一个充满雄心壮志的有志青年, 到如今有家有室的油腻中年男, 时间就这么显得毫不值钱的流逝, 回首往事, 却突然不知道如何评价走过九年的我.
如果说这九年完全浪费了, 蹉跎了, 我是不服气的, 因为作为一个程序员, 自诩还是比较合格的, 一直在学习, 一直在进步, 大把时间, 大把精力奉献给了这个行业, 别人在玩的时候, 我在学习, 我在写代码, 别人在睡觉的时候, 我在学习, 我在写代码…
不敢说所有私人时间都花在了代码上, 说近乎30%~40%的时间花在代码上, 应该是有一定底气的.
但是, 又怎么样?
从初中就开始接触程序, 一路高中, 大学, 工作, 从没有放弃过写程序, 可以说, 写程序就是我最大的爱好, 其它的爱好应该就只有看小说和玩游戏可以与之媲美, 但是花在这两者上的时间和精力依然没有比在代码上更多.
但是, 又怎么样?
就这样走过职业生涯九年的我, 没有什么拿得出手的成绩, 钱没挣多少, 代码功底也不见得有多好, 在公司做一线开发, 被一群小年轻质疑, 当做被拍死的沙滩上的前浪.
有些时候看到他们年轻的面孔, 感慨年轻真好, 不知不觉自己已经变成了老帮菜, 就快要入土了? Excuse me?
每个人有每个人的经历, 每个人有每个人的缘分, 努力不一定有回报, 有可能迟到, 甚至永远都没有回报. 即使这样, 我也想要出人头地, 混出个让别人羡慕的样子, 所以努力修炼, 刻苦打磨技艺, 想要在某一天一飞冲天, 成为别人嘴里的"大佬", 用自己的能力, 自己的双手创造幸福生活.
我一直告诉自己, 短期蛰伏没什么, 是金子总会发光的, 但是不知不觉我已经蛰伏了九年, 知了蛰伏三年, 一朝褪壳就能响彻整个夏天, 我相信自己总有一天能够绽放出自己的光芒.
额, 情绪渲染的有点不对, 我写这篇文章可不是来卖惨的, 哈哈…
我今天只是想和大家分享一下这九年来迈过的一些坑和积累的一些总结, 想来给大家谈一谈"专注"和"基础"的重要性, 不会很全面, 想到哪写到哪儿. 希望能给有缘的你, 一些微不足道的借鉴, 少走一点点弯路.
为什么这么努力, 这么辛苦了九年的我, 依然"混的不咋地"呢?
我无数次的问过自己这个问题, 每次都有不同的答案, 但是这些答案里面, 有几个出现的频率很高, 这里分享出来, 聊作参考:
不明智的换工作和选工作: 大部分时候换工作没有经过深思熟虑, 自视甚高, 在不合适的时机换工作, 多次在Offer中没有做出最具性价比的选择, 不明白平台对于职业的发展是至关重要的
没有遇到志趣相投的伯乐提携: 个人认为这条基本算是成功的必经之路
努力却不够专业: 学习, 努力的方向太多, 没有集中经历攻克堡垒, 总是在攻坚的途中被各种诱惑晃花眼, 最后少有所得
忽视了基础的重要性: 嘴里说知道基础的重要, 却以实践派自居, 并引以为豪, 对于自己基础的不足, 缺陷带来的结果却认为是运气不好, 正好碰到了自己的弱点, 但又不及时补足
总之, 我觉得一个人的成功, 基本可以归结为两个方面: 自身条件和外在机遇, 其中后者的重要性在大部分情况下都远远大于前者, 但是这不能代表我们可以忽视前者. 因为外在机遇不是我们自己能够掌控的, 我们唯一能做的, 就是打造自己, 等待那个能够让你一飞冲天的机遇的到来, 并有力量去掌握住她.
作为一个技术人, 可以说, 技术就是我们的主要价值, 我们的一切都是以技术为主, 其它为辅, 当然次要方面也很重要, 有些时候甚至比技术更重要, 比如"如何做人", 但这不是我今天想要表达的内容, 按下不表.
在排除其它我们无法掌控的因素之后, 专注自身的能力提升几乎成了我们唯一能做的, 但是这么多年来我也一直在提升自己, 为什么还是显得不是那么的"强"呢?
我个人分析, 之所以造成今天的结果, 一切都是因为我的方向太多了.
我本身是做游戏的, 当年也是因为爱好做游戏, 想要做出那种能让很多人喜欢, 很多人玩的爆款游戏, 所以才毅然决绝进入了这个很辛苦的行业.
既然我是想做出好玩的游戏, 那么这些年我做了什么? 简单归纳一下:
业内的同学知道, game play才是一个游戏的灵魂, 才是区分各种游戏类型最显著的特征, 而我只是在早期和近期的时候做了一些, 后续做的, 学的, 全部与之无关.
可能有人会觉得, 我做了这么多年, 学了这么多年, 提到的这些东西肯定很擅长吧? 可惜, 我依然不敢说擅长, 只能说可以做.
在职业生涯的前六年, 我都没有意识到这些问题, 直到第七年, 我突然醒悟, 原来我已经偏离自己初心很多年了, 从那时开始, 我决定离开呆了4年的公司, 从让人觉得还可以的"主程"位置上下来, 进入正统的游戏公司, 变成一个默默无闻(才怪)的一线游戏开发, 虽然依然做的是UI, 依然是框架, 但是我开始在闲暇时间进行各种game play技术的研究, SPG, MOBA, RTS, FPS的ECS框架和帧同步框架, MMO的状态同步, 寻路, AI, 物理, 各种花里胡哨的Shader等, 近两年时间, 不敢说对这些都了解和明白, 但是至少扩宽了眼界, 自诩走在了正确和理想的路上, 所以我为此感到高兴.
我对自己的评价是: 进取有余, 毅力不足; 小有所得, 自视甚高. 字虽少, 但确实是我自己的真实写照.
我是一个很有干劲的人, 是一个十分渴望进步和成长的人, 但是我同时也是一个意志不坚定, 三心两意, 稍有所积累就认为自己很强大的人, 总结下来就是: 我是一个矛盾和浮躁的人.
我会不停的学习各种专业知识, 哪怕累的眼睛都睁不开, 有时做梦都在写代码, 但当兴趣点的热情消退, 马上就会转移目标, 继续循环, 多年下来, 我学习了很多, 但是居然没有什么真正的沉淀, 我甚至不敢说自己对于哪个技术真正掌握. 小时候看过卖油翁的故事, 他可以通过一个铜钱口给油瓶灌油, 人家问他怎么做到的, 他答: “唯手熟尔”.
所以, 我到底对什么"手熟"呢? 没有. 好不好笑?
作为一个技术人员, 一个互联网技术人员, 一个从事游戏的程序员, 我需要掌握的技术真的太多太多, 多到很多时候我都能感受到无能为力, 这也是我一直不停学习的主要动力, 越学习, 越了解, 越觉得自己不足, 我就像那个越来越靠近井口的青蛙, 我眼中的世界随着随着距离出口的减少而逐渐变大, 这固然能让我找到更多探索内容, 从而由衷的感到欣喜, 但同时也给我带来了巨大的负担, 世界这么大, 我偏于一隅, 是不是总有一天会被世界所抛弃?
所以我累, 我疲于奔命, 我不想停下, 不想倒下, 我想站到天空之上, 看天下的美好风景, 但是… 我无力…
以前觉得时间不值钱, 有大把时间可以挥霍, 所以各种东西都想尝试, 但就真的只是尝试, 都是浅尝辄止, 到现在回过头一看, 嚯, 好家伙, 我居然就是一个半桶水, 没有任何一个点能够拿出来理直气壮, 掷地有声的告诉别人, 告诉自己: 就这"玩意儿"? 我擅长啊!
这就引出来今天要分享的第一个点: “专注的重要性”.
人的精力是有限的, 何况在游戏行业, 加班是经常的事, 每天拖着疲惫的身体回到家里, 恨不得就躺着刷刷抖音, 多巴胺带来的美好, 想必大家都喜欢. 能够有限的抽出时间进行学习和提升, 本身是一个很了不起的事, 但是如何在有限的时间有限的精力的条件下, 抓住最利于自身的部分, 集中精力, 专项突破, 这是一个很值得探讨的问题.
有一句话说的好: “一剑破万法”. 任你各种花里胡哨的招数, 我就用自己最强的一个面来应对, 如果应对不了, 只能证明我这个"剑"还不够"力".
这句话一方面说明我们做事要专一, 另一方面也表示, 只要在一个领域上成为真正的强者, 其它新的领域对我们来说不过是可以类比, 类推的存在而已, 毕竟万事万物归根结底大致的规律是一致的.
游戏做好了, 去做 App, Web 也不会差哪儿去, 技术做好了, 去做管理也不会差哪儿去, 只要牢牢掌握一个事物的底层逻辑, 那么就可以借鉴已有的知识和经验去掌握其它事物. 你英语学得好, 学法语, 学德语, 学西班牙语, 也不过是时间问题而已, 所以现实世界中的确存在很多掌握多国语言的人才, 比如7~8门甚至10几门外语, 他们都是"天才"么? 不见得.
到我们公司快两年了, 在这两年时间里, 我一直在努力做技术, 做管理来证明自己, 因为不是名义上的老大, 管理工作做的十分憋屈, 自己尽力维护好团队, 解决团队遇到的困难, 在大部分人(没有和我密切接触的人)眼里, 我就是一个上蹿下跳的小丑, 这一度让我十分渴望能够得到公司上层的认可, 能够真正给我官方盖章, 后来真的是竭尽全力, 不放过任何一次展示自身的机会, 也多次向各方表达诉求, 可是结果却依然没有达成所愿, 当然, 公司也看到了我的贡献, 多次表达赞赏, 工资该涨涨, 总体上我还是十分感激公司的, 给了我展示的平台, 并给与那些展示以认可.
慢慢的我开始反思和总结, 自己到底要的是什么?
我真的想要做管理么, 想当老大么?
其实我内心是有答案的, 我还是一个比较纯粹的技术人, 其实不太喜欢和人打交道, 更喜欢专研技术而不是研究人, 也不想天天陷于各种事务中无心它顾.
那么为什么我对于成为管理这么迫切的?
很简单, 因为目前的社会, 只有你成为了管理者, 才能拔高你的地位, 让人一开始就对你刮目相看, 不需要你费心费力的去证明自己的强大. 没有谁有耐心和机会和你密切接触, 大部分人只能通过你的title来对你有基本的认识. 想想, 如果不是特别熟的情况下, 我们如何去判断一个人? 他名牌大学毕业, 他是从腾讯来的, 他在腾讯当主程, 他在阿里当专家, 他是某某大学教授. 但是说实话这个社会上, 又有多少人是名副其实的, 匹配的上他的title呢? 有多少人的强大来自于自身? 又有多少人是一旦离开平台, 自身光环不在, 然后被人居高临下挑挑拣拣呢?
我热衷于追求title, 成为管理, 但是我真的喜欢么? 答案当然是否定的, 因为我还是那个纯粹的技术人啊.
正是因为自身技术的不牢靠, 自身不够硬, 才想要曲线救国, 从其他方面去证明自己, 而不是全力打磨技术, 弥补不足, 这不是本末倒置么? 所以还是上面那句话, 我们是技术人啊, 技术才是我们安身立命的本钱, 怎么能舍本逐末呢? 这句话不一定对, 有一个前提, 就是技术真正成为我们安身立命的本钱, 这是一个基础, 没有这个基础, 一切还是镜中花, 水中月.
作为一个技术人, 只有技术上让大部分人挑不出毛病, 甚至佩服, 才能有选择的权利, 是继续钻研技术, 还是转型做管理. 当然这只是我一家之言, 聊以慰藉了.
所以, 从当下开始, “专注技术”.
在没有其它选择的情况下, 我们只能专注技术, 但是技术的海洋也是浩瀚无边的, 各种技术日新月异, 可能你对这个还没接触过, 他就已经过时了. 我们到底该怎么做呢?
那游戏开发来举例, 大致可以分为前端和后端, 这里我们专注前端(Unity):
怎么样, 是不是看一下都觉得头皮发麻.
平时没觉得, 把这些一列出来才感觉我们程序真的好不容易啊!
当然, 不是说都掌握了才能做游戏, 我工作快十年了, 也不敢说这里面哪个部分真正"掌握"了, 只能说大部分都接触过一些, 能做事.
虽然内容很多, 但是也不是都需要了解和掌握的, 这里我大概将其分为内功和外功.
外功主要是招式, 偏实践, 是理论的封装和实现, 也是日常工作的主要内容:
内功主要是理论, 能够帮我们理解招式原理, 更好的完成招式, 有些内功不懂, 招式甚至都使不出来:
我们写程序写久了, 都会发现一个情况, 那就是, 大部分情况下, 完成某个特定的需求并不是什么难事, 但是要将其做的"比较好"却并不容易.
也就是说"完成"到"完成的比较好"之前其实存在一个比较大的鸿沟, 这个鸿沟可能需要结合外功和内功一起发力才能填平, 我们日常强调的"重构", 其实就是在向"完成的比较好"这个目标一步步靠近, 同时也是在不断的锤炼外功和内功, 在这个过程中, 两者是相辅相成, 缺一不可的, 都需要学习, 需要锤炼. 一个优秀的程序员和一个普通的程序员的差异也是主要体现在这个方面, 但问题是, 这种功底和素质却很难测量, 特别是在面试和晋级的时候.
我们对于不同工龄段的程序员有不同的考察点, 有不同的要求, 比如你无法强求一个工作十年的程序员还能轻易的将"反转二叉树"这种算法给你手撸出来, 甚至你无法要求他给你写一个"快速排序"这种只要学习过数据结构和算法都能接触过的算法, 除非他找工作的时候准备过, 但是可以要求他大致给你讲出来, 而且正是因为大部分老程序员做不到, 才显得那些能够做到的人"特别".
你也无法要求一个刚工作的年轻人, 能给你讲明白"渲染管线", 除非他大学里有这一门课, 但是也正是因为我们对他没有这个要求, 但是他又达到了, 才显得他比较"特别".
在社会上立足其实没有我们想象的那么容易, 但是也没有那么的困难. 我们看的别人拿非常高的薪水, 什么毕业就年薪百万, 年纪轻轻就走上高位, 走上人生巅峰, 这种人的确存在, 但不是你我凡人能够做到的. 我们更多的还是拿着几k, 十几k, 极少拿的更高的一群"平凡人", 既然是"平凡人", 那么社会对我们的要求其实并不会太高, 只是大部分人并不知道(比如以前的我), 或者并不能准确的知道, 社会对我们, 更简单的来说, 一个公司, 一个面试官, 一个人事, 一个上级, 一个同事, 对我们的要求到底是什么, 所以才会显得"困难".
这些年, 待过很多公司, 也面试过很多人, 也被很多人面试过, 和不同职能的人也沟通过, 慢慢我总结出一个道理: 因为现在的社会是一个团队, 组织合作的社会, 其实大部分情况下, 别人对我们的要求并不高, 也没有太高的期待, 是我们自己连基本的要求都没有达到, 也不是说自己差, 而是没有搞明白需求, 并对需求作针对性的训练, 所以才显得很多时候无法得到双方都满意的结果.
所以我们这里得出结论: 要想得到自己想要的, 得先明白自己到底想要什么, 然后搞明白别人想要什么, 接下来在两者之间做适配, 匹配度高的自然就有搞头.
我个人觉得这个道理在很多领域都是正确的, 只是应用起来不是那么的容易.
对于面试找工作, 我的一切总结归纳就是: 匹配度.
只要你没有强大的碾压一切, 那么你总归是会有盲区, 不足的, 也许你很强, 但是你的知识圈并没有囊括在在审视你的人自身的知识圈里, 他就会觉得你不行. 也许你很弱, 但是审视你的人并没有对你有太高的要求, 或者他感兴趣的点正是你擅长的, 那么你就会得到好的结果. 这也是为什么有些公司, 平时显得很弱的"小虾米"能够进去, 但是一些所谓的"大佬"反而没有机会的主要原因.
综上所述, 我给自身还有你的忠告就是: 先拿下普通题, 再攻克难题.
这么说呢? 那我们以前高考举例, 其实只要你能把大部分普通题搞定, 就能拿70%~80%的分了, 但是我们往往花了更多的精力去争取最后的20%~30%, 哪知道自己没有那个实力, 最后连基本的分都丢了. 我觉得这是一脉相承的道理.
换到做技术方面, 外功就是这个70%~80%的分, 其实在面试和晋升场景上来看, 是最重要的也不为过, 只不过大部分人都忽视了而已(当然包括我自己).
说的有点抽象, 我们举一些具体的例子:
面试就那么一点时间, 能够被问到的问题是及其有限的, 就和考试一样, 平时学了那么多知识点, 会考察的也就那么一些而已.
专注于外功, 成为"外练大宗师"之后, 再进一步长期, 不懈的, 水磨的研究内功, 往往能够产生利益最大化的结果.
比如我上面提到的问题, “Mono脚本的OnDestroy是不是在销毁时一定会调用”? 其实这是再基础不过的问题, 就明明白白的写在官方文档上(当然也没有那么明白…), 我因为没有系统的梳理过, 或者是对基础的不在意, 导致我在工作中遇到了这个问题, 白费了好几个小时. 试问Unity的官方文档, 有几个人真正将大部分内容浏览过, 哪怕只是匆匆一瞥? 而且很多功能我连见都没见过, 又何谈使用呢? 这不得不说是一个问题.
我几乎每年都会花一段时间研究渲染, 研究程序设计(框架和模式), 学习数学, 学习数据结构和算法这些内功, 因为我觉这些是技术人的根本, 是技术的底层逻辑, 这么多年下来, 也算是有一些积累, 入了门, 在日常工作中也是因此获得了一些好处. 对于这部分投入的精力, 我觉得是值得的, 哪怕效果没有那么直观, 那么明显, 但是给我带来了学习其它内容的福利, 这本身没有什么问题. 问题在于没有达到一定外练水准之前, 花费太多精力在这些上面, 没法在短期获得比较好的收益, 而这些内容本身就需要终生打磨的, 不是短时间能够出成果的.
我们在工作中, 更多的其实还是关注如何实现, 如何完成功能, 如何达到基本的要求, 至于完成的好不好, 说重要也重要, 说不重要它也没那么重要, 毕竟技术的好坏, 代码的好坏, 大部分时候其实并不能决定产品是否能够成功. 这也是为什么很多市面上成功的产品, 可以说连基本的框架都没有, 整个项目乱糟糟, 很难维护, 很难扩展, 但是依然不会影响他大赚特赚, 只要他能保证好玩, 别动不动就崩溃, 别卡到飞起, 那就是一个好产品. 毕竟实践是检验真理的标准, 能赚钱才有话语权, 你代码写的再好(何况还不一定能写得好, 就算写得好, 能保证所有人都能写得好?), 如果不好玩, 不能赚钱, 一切都白扯.
所以市面上招人, 评价人, 匹配度的高低, 总是按下面的优先级由高到低:
在企业里, 一切以实际结果为准, 按照大部分人的思维, 你成功过, 就一定比别人更容易成功, 你做过或者研究过, 就一定比没做过的人更擅长, 这都是一些难以去除的观念, 很难说正确与否, 但是这种思想大行其道, 我们这些平凡人就只能"顺势而为".
所以我的总结为:
以前我认为基础就是最后的一条, 后面时间久了才发现, 越是抽象的东西他就越不是基础, 越细节的东西越是基础, 如果从某个知识点来评价是不是基础, 这是一个很难的事, 因为同一个事物, 他有基础的一面, 也有高深的一面, 一切都看我们怎么去认识而已.
这里可以引用一下毛主席给我们留下的宝贵财富: 认识论. 大致意思是:
我们认知一个事物的过程是这样的: 先从实践上对它有一个感性的认识, 然后总结出(或者学习到)一些理论, 获得理性认识, 然后将这些理论又再次应用到实践中去改造事物, 对其加深了认识, 产生了新的理论, 然后再应用到实践中去检验论证, 改造事物, 以此不断进行, 循环往复.
所以我不知道怎么来定义所谓"基础", 今天的基础, 随着明天认识的加深, 可能变成了高级的理论, 明天的高级理论, 可能由于使用频繁, 认识加深而变成了基础的理论.
我所知道的是, 我们一切都需要从实践中来, 形成理论认识, 再到实践中去, 加深理论, 就是这么一个过程.
上面提到的六点, 其实只要能够基本满足前面四点, 足以获得大部分的工作机会, 最后两点, 能够让我们走的更高.
只是我们很多人(包括我), 远远达不到能够基本满足的要求, 更多的是走马观花, 用到再查, 查也是简单的查, 不能沉淀, 所以最终不能有太多的底气, 能够将技术当做是安身立命的本钱, 人家说你基础差, 说你不行, 你就只有忍着, 因为事实如此, 呵呵.
总之, 所有的东西都重要, 但是能够直接决定工资, 地位的部分, 最重要, 需要优先掌握, 当然, 如果对这些都不感兴趣, 一切以自己的关注的重点为主就好了.
不知不觉说了这么多, 其实我还有很多很多的感慨, 但是这些无法全部通过文字一一展现, 什么事都应该有个结尾对吧?
我不是一个成功人士(至少目前不是), 我的感慨也显得不是那么的重要(至少对于你们来说), 人们都是追逐成功的(包括我), 但是这的确是我的人生, 我的经历, 我的感想, 我生命的一部分, 我想将其记录下来, 作为我生命的一个节点, 在我回首往事的时候, 能够让我会心一笑.
当然, 如果能够和有缘的你, 有一点点心灵的共鸣, 共勉, 让你我明白, 我们不是孤独的行走在路上(吾道不孤), 你我有同样的迷茫, 有相同和不同的感悟, 即使不能面对面交流, 哪怕只是通过文字来交流, 那也是能让我十分欣喜的事情.
我是真的喜欢程序, 喜欢代码的世界, 在这些我创造的世界里, 我就是"王", 我可以为所欲为, 可以将世界塑造成我喜欢的样子, 世界中的一切都会随着我的意念和心情给出不同的回应, 我很开心能够进入到这个行业, 这个领域, 让我有机会成为很多个世界的"王".
所以在步入工作的第十年, 我做了这个记录, 献给当下和未来的我, 给有缘的你.