前言
毕业之后在上海、成都、上海的城市中徘徊,每一次城市迁徙都带我许多的烦恼; 于是在2017年初时,我回到了深圳,选择加入当时对我来说是神秘的存在——腾讯。 至此,已经过去一年半的时间。期间的成长、收获颇多,便在国庆与大家分享。
正文
腾讯是一家巨型互联网公司,今年即将满二十岁,市值在年初的峰值竟高达四万亿港币(虽然今年跌惨)。如果妄图用一篇文章来介绍腾讯,那么必然是一篇数百万字的长文,我不具备那个资格和能力,而且对读者的帮助也非常有限。本文便从一个程序员的角度出发,审视我经过鹅厂的锤炼之后,现如今对工作和生活的一些看法。
本文皆是个人感受与观点,与公司无关;
一、技术
技术是我等一线开发人员的立命根本,具体的能力体系非常庞杂。 及时审视自己具备的能力以及将要发展的方向,才能对比得出自己的优势和不足,从而保持领先而补齐短板,形成自己的独特竞争力。 我个人将技术分为三大块:
1、基础能力
基础能力指的是从学校或者其他途径学习的计算机基础知识,以及在岗位上需要的技术基础。以iOS开发为例,基础能力包括本科所学计算机体系结构、网络原理、编译原理、数据库等,以及iOS岗所需的Objective-C、Xcode知识等。 基础能力具备一个特性:木桶原理。在基础能力方面上如果有某些方面知识的缺失,就如同有短板木桶,严重影响整体能力的提升。仍以iOS开发为例,如果没有学过算法原理,便错过一套分析代码复杂度的工作,在做性能优化容易则不知深浅;如果没有学过网络原理,那么数据包怎么从移动端转发到服务端就没有概念;如果没有学过计算机体系结构,那么可能分不清内存Memory和缓存Cache。 更进一步的去看基础知识,实际开发中这些基础知识会综合起来使用。对于大部分的技术,我们不仅仅是去使用,而是要清楚其背后的运行原理。基础能力仍在不断更新扩展,需要不断关注本行业的新技术潮流,了解其背后的原理性知识。 基础能力的齐全,既有助于快速理解和学习,也有助于减少在深入学习中遇到的坎。
2、解决技术问题的能力
技术服务于产品。在把技术应用到产品,会遇到诸多实现中的困难;功能在上线运行后,会遇到预想不到的问题;在对技术做进一步优化时,需要对解决更难的技术问题。 我们可以把这些从学习到实践过程中遇到的问题,统称为技术问题。 解决技术问题可以分为三步:定位、解决、反思。 定位是解决问题的关键,决定问题解决的方向和时间。定位过程需要逻辑思维能力和信息收集分析能力,在熟悉问题前因后果之后,根据上下文和问题表现,迅速判断出来导致问题的要素。 解决的办法有很多种,因人而异,因地制宜。有时候定位到问题之后,根据自己所学的知识,便可以产生合理的解决方案;有时候发现这是一类通用的问题,那么可以上Google查找别人的解决方案以缩短时间;有时候需要自己尝试多种解决方案,这需要能解决问题的自信和不断地尝试。 反思是我在鹅厂中受益匪浅的一个环节。反思有两层价值,一是总结解决问题中的收获,在下次遇到类似的问题时可以快速解决;二是探寻问题出现的原因,如果是可避免的因素则做出改变,避免相同的问题再次出现。
3、核心能力
没有别人学不会的技术,但有别人短时间内学不完的技术。 这是我在鹅厂另外一个感悟深刻的点。这里开发人员的平均素质是我待过团队中最高的,不管是校招生还是社招员工,基础知识扎实,同时具备很强的学习能力。 那么如何在人群之中脱颖而出? 我的答案就是勤学苦练。既然没有别人学不会的技术,那么就掌握足够多的知识,形成知识面上的差距。确实没有人学不会的知识,但当这些知识需要别人不间断地花半年时间去学习,便形成了知识壁垒。以iOS开发为例,iOS平台的技术深度其实就是由众多知识体现,包括逆向、iOS操作系统、runtime等等。 在频繁补充知识的过程中,还有一点是非常重要:知识体系的搭建。学习过程中方方面面的知识均要涉猎,但注意轻重结合、深浅有度;再通过知识的组合与灵活搭配,在脑海中形成对于某一块知识的整体结构。这就构建出属于自己的知识体系。 之后便可以并在学习的过程不断剖析现有架构,对比他人的思路并分析利弊,最终实现不断扩大自己的知识圈。
在鹅厂的面试中,询问最多的往往是基础能力,因为解决问题的能力是建立于扎实的基础知识,而且时间紧凑的面试中,很难构建出复杂的场景和提供足够的时间给求职者。 需要较长时间才能掌握的核心能力是一个人能力和经历的象征,代表着他具备足够撑起更复杂技术的基础,也证明他可以解决学习过程中遇到的种种困难。 鹅厂在培养员工的解决问题能力上不留余力,因为这是产出价值的最快成长途径。能通过几轮面试进鹅厂的开发人员,大都具备不错的基础能力。假以时日,配合鹅厂解决问题的方法论,大多能迅速产生价值。 基础知识需要较长时间去积累,而核心能力会提高员工的不稳定性。