在这个节点讲讲我对职业发展路径的理解,另外就是理一理脑子里的一些思路,过段时间再看此文又可能是另一番理解。很多路从后往前看的时候总会有遗憾,要是当初怎么怎么样就会怎么怎么样?再完美也会有缺憾,因为人是不知足的。后悔也没用。有一句话叫做:早知如此,又何必当初。命运有些是自己可以掌握的,有些可能需要运气和机会。
先说说路径可达这个词吧?这个词我曾经说过一次,我看很多人会觉得他的路看不到未来,有些人就可以清晰的看到他的方向。这句话怎么理解。比如说你现在所做的工作过两年会不会有所改变。如果答案是否定的,那么说明现在的工作是没有上升通道的,就需要改变。当然安于现状不思进取是另外一回事。时刻反思自己所走的路,然后迅速调整,可能会少走很多弯路,毕竟时间不可逆。
我很多时候都会想我五年后在哪里,做什么?大部分人对于这个都会很模糊。因为时间跨度太大。五年时间相当于整个生命长河其实很短,但在职业规划中确是很长的段,也没有谁会把五年做为一整段来规划。从时间规划来讲肯定会用到时间的切分。很多宏观的东西只有落地到一件件事上才是有效的,才算得上完整的规划。每天都在想我五年后做架构师,做项目经理。这样除了浪费时间之外没有任何好处。但是话又说回来人是有惰性的,人对于这种限制的东西有天然的排斥感,执行起来非常痛苦,即使开始执行起来很有激情,过不了几个月,所有的计划都缩水了。至少我是有这种感觉,所以我的计划永远都无效,这同时也导致了很多事情的浪费和盲目性。也导致学习变成一个一个孤立的点,完全没有串连性。因为你是想到学什么学什么,而不是计划着学,一段时间后可能会有一些积累,但是永远深度不够,这是我大部分时候的感受。没有计划是很要命的事。如果一个人能很好的管理时间那么必成大牛。好学生好在哪里,排除智商的因素外,就是时间管理和善于思考。我觉得我本身最大的问题:时间管理,自律性,沟通能力。这三块是我觉得自己最缺乏一定程度上是致命的,很大程度上会决定我未来的所发展的高度。
在程序员中一直有个讨论就是将来要做项目经理还是做架构师。这两条路的侧重点不一样,所以积累的东西也可能不同。项目经理更强调综合能力,比如说协调能力,沟通能力等一系列偏管理的能力。而架构师可能更专注于技术本身。两条路有重叠,但是更多的是区别。有些项目经理可能就不会写代码。但是同样可以带好一个项目,一个团队。
我曾经也问自己要是以后这两条路走哪条,其实都可以尝试一下。比如说给一个项目让我带带,我能否把它带好,其实需要机会,同时也需要自己去争取这样的机会,所以我的答案就是两条路都可以走走。很多人认为项目经理是一个职位,我倒觉得是动态的,这个项目中你做PM,另外一个项目中可能又是开发。所以不永远是PM,也不永远是开发。
就自己本身的发展而言,专注于技术可能是一条更加明智的路。管理这个东西总的说有点虚无飘渺,各都有各的一套理论,完全无法评估。但是技术是可测量的,通过一定的努力技术水平都会有定的跃升。记得在《肖申克的救赎》里面说到地质的形成只需要两个条件:压力和时间。其实对于学技术也是一样的。只要肯学一定会达到某个水平。到大牛级别的确实需要一些悟性和天分。
我记得以前总有人问我你最擅长的领域是什么?这个问题一问我就懵了,因为我从来就没想过这个问题。可能本身还没到分领域的级别。还处于一种“原始积累”阶段。技术学到一定的时候是分领域的。领域之间会有一些交叉。
我所知道的大方向是“高性能,大数据量,移到平台“。这是我给Java这所分的三个方向。其实我上面所说的三个方向不一定是同一个维度。但是我认为写Java的如果没有沾上这三个方向中的一个,一定没有前途。高性能和大数据量的处理需要比较多的技术储备。很多人说写个Java就是CRUD(严格来讲,对于计算机本身所有的操作都是CRUD)。可是在高性能情况下所涉及的问题一下成指数级增长。各种“水平扩展”,“服务化”,“容灾”,”缓存”等各种牛B的词汇就来了,你写一般的CRUD最多也就知道个SSH,这是不一样的。比如说做大数据量的处理一定会知道Hadoop,然后就是云计算,云存储。反正什么牛B什么来。移动平台和上面我所说的维度不一样,因为移动平台相对应的是PC平台。但是由于移动平台的发展时间很短。所以能搭上这趟快车也有不错的发展。要是早些年(2012年以前)进入移动平台的开发,现在同水平的程序员工资肯定更高。这是平台发展所带来的红利。虽然两年前我预见到了移动平台的无可限量,但是那时候就像一个一无所有的人,还管它什么移动平台还是PC平台,能写代码做项目就OK。以至于我学了一个月的Android就偃旗息鼓。这里其实又验证了我的几个缺点。
不管怎么样技术的底层都是一样的,这就是为什么算法和数据结构是永恒不衰的。很多人说算法和数据结构无用那就是无知的表现。这个无知就像在讨论读大学有没有用一样。
我为什么觉得自己应该走架构师这条路,这和我职业终极目标是契合的。这里先说一下架构师做什么?架构师负责整个项目甚至整个系统的构架(这一句话等于废话)。一般型的项目可能这个设计PM就做掉了。但是系统复杂度上升的时候,会涉及到系统之间的交互,还有技术的可行性和整个设计的方案,主要是从宏观上来讲。这个时候架构师就出场了。另外的工作就是承担一定的培养新人的工作。所以架构师都需要具备比较好的口才,很多人都说程序员不会说话,错了,那是低端的,到了高端的程序员口才都极好,一点都不比做销售的差。这后面会发现有一个发展方向就是“讲师”,还可以写书,其实这些都可能是一些“副产品”。技术到一定的境界很多事情到都是水到渠成。
架构师写代码吗?当然写。他们肯定不会写那些简单的代码,他们一般写什么代码?框架,一般来讲优秀的框架都是一个人或者极少人写出来的。比如说Linux的核心就是一个人写出来的。好的代码绝不是人堆出来的。你给100个初级程序员也整不出一个Struts来。这里会衍生出另外一条路,就是开源框架,很多牛人都是开源社区的爱好者。都或多或少的参与了一些开源项目。甚至把自己写的一些东西开源出来。程序员发展到后面其实是“知识分子”。一般来讲能做到这个级别那是相当厉害的了,这当然不是普通人能做到的。
上面所说的是条路径,能走到哪一步有机遇,从长远来讲都是自己可以规划的。如果机会好可能少个几年,机会不好可能多个几年。理论上来讲这条路对于每个程序员讲都是可达的。所以事在为人,骚年,加油吧!