今天聊聊程序员的发展问题。
程序员发展路线不外乎两种,技术或管理。技术路线就是走从工程师到架构师最后科学家,管理路线就是从工程师到技术经理、总监、CTO。当然这两种路线可能会有交叉,比如先做到架构师然后切换到技术总监CTO。
这里要先提一点,就是程序员和工程师这两个概念的区别。那么区别是什么呢?一句话:程序员偏重程序代码,工程师偏重解决实际问题。当然在IT领域,工程师一般都是程序员出身。刚毕业没有什么经验的学生,掌握计算机的基础理论知识,会写程序能解算法,这个阶段是程序员。工作一段时间以后,就要掌握工作方法,从实际问题出发,综合运用各种方式方法去解决问题。相比程序员,工程师的思维视野更加开阔发散,思考问题的角度更加多样。例如不单纯从代码角度想方案,也可能需要利用其他团队的力量,或者从问题入手,力图找到表面问题背后的核心问题,或者给问题附加一些假设、条件,将问题转换为以前解决过的熟悉问题。
关于工程师和程序员先说到这儿,回过头来继续说技术和管理两个方向的发展。
先说技术路线。
走技术路线需要对技术保持偏执的热情,如此才能持续学习。其实任何一个领域,只要有恒心持续不断的钻研,一万小时以后一定会有所成。一万小时是什么概念呢?就是每天付出12个小时,连续28个月。仔细想想还ok。但是这里有几个要注意的问题。一是要专注,因为信息领域涉及的子领域太多,网络,操作系统,数据库,编程语言,分布式,高并发大负载,大数据,机器学习,前端等等,每一个子领域又包含大量的topic。如果想全都掌握,势必样样通样样松。所以要抓住一两个感兴趣的领域深入挖掘,只有在一个方向做深做精,才能成为该领域的专家。二是要深入问题抓本质。一门特定的技术,都是在特定的上下文场景下的一种解决方案。信息领域的技术日新月异,新名词层出不穷,但是万变不离其宗,技术背后的东西我称之为智慧,才是工程师们真正需要去理解并融会贯通的东西。单纯的掌握一门技术不掌握智慧的话,没办法举一反三灵活运用,在实际问题面前仍然是不堪一击的。最后一点就是要保持好奇心,在专注的前提下,对所有的技术都要感兴趣,不能抗拒,否则很容易路越走越窄,只会自己的一亩三分地,把自己限制在一个小框框里了。
这里我给出两点建议。一是多学习理论基础知识,因为科学永远是智慧的精髓。比如排序算法中经典的快速排序,本质是分而治之的思想,而分治算法在多个领域都是一个指导思想,比如分布式中的mapreduce,高并发里的性能调优,数据库里的分库分表等等。理论知识欠缺,会阻碍工程师的创新能力。同时学习理论一定要多结合工程实践,理解才能更透彻。二是多琢磨勤思考,可以从一个具体问题开始,不断深入扩展,不停问为什么,进行思维训练。例如经典问题:用户从打开浏览器输入一个url到页面展现这期间都发生了什么,如果每一个环节你都能解释的清楚明白,还能解答别人的质疑,也算是小牛了。
前面简单讲了点技术发展的主观因素,下面说说客观因素。
对于技术人员来讲,有几个可选项。加入一家大中型公司(如BAT),加入一家创业公司,自己干。不同的选择技术发展也不同。在成熟公司工作,接触到的技术方向比较窄,想要往上走需要在专项领域做出业绩,一般来说如果有好的mentor肯教你,自己又够努力,向上走几个级别没有问题,但是越往高越难,因为坑就那么多。在创业公司工作,至少需要独挡一面,接触的技术方向比较多,但是不会有成熟公司那么深。创业公司如果发展好,自然你的技术级别水涨船高,同时技术深度和广度都会提升。自己干就需要有相当的工作经验,能够独挡几面,更多是利用技术提升业务。
因此最重要的就是团队。你能做什么事,和什么人一块工作,这些才是决定你技术发展的外部因素。如果你能和一群优秀的人一块做一件了不起的事儿,那么只要你自己上进,想不升级都难。跳槽基本也就是看这两个点。如果你不好判断做的事靠不靠谱,就多观察团队是否优秀。团队都是比你优秀的人,你每天观察他们思考问题的方式,看的书,聊天关注的点,做事的方式方法,客观上就迫使你不断的进步。如果团队里你是最优秀的,那么就会累一点,因为要自我驱动去实现进步,比外部驱动要难得多了。
好了,今天就先聊到这儿,下篇文章再继续。
网友评论