以前总有人问我:“森哥,我怎么才能成为像你一样的大牛?”,我一般就一句话“多折腾”搪塞过去,主要是懒得大费口舌,后来想想,这样也不太好,毕竟有些人还是很有诚意,真的渴望自己能够快速成长的,从我个人的经历来看,「多折腾」其实是包含了很多方面:

  1. 经历不同的企业文化
  2. 尝试做不同技术栈的项目
  3. 做一些自己喜欢的或者好玩儿的东西
  4. 创业

靠谱的导师

很多人有成长的诉求,但是条件不允许,比如:团队氛围不好、业务没什么挑战(规模太小或者技术复杂度低)等等,对于刚踏出校园的学生来说,初入职场,对于个人成长,最最重要的一点,是要有一个靠谱的导师,在工作中指出你的问题,并告诉你正确的思路和方向,一个靠谱的导师能让你少走不少弯路,并让你养成良好的习惯,为以后的发展打下坚实的基础。

回想我自己的成长历程,最令我印象深刻的是在科泰的那些日子,对于一个非科班出身的工程师而言,要对操作系统、虚拟机、编译器等底层知识有一个完整和形象的认知,是要花费大量的时间和精力去消化和理解的,而科泰在这方面有着得天独厚的优势,在 Android 未发布之前,科泰就自研了一款手机,从 bootloader 到整个操作系统 Elastos ,2009 年金融危机,芯片厂倒闭,这款手机未能上市销售,后来 Google 推出了 Android 操作系统,让 Elastos 一度迷失了方向,而我所在的 Team 主要是负责 IDE 工具 —— Eclipse 插件,像文本代码编辑器、可视化设计器,这对于一个刚毕业不久,而且是非科班出身的我来说,着实是有些难度的,比较有意思的是,我们组有一大半是非科班出身的,有电子专业的、有模具专业的,我的 Leader 就是其中之一,记得模具专业的哥们儿学软件的动机最初是在学校的时候为了帮心仪已久的妹子从老师那儿偷试卷而开始研究木马程序。

做文本代码编辑器最难的地方是 Parser 部分,不仅仅是解析出 AST ,还要根据光标的位置构建上下文,如:自动提示,模板代码自动生成等等,像 Java 这种强类型的语言还比较好处理,而对于 JavaScript 这种弱类型、语法非常灵活的语言来说,要做出一个好用的编辑器是很有挑战的。对于可视化设计器来说,主要的核心在图形渲染引擎,在没做过之前,一直觉得可视化设计很高深莫测,其实在 IDE 看到的效果是贴的一张图而已( SDK 在本地运行的图形引擎的渲染结果)。

当时的工作氛围是很不错的,我的导师和 Leader 给予了我很多的帮助,从那时候,我便掌握了手写 Parser 。还记得第一次做 Android 应用的时候(业余项目),实现一个照片滤镜功能,我手上只有一个 HTC ,我的 Leader 通过他的人脉关系,给我借来了两部手机让我测试,还帮助我对滤镜做性能调优。记得他当时展示了他的一个 demo —— CPU 绘制的 3x3 魔方(支持拖拽旋转)让我参考,也是让我对图形系统有了更深刻的认识。

有人说:“我没有遇到像你说的靠谱的导师那怎么办呢?” 话外之意是 —— 团队中没有大牛或者有大牛但是不愿意为自己指点迷津,这个其实有几个思路可供参考:

  1. 在有大牛的情况下,虚心主动请教,诚意到了,自然而然愿意教你

  2. 如果实在没有大牛

    1. 转岗到别的团队
    2. 换个公司,进大厂

参与开源项目

对于刚毕业不久的工程师来说,参与开源项目会有一定的难度,本身开源项目涉及到的技术相对比较有深度,而且,作为开源贡献者本身就是一项输出大于输入的工作,而自己如果正处于成长的初级阶段,自身还需要大量的输入来提升能力,如何能胜任这份工作?

对于有了一定基础,渴望提升影响力的同学来说,倒是一个不错的选择,通过开源项目,有机会结识各种级别的工程师,可能对项目提出各种问题,你必须积极的响应别人的提问和建议,而在你跟其他人的交流或者处理 issues 的过程中,就会不自觉得对自己的知识体系进行丰富和完善。

主导一个商业项目

开源项目对于技术深度和影响力的提升是非常有帮助的,但是,工程师的成长不能仅限于技术领域,很多科技公司的 VP 或者 CEO 都是工程师出身,没准有一天,你也有机会成为 VP 或者 CEO ,即使再不济,达到 GM 的级别还是大有可能的,当作为 Manager 负责一个业务部门的时候,考验你的就不仅仅是技术能力了,还需要对业务做到如数家珍,不仅仅是现在的业务,还有未来的业务发展方向。而作为工程师来说,主导商业项目意味着,你的角色不仅仅是技术的实现者,而且要对从立项、成本预算、研发进度到最终的盈利情况整个过程负责任。

在主导商业项目的过程中,技术只占了整个生命周期的的很小部分,而大部分的工作主要是沟通协调、流程梳理、风险把控等等,这些对于工程师来说,其难度是远大于技术实现的,一旦经历过这些,就对整个项目背后的逻辑有了一个全面的认识,也就不会说出像这样的话来:

我不知道你说的那些 OKR 跟我有什么关系,你告诉我做啥就得了

对于普通的员工来说,主导一个商业项目并不用太关心公司的财务状况,做好了可能会拿个项目奖金或者激励什么的,做砸了也正常,无非绩效考核会差一些,至于项目的收益是好是坏都有公司来兜着。如果是 To C 的项目,延期也没有多大风险,最多写个报告,或者复盘什么的,而 To B 项目意味着合同违约,如果甲方较真这可是要赔钱的,项目负责人可能会罚掉奖金,但是,对于创业项目来说,收益的好坏直接决定了整个团队的生与死。

据我一做过 ERP 的朋友说,那些 ERP 顾问都是按小时收费,出差路上收费,午休时间同样收费,超过 8 小时加班收费,而且收费还不便宜,甲方还不得不掏这个钱,为什么 ERP 顾问值这么多钱?—— 因为他们丰富的实施经验。

失败的经验很多,而成功的经验凤毛鳞角,如果有幸能成功的主导一个商业项目并且有不错的盈利,这种经验就会拉开工程师之间的差距,这就是高阶工程师的核心价值所在,这也就解释了为什么大厂的工程师自带光环加持,因为大厂的经验更值钱。

持续学习

在我刚工作的前几年,我很不理解在面试的过程中被问道:

Java 最新的版本是多少?

我心想:“这种问题有意义么?直接上网查一下不就知道了?”,后来,自己当了面试官后,终于理解了为什么会问这种看似“无意义”的问题。

其实,作为面试官来说,无非是想考查一下你对技术的关注度,有没有跟进最新的技术,有没有研究新技术的细节,或者你的性格是保守派还是激进派等等。

有人可能会问:

就算知道了最新版本,又有什么用呢?难就比别人牛?

这样理解是有失偏颇的,得从长远的角度来看,如果一个人从工作以来持续不断的学习新技术,当时间以年来计时,最终会发生量到质的转变,这才是这个问题的更深层次的涵义。

当你从一线工程师转变为 Leader 或者 Manager 后,需要学习的东西会更多,因为你是团队的主心骨,是团队的灯塔,是大家坚实的后盾,所以,你需要学习的知识会更多,不仅仅要时刻关注技术和业务,更要关注到团队的每一位成员的精神面貌、工作状态、生活状态等等。

有人问我:

森哥,你是如何持续学习的?

其实我的方法很简单,仅供大家参考:

  1. 坚持阅读(书),给自己定个目标,不用太激进,重要在坚持,而不是追求速度

  2. 订阅 RSS ,像 GitHubTwitter 等一些社交媒体都有 RSS 接口,最好的办法就是关注业内大牛的动态,或者根据 Twitter 话题生成 RSS ,每天花 1-2 小时在上面

  3. 动手实践,比如新出了一个工具或者一门语言,动手写个好玩儿的 demo (不是 helloworld 那种)

  4. 养成定期总结的习惯