2016-08-01 16:41:57 +0000   |     others career path   |   Viewed times   |    

看到这个博客 - hellojavacases微信公众号 - 上关于程序员职业规划的鸡汤文。算是见过同类里鸡汤地比较干的。还算言之有物。转过来,留存传阅。喜欢的同学可以去那里逛逛,不少东西值得花个5分钟读一下。

下面三篇其实讲的都是差不多的内容。所以就贴到一起了。

第一篇 《程序员的成长路线》

原文地址: 《程序员的成长路线》

工作这么些年了,看到了各种各样的程序员,也看到了各种各样的成长路线,说说自己的一些观点吧。

作为技术人员,在刚起步阶段时,首先需要拓宽自己的技术宽度,对自己所做的项目/产品所涉及的方方面面的技术都应该有所了解,另外对于就是学习工程化,让自己真正具备开发商业软件的能力。

在工程化和知识宽度达到一定阶段后,需要开始根据自己的兴趣和工作内容有所选择,主要是加强在某一领域的技术深度。

在技术深度达到了一定阶段后,需要对自己做出一个选择,就是偏业务方向,还是偏基础技术方向。

偏业务方向的技术人员,我认为做的好的表现是:

  1. 对业务发展的未来有一定的预判,有商业敏感意识;
  2. 能对复杂的业务进行合理的抽象;
  3. 在系统的设计上能对未来业务的变化有一定的预留处理。

偏基础方向的技术人员,我认为做的好的表现是:

  1. 能结合业务的发展趋势对基础技术的方向有一定的预判,避免业务发展受到基础技术的拖累;
  2. 对业界的技术发展方向有自己的认知和判断;
  3. 在对应的基础技术领域有不错的技术深度。

结合自己的特质以及当前的一些状况,做出一个选择,重点发展。

而再往更高阶走的同学,通常就会出现一种新的角色,就是成为团队leader,做为一个技术团队的leader,无论是业务的还是基础技术的,在技术能力上还是不能差的,尤其是判断力上,另外,作为一个团队leader,就意味着承担了团队方向的判断的职责,一个团队的方向基本会直接影响到团队所有成员的未来,以及所支持的业务的发展状况,所以对于一个团队leader,我觉得最重要的能力就在方向的判断上,然后是根据方向的判断的组织建设(团队搭建,人才识别、培养、招募等)能力。

如果不是往leader方向呢,那基本就是往架构师方向为多,架构师的话,在至少一两个领域的深度外,对广度的要求非常高,还有同样就是判断能力,无论是业务架构师,还是基础方向的架构师,领域的知识宽度是非常重要的,意味着能做多大范围的事,判断能力会体现出一个架构师在做一个架构设计时重点是怎么判断的,在有限的资源和时间情况下取舍是怎么做的,对未来是怎么做铺垫的,以及TA对事情的技术控制能力,一个好的架构师在技术风险的控制能力上必须是非常强的,例如一个强大的基础领域的架构师,应该是可以很好的控制跨多个专业技术领域的技术演进。

还有一种是往专业技术深度领域方向走,例如内核、JVM等,这些领域是真正的需要非常深的技术功底才能hold的住的。

还会有其他例如转型往业务产品方向等发展的就不在这说了。

总而言之,言而总之,我觉得在整个成长过程中,兴趣是最为关键的,所以follow your heart非常重要,只有在有足够的兴趣或梦想的情况下才能产生很强的自驱,没有足够的自驱我觉得在技术领域基本上是不可能走到高阶的,除了兴趣外,自己的优势也要判断清楚,每个不同的方向,我自己认为还是需要一定的天分的,而所谓的天分我觉得就是对个人优势的判断。

第二篇 《码农的职业规划》

原文地址: 《码农的职业规划》

“码农”主要分业务研发和基础研发,业务研发包括了各种编码实现业务的研发和架构师;基础研发包括了各种更偏基础技术产品的研发和架构师,例如内核、JVM等。

业务研发适合的发展方向我认为是业务PD、业务研发架构师和基础研发,业务研发要做好我觉得除了基本技术外,最重要的是商业敏感性,商业敏感性决定了在实现业务的时候能否为业务将来的发展模式做好铺垫,避免业务变化导致结构推翻,如果商业敏感性不错,可以考虑往业务PD或业务研发架构师的方向发展,更喜欢偏技术一点的话就选业务架构师,更喜欢偏纯业务的话就选业务PD,如果商业敏感性不是很够或没兴趣,并且对基础技术更感兴趣的话,我觉得更适合的发展方向会是朝基础研发方向发展。

基础研发适合的发展方向我认为是基础研发专家、平台架构师和业务研发。

如果优势更偏向于商业敏感性,适合的是转向业务研发方向发展。

基础研发专家和平台架构师这两个发展方向主要取决于个人对专和广的爱好,例如像JVM、内核就是非常专的方向,如果个人的兴趣和优势主要是做这类专的方向,我觉得整个职业规划是最好做的,就是在某个领域不断深挖就行,这类方向在大规模的公司中需求会比较强烈;另外一个方向是平台架构师,平台架构师适合喜欢在广度上发展的同学(或者没能力在专业领域做深),平台架构师最需要的是技术的广度、视野、眼光和平衡的能力,技术的广度是指技术的全栈掌握,软件不仅仅是编码实现,还得考虑实现后运行起来需要投入的成本、持续维护的能力,视野是指掌握业界在相应技术领域更前进一步的做法,眼光是指能够看到技术领域的发展方向,并且能够看到业务将来发展会带来的基础技术的挑战,平衡是指能根据现状(团队、目前的结构、时间)来权衡架构的发展节奏,这个是最难做到的。

所有的发展方向其实都不存在哪个能NB,哪个更low的问题,只有哪个更适合自己的问题,这主要取决于个人的优势和兴趣,另外还需要考虑的一个因素是长期的职业规划,例如以后是想创业做CEO,想加盟创业公司做CTO等,这也会很大程度影响到在一家公司的职位的选择。

第三篇 《我是这样考察学生的》

这篇他自己网站上不知道为什么没贴,这是别家的盗链: 《又是一年校招季,我是这样考察学生的》 谴责一下盗链。

又一年的实习生招聘进行中,近来面试了一些学生,分享一些感受,希望对学生们有些帮助。

对于学生而言,相对而言实际的工作经验或者说工程经验会有些差距,因此就我而言,我主要考察的会是技术基础和技术兴趣这两点,进阶的话我会考察在专业研究方向(通常像硕士、博士都会有专门的研究方向)上达到的高度。

技术基础 技术基础要考察的具体的知识点,我在面试前会通过读学生的简历(所以简历非常重要)来决定,一般来说就是就所做过的项目,读过的书来决定要问的知识点,举几个例子来说明下。

例子一 简历里写了写过一些多线程的程序,或者是看过一些并发领域的书,这种情况下通常我会问多线程中的一些更具体的知识点:线程池实现的细节、降低高并发程序锁竞争的方法等;

例子二 简历里写了写过一些网络通信程序,这种情况下通常我会问Blocking-IO,NonBlocking-IO、AIO的不同;连接池、短连接、长连接、连接复用的不同;C10K的难度等;

例子三 简历里写了做过一些Java Web应用的开发,这种情况下通常我会问在这个Java Web应用中用到的框架的知识点,例如Spring的话IoC,AOP的实现原理是什么,或者实在不知道的话可以考虑如果自己要做的话怎么实现等;

例子四 简历里写了对JVM有学习,或者通过JVM参数调优Java程序,这种情况下通常我会问学习的JVM点:JIT、GC、参数的具体作用和对应的背后的原理等;

在上面这些技术基础的知识点的考察中,会设计问的问题逐步越来越深,试探学生在这个知识点上掌握到到了什么程度。

专业研究方向 硕士、博士都会有专门的研究方向,我通常会问研究的方向是什么,涉及到的知识点,研究的方向在业界目前的一些东西的状况等,例如研究方向是弹性资源调度,我会问Mesos、Borg这些事怎么做的;

前面两部分都过关后,我会开始考察技术兴趣。

技术兴趣 技术兴趣这个看起来好像很难考察,但我觉得其实是可以体现出来的,例如前面技术基础中考察的用到的东西的背后的知识点,在这个点上我通常还会问其他几个问题。

对项目中用到的东西背后的知识点在项目后一直继续研究的知识点?

有做过什么非项目/非老师授命的技术的东西,为什么做?

有过不吃饭、通宵做过的什么事情的经历,是什么事?(我始终认为一个对技术极度有兴趣的人,一定都会有不吃饭或通宵写代码的经历)

总结 对于我而言,技术兴趣会是我要求的学生的基本点,没有兴趣的话基本上我不会招,不过这点其实是相辅相成的,没有兴趣还能把技术基础做到非常好的人其实很少;在技术兴趣的基础上,技术基础扎实的话基本上就可以招了,在某个专业点上做到了广阔的视野,较深的研究的话我基本上就会列为努力吸引招进来的人才,如果还刚好是对口的专业点,那就要列为必须努力吸引招进来的人才。

从经历的面试来看,很多学生都会在技术基础这点考察上闯关失败,这里我认为多数是因为对技术的兴趣导致,另外一个原因是学习方法,在如今这么发达的信息传播和分享时代,我认为只要擅长用Google,基本就可以学的还不错,还有就是多写代码练手,很多学生会认为没有实际的场景,没法练,这个其实还是取决于自己,例如想学习写通信程序的,完全可以自己写一个,然后压测,同时对比业界一些成熟的开源的,进而翻代码去学习为什么自己写的不如开源的,又例如想学习写高并发程序,也可以自己写,不断的增加复杂度,做压力测试来不断优化提升自己写的程序的并发能力。