小李毕业后在一家公司做软件工程师,转眼间,一年多的时间已经过去了。
回想刚毕业那会,他是怀着无比忐忑的心情进入了这家公司的技术部门。各种新奇的开发工具,叫不上名字的众多软件框架,庞大的代码库,井然有序的工作流程,都是小李以前在学校里不曾遇到过的,这让他感到了前所未有的压力。于是,在开始的那半年,小李就像一株久旱的禾苗遇到了雨水,拼命地吸收着工作中遇到的每一点知识。他学习新的编程语言,学习新的开发工具,学习调试和解bug的技巧,也学习处理各种棘手的业务逻辑。虽然每天工作很累,但每天都是满满的收获。
而现如今,小李俨然是一名很有经验的老手了。对于工作中一般的问题,他都能游刃有余地加以解决,无非是把现有的一些内部接口重新组合利用,或者按照原有的套路重新设计改进一番。应付工作既然比以前轻松了许多,工作的压力也就显得没有那么大了。于是小李平常也能抽出时间来上上网,看看美剧,或者打打游戏,有时候也带着女友去看场电影或者球赛。
然而时间长了,小李心里却隐隐多了一丝不安。他再也找不到开始那种突飞猛进的爽快了,而且当对工作越来越熟悉之后,工作本身开始变得枯燥、没意思。他决定花更多精力在自己的技术提高上,但却感觉无从下手,很难突破。每次完成一个新的开发需求,也只是不断重复旧有的东西而已。
小李的情况其实非常典型。很多技术人员在工作一两年之后,对工作周围的事情都驾轻就熟了,就可能会陷入第一个瓶颈期,再难突破。
为了能更清晰地分析技术成长过程中出现的各种情况,我们来对技术的成长曲线做一个总结。如下图:
技术的成长过程并非匀速线性的,而是分阶段的。每个高速增长的突破期后面,都跟着一个平缓的增长期,可以称为舒适期,也可以称为瓶颈期。舒适期是针对过去而言的,而瓶颈期的说法则更着眼于未来。
一般来说,突破的过程,绝非轻而易举,而且有可能伴随着阵痛。它需要我们付出十分的心力,甚至承担一定的风险,做成一些原本超出自己能力极限的事情。而一旦过了突破期,各种技能在这个层次上融会贯通,就会给我们带来极大的自信和成就感。这个时候,处理同一层面的问题,逐渐变得轻车熟路,于是进入了舒适期。
舒适期对人有一种天然的吸引力,我们只要待在这个阶段,就能获得最大的安全感,尽量少地遭受不确定性的折磨。很多人会选择待在这个区间,不再走出一步。而另一些人则会对这一阶段的缓慢增长产生焦虑,于是舒适期变成了瓶颈期,从而引发下一轮的突破。
以每一次大的突破为分界,我们可以将技术人员的成长粗略划分为四大阶段:新手、熟手、专家、宗师(开创者)。
新手经过半年到一年的工作经验,如果能成功适应这份工作,基本就能有所突破,变成一个熟手。熟手的特点是,能对现成的工具充分利用,胜任大部分日常工作。在技术水平的表现上,他了解大部分的技术概念,但不一定理解真正的含义;在他的眼中,技术还无法自成体系,能理解到的知识架构还有所残缺。他解决问题所依靠的,更多是经验而非缜密的逻辑。前面提到的小李,就处于这个阶段。
熟手再向上突破一层,则成为技术专家。专家,在某个领域拥有足够全面、系统而深入的知识储备,对于技术上的疑难杂症,有能力深入到足够的层次,指出问题的症结所在;另一方面,专家还应该能够完成对具体问题的抽象,拥有“造轮子”的能力。在专家的眼中,技术的黑盒子被打开,知识点也不再是孤立存在的,而是相互枝连,构成一个完整的逻辑系统。
而真正达到宗师这一级别的,整个世上也寥寥无几。他们是真正的开创者,能够引领一个技术时代。什么样的人才配得上“宗师”这个称呼呢?比如Dennis M. Ritchie(C语言和Unix之父),再比如Linus(Linux内核的发明人)。
但就像前面的技术成长曲线图所描绘的,技术的成长阶段并没有一个上限。无论你处在哪个阶段,前面仍然存在无限的上升空间。
近日细读金庸老爷子的《射雕英雄传》,忽然意识到,郭靖乃是金庸武侠中天资最为鲁钝的一位主人公。然而,郭靖从一个普通少年,终成长为一代大侠,这一过程,正好暗合了前面讲到的技术成长曲线。
郭靖从六岁开始,在蒙古大漠接受江南六怪传授武功,花了整整十年。后又得全真教掌教马钰传授内功一年有余,武功初入门径,获得了武学上第一个突破(熟手期)。处于这个阶段的郭靖,在武功上与同龄的杨康不相上下。
郭靖在武学上的第二个突破,起因于两个事件:一个是“北丐”洪七公传授他降龙十八掌,另一个是老顽童骗他背诵《九阴真经》。经过一番历练,在华山顶上,他已经拥有了分别与“东邪”和“北丐”过手三百招而保持不败的战绩。此时的郭靖,已经是高手中的高手了(专家)。这第二次突破,他只用了两年有余。
而郭靖的第三个突破,已经是在《射雕》之后了,终于成长为一代武学宗师。
为什么天资并不出众的郭靖,却能够接连取得突破呢?至少两个原因不容忽视。一个是勤奋,“人家练一朝,我就练十天”,所以根基打得好;另一个原因是他恰好学对了东西,降龙十八掌和《九阴真经》都是正宗武学,有幸学到自然是突飞猛进。
技术成长的关键在于突破。
然而,在技术成长的路上,越到后面,突破的难度就越大。大部分新手,只要保持足够的勤奋,总能达到熟手的程度。但很多人却止步于此,他们或流连于舒适期的诱惑不肯走出来,或长期卡在瓶颈期却找不到突破的出口。能够突破达到专家这一阶段的技术人员,已经足够成为各大公司技术部门的翘楚了。而要达到宗师的级别,则不光靠个人的努力,还需要时代的机遇才有可能。
那么,为了达到真正的突破,有哪些因素是我们需要重视的呢?
第一,根基。
在接触一门新技术或者一个新的技术领域时,良好的基础有利于我们快速突破,抵达下一个阶段。不同技术之间,基础却是相通的。比如,对于计算机软件学科的基础知识——数据结构和算法,处于熟手期的程序员可能多半会认为它们在工作中根本没有用。这是因为这个阶段的技术人员主要靠孤立的经验解决问题,一些基础的知识自然就用不上。但对于技术专家层次的人来说,数据结构和算法却是在系统设计的很多方面潜移默化地发挥作用。对于其它计算机基础学科,这个道理也同样适用。
再比如,现在人工智能和机器学习技术比较火,似乎全民都在学习。但要想学好这些技术,至少应该对于微积分、线性代数、概率论、统计学等数学知识有比较扎实的基础,才能走得更远。
第二,外因,一个不疾不徐的环境。
过于宽松的环境自然不利于人的进步,而盲目的紧张也不利于人的成长。
突破的过程需要付出巨大的精力,所以需要投入足够的时间去从容地完成。我们大概都经历过这样一种场景:新产品上线在即,但还有很多问题需要解决。如果距离预定上线时间还有数天,那么我们可以相对从容地用比较优雅的方式来解决这些问题,并做一些长远的打算;但如果我们碰到的情况是,两个小时以后就要上线了,那么我们多半会想一些歪点子来规避这些问题。
产品开发和技术优化,有时相辅相成,有时又互相矛盾。如果你所处的工作岗位,只是要求你不停地修改业务流程,盲目地试错,那么,可能公司根本没有给你留出技术突破的空间。试想,一个主旨不清,功能点做了新的就扔了旧的,而没有长远的目标,也不去持续优化体验,这样的一个产品,又怎能有持续的生命力呢?
第三,正确(正宗)的学习资料。
新手刚开始工作的时候,通常只要看一些入门教程(Tutorial),跑几个Demo,扫除了表面上的技术疑问点,再针对业务代码向老员工请教一番,基本就能开始工作了。然后一边编码,一边查阅所需要的API Reference,时间长了,经验和技巧足够多了,就自然变成熟手了。
而从熟手向专家的突破,则需要系统地去补习知识架构。技巧应该建立在对于普遍规则的理解之上。这里不得不提及Spec,它是涉及某项技术的完备的、系统的描述,包含该项技术涉及到的方方面面(具体参见我的另一篇文章《技术的正宗与野路子》)。在奔向技术专家的路上,阅读Spec,是不可逾越的一道功课。《射雕》中郭靖的武功突破,很大程度上就是因为他阅读了《九阴真经》这份大大的Spec。当然,除此之外,你可能还需要通读重要部分的API Reference以及Source Code。
技术专家必然将原始文献(官网Spec、论文等)作为知识的第一来源。相反,跟着某人的博客去系统地学习某方面的技术,是要冒有很大风险的,还需慎重选择。
最后,要想成为技术上的一代宗师,则需要更高的抽象,做出完全创造性的工作。这份工作不仅仅是阅读Spec,解决具体的问题了,而是创作Spec,开创全新的天地。
第四,独立思考,不要自我设限。
现在,很多人喜欢把技术好的人喊作“大神”。这自然是代表一种尊重,很多听的人也很受用。
但是,“神”的称呼暗含了一层意思:神是无法超越的,是普通人学不来的。这是人们在潜意识里划出的一道鸿沟。所以,我就不太喜欢类似这种称呼。
很多人碰到问题就喜欢找身边“大神”去问,但殊不知问再多问题,你仍然无法真正地有所提高。普通人和“大神”之间真正的鸿沟在于,能否独立思考和解决问题。
在追求技术成长的路上,不可能总是一帆风顺。我们不免有时沮丧,有时欣喜。
人生苦短,有人穷其一生,就是想要达到理想中的那个状态。但不管结果如何,当我们青春不再的时候,只求问心无愧。
(完)
其它精选文章: