一个程序员对职业生涯的思考
来源:爱公司的程序员
从刚毕业到目前所在公司,差不多6年了,想想这六年里面,自己的能力和刚毕业比有了很大的提升,但是现在在什么能力上,我不知道,毕竟没有去过别的公司。最近也在思考自己未来,算是比较迷茫阶段。趁最近比较闲,顺便整理一下自己的职业路程
● 刚毕业阶段—工作一年半
刚毕业进入公司,公司的规模还算比较小的,那个时候觉得很开心,过的也比较充实,自己的任务就是写代码,读代码。在那个时候,自己的能力提升的非常快,毕竟在学校里面做的项目完全无法和公司的所在的项目类比。公司有一套自己的框架,在那个时候的我看来,写的非常不错。有很多比较好的编程规范:约定大于配置,强制树状依赖,多工程模型,但是也存在明显的问题,就是大量使用command 模式以及弱参数类型,导致接口上无法很直观定义入参和出参。那个时候第一次接触到正式项目流程,典型的瀑布式模型。这个阶段自己主要的精力就是学习公司的业务,阅读公司的框架的源代码,知道了很多 apache 开源项目,也是这个时候,能够熟练的使用一般的设计模式。那个时候公司的规模也比较小,经常也会写一下底层的工具类。架构也比较简单,没有所谓的分布式架构,基本上所有的业务逻辑在一个系统里面全部可以找到,排查问题也非常简单。
个人觉得,在这个阶段,是最适合学习的,尤其是自己的编码技能,也是在这个时候最容易提升的。刚毕业出来的时候,人还有一种拼搏的精神,这个时候相对来说各方面压力比较少,心也沉的住。比较适合学习编码。这个时候公司比较少,你会接触各个方面的知识,包括项目管理,项目部署,项目构建,数据库开发,这个阶段时间是最有效率的,不会有那么多邮件,流程,规范。
● 工作一半年阶段–工作4年
这个阶段就是慢慢的开始职业化的过程。从带项目开始,后来开始带人,带团队。这个时期主要偏重设计,所谓设计,就是根据产品整个业务流程,在目前业务框架和技术框架的限制下,给出具体的实现过程。这个阶段公司就开始越来越大了,系统越来越多,业务越来越复杂,慢慢的转变为分布式架构。目前想从一个系统了解到整个业务的流程,已经不太可能。随着拆分的系统越来越多,一个简单的业务流经的系统越来越多,团队配也就越来越重要。沟通和配合能力在这个阶段显的尤为重要。
随着公司的越来越大,工作上的邮件越来越多,流程越来越繁琐,规范越来越完善和变态,沟通和配合越来越多,投入在纯技术层面时间也就越来越少。同时由于工作的高度细化,有dba,发布团队,开发环境配置团队,工具开发团队,前端团队,测试团队等等。你会发现你很难掌握全局。一个人越来越封闭与自己所负责的圈子里面。基础技术团队已经把所有的组件都封装好了,你只需要实现产品需求就可以了。慢慢的,业务开始主导你的职业生涯,你从一个程序员,会变成一个业务分析师,你花在业务分析上的时间慢慢的会超过编码时间。而公司的组织架构也慢慢的向业务架构看齐,业务架构慢慢不在coder。从这个角度上看,新技术的研究已经毫无意义,你需要的技术都有底层技术团队来实现,你只需要关于业务。这个时候应该是大多数业务导向型公司发展的必经阶段。
在这个阶段,是公司飞速发展的阶段。也是个人晋升最快的时期。记得 现在的yahoo总裁-玛丽萨·迈耶在google的时候就问过佩奇:如何才能更快的晋升,佩奇回答:加入高速成长的公司。这个说法是相当有道理的,因为公司的业务发展需要更多的更高的职位,这个时候也是人生中最累的时候。但是只要你肯努力,你的机会会很大。可惜这个时候自己有点傻。也没有全力去拼。随着公司业务的发展,业务已经慢慢的趋于饱和了,已经不是打天下的时代,必然不会有太多的机会。而自己的两个朋友在公司发展的顶峰期离职,去了其他的公司,付出超出常人的努力,已经是技术二把手和产品总监了。所以晋升有两个关键因素:1 加入成长期的企业 2付出更多的努力。不过这个也是赌博,全靠眼光和运气。
● 工作四年到现在
如果说第二个阶段还会写代码,这个阶段基本上没有写过代码。这个阶段做什么,管人,管团队,开会,管自己的业务,规划业务的发展。当公司越来越大的时候,政治,官僚气息就开始了。在这个阶段,自己也是做的最没有意思的时候,开会讨论需求,一个很简单的需求涉及的利益就很大,开会就在不断的pk和吵架中进行。毕竟业务架构都是虚的,互相不认同,不像代码,好与坏一般都能够分的清楚。这个时候,一个人的技术实力已经显的不太重要了,重要的是沟通,pk,忽悠能力。能把业务方,别的业务团队,开发忽悠住就可以了,忽悠这个能力,也许需要更高一个层次。这个阶段的开发同学就很苦逼,被这种流程,协作,规范逼着,有各种各样的质量、缺陷指标。
这个时候抽象思维能力就比较重要,这也是忽悠的基础。这个往往在架构pk中起决定性作用。业务的规划需要更高的领域知识以及抽象思维能力,而去实现它,相对来说比较简单。所谓抽象,就是从众多的事物中抽取出共同的、本质性的特征,表现在编码方面,就是设计模式,表现在业务上,就是业务架构。由于业务架构和组织架构吻合,往往业务架构能力强一个组织所在话语权就会比另外一个组织强。
从体现一个人技能主要通过三个维度:
高度:这个层面往往体现在规划能力,能够看到未来业务的发展,设计出相对合理的架构满足未来业务的快速扩展。这个阶段应该是少参与到具体的编码中去,应该是一个公司的cto或者首席架构师角色。这个方面的能力比较虚,相对来说也是最难炼成的。
广度:就是知识领域的广度。反映在it技能上,就是所掌握的领域,比如.net,java,数据库,web,前端等等。不一定每个领域都能够精通,但是至少都能了解,能够在面对问题的时候能够拿出一个切实可行的解决方案。对于跨领域方面,可能是你的沟通能力,管理能力等。
深度:在某一领域有很深入的了解,旺旺是一门具体的技术。比如js代码写的很精通,数据库知识非常丰富,精通linux操作系统底层。
深度->广度->高度,越往上,要求的抽象能力越高,越往下,要求细节知识越具体。一个人往往具备了以上三样,就是一个成功的大牛。
&
体现一个人价值的也可以主要通过以下五方面:
1 it技能:这个就是具体的技能,这里就不列举了
2 领域知识:就是你所在行业领域的业务知识,包括证券,基金,电力等等。这个往往在行业领域是最有价值的,也是决定你主要身价的方面,当然前提是你不是做纯技术方面的工作。比如底层框架的开发,数据库管理员。
3 学习能力:这个也比较重要,毕竟it这一行拼的是脑力而不是体力
4 人脉资源:这个专门指it行业领域(我们一般找关系),遇到问题,你可以请教他们,相当于多个大脑
5 软技能:也就是沟通、协调、管理能力
你会发现,大多数情况下,你想职位越来越高,后面的比重会越来越大。
在学习方面,你要从学习具体知识到学习抽象知识,再把抽象知识应用到具体事物上。这就是术和道。反映在it技能方面,就是原理和实现。学习一门技能,一般都从具体的用法开始,在开始学习其原理,然后知其原理,在反过来应用实践。除非是工作必须用到,我们应把更多的时间学习道,只有道,才是最保值的,也是最长久的,好比代码设计思想比代码实现过程更重要。
扯了这么多,回家去。推荐一本书《暗时间》,里面道比较多。呵呵。