1. 前言
在IT领域摸爬滚打多年,从一个普通程序员到技术主管,到技术经理,再到技术总监,踩过不少坑、加过不少班,也背过不少锅,在提升自身技术能力与管理能力的同时,也一直在思考,作为IT技术从业者,如何做才能让我们在这个领域里发展得更好,在年龄渐长时能从容应对所谓的“中年危机”,或者说IT技术人员的自我修养,应从哪些方面去努力。本文不是所谓成功人士的经验之谈(作者离自己理解的成功还有十万八千里),而是以一个技术人员的角度做的一些思考与总结,希望能给已在这个行业或有志于从事这个行业的同僚以参考,与之共勉。
2. 持续学习,构建自己的知识体系
学习能力应该是一个人最重要的能力之一,因为我们绝大部分技能都需要通过学习获得,所谓天才,也不过是其学习效率或学习能力比一般人强而已。IT技术更新日新月异,不论是新版本的更新还是新框架的产生,都以极快的速度在推进,令人眼花缭乱,应接不暇。因此,对IT技术人员来说,持续学习、有选择地学习显得尤为重要。
那么我们平时应该怎么来学习,不断提升自己专业技能及综合能力呢,我总结了如下几种方式:
1. 从书本学,从网络学
现在技术书籍市场也是鱼龙混杂,良莠不齐,并且价格都还不便宜。所以建议还是有选择地购买技术书籍,一般原理介绍类书籍,如介绍JVM基本原理,数据库基本原理,设计模式、算法之类的书籍等等,具备一定的保值度,可以购买不断重温学习,而框架介绍类书籍,个人不建议购买,因为框架更新迭代一般都比较快,有时候你买的时候可能就已经过时了,不具备保值度,所以建议从官方文档、博客、公众号等渠道学习,也就是从网络学。从网络学最好的方式是从官方文档学,因为信息在传播过程中是有损耗的,尤其是英文文档,各人语言、理解水平不同,对原文的解析或多或少有些偏差,官方文档最原始,损耗也最低。其次,从一些知名的优质的博客学,从公众号学,并且最好能从头到尾地看,了解学习作者整体的技术体系(那些东拼西凑、没有经过实践直接复制粘贴的最好就不要去看了)。
2. 向先进学
三人行,必有我师焉,向比你厉害的人学。在一个团队中,总有那么几个能力比较强的,而能力强的人总有一些不一样的特质与习惯,多与这些人交流,善于去发现总结别人好的特质与习惯,然后模仿,吸收,最终形成自己的特质与习惯。
3. 从复盘总结学
任何一个组织或团队,总会存在这样那样的一些问题,如果一个团队没有任何问题,那这本身就是一个问题。对问题的处理不应该终止于解决,还应及时对其复盘总结,从中吸取经验与教训,避免同样的问题再次发生。我曾就职的某公司数据部门,在第一次对跨年晚会现场直播做实时数据统计与分析时,因缺乏经验,产品运营部门给的预估并发用户数是50w左右,于是团队按这个预估做了压测,准备了对应的服务器,结果当晚直播并发在线用户数达到250w+,5倍还不止的压力直接把整条实时分析链路冲垮,并且搞笑的是当初准备的服务器磁盘大多是几十G的配置,滚滚而来的日志不到几分钟就把磁盘给打满,几个人光是迁移日志文件保障数据不丢失就已是手忙脚乱了,对实时分析服务只能撒手弃疗,所幸数据都保存了下来,事后补救也创造了我们连续工作36个小时的记录。这是一次典型的失败教训,事后我们复盘总结了几点,一是预估不足;二是没有准备应急方案;三是没有与其他部门协同起来,比如运维。在第二年年底时,我们做了三倍于预估量的准备,并且每个服务做好镜像,随时准备扩容,并且把运维部门协同起来作战,实时监视每项指标,顺利应对了同时在线五六百万用户的现场直播。因此,从对问题与失败的复盘总结中学,是进步提高的一个主要方式,团队如此,个人也如此。
4. 做好知识管理
闻道有先后,术业有专攻,对IT技术领域来说,真正的全栈是极少的,样样精通一般就意味着样样平庸。所以,选好自己的技术方向,并深耕下去,一般IT软件技术领域的方向有服务端、WEB前端、移动端、大数据、人工智能等。在学习与工作的同时,对一些重点、难点及时做好记录。好记性不如烂笔头,很多人在上学阶段都有做笔记的好习惯,但是参加工作后,却把这个好习惯给丢了。对于IT技术人员, 每天大部分时间都对着电脑,所以可以采用一些笔记软件(如印象笔记、OneNote等)来对平时学习的一些知识点,遇到的一些问题及解决方案进行整理记录,便于回顾与查阅,也可以通过博客、公众号的形式,定时对自己的知识体系进行梳理,既巩固了自己的知识,又能给人以学习参考,何乐而不为。如果这两者都还没有的,赶紧去选一个从今天开始用起来吧。
3. 求甚解,知其然,知其所以然
所谓求甚解,就是理解事物背后的本质与根源,从而触类旁通,举一反三。比如你在某某博文中看到添加某个注解就能达到某某功能,你是直接拿来就用还是会分析为什么这么做就能达到效果;再比如某个程序崩溃了,你是直接重启处理还是在有条件的情况下收集必要的数据分析原因,或者在先保障程序服务可用之后再持续跟进定位。许多人都有过找人协助解决问题的经历,我也帮助过很多人定位处理过问题,但其中相当一部分人在你帮他解决问题之后,来一句“牛叉”,然后,就没有然后了。不会问这个问题出现的原因是什么,不会问为什么这么处理就没事了,不会问怎么来避免这个或这类问题,然后下次找你过去协助,你会发现可能又是类似的问题。我也见过很多这样的场景,线上服务故障了,某程序员通过重启服务恢复了,但不久后又故障了,于是再重启,以至于后面每天定时重启一下,来避免故障再出现,却从来没有想过去定位故障发生的原因,可能会觉得没有类似经验,不知道从何处入手,但经验都是积累的,没有人从一开始就能掌握所有技能。这些都是一种浮于表面,不求甚解的不良习惯。
怎么求甚解,最简单的方法就是多问几个为什么,直至了解到某个问题或某个知识点的本源。 我曾与一个现在微软工作的研究生同学一起跟随一家公司做项目需求调研,当时那家公司组织去黄山旅游,我们就在黄山脚下的酒店里整理文档,晚上大家一起吃饭喝酒,回到房间的时候,我已经只能在椅子上趴着了,却发现我那同学不急不慢地从包里拿出电脑,然后开机,然后,打开了Eclipse……后来了解到是他一直在思考解决一个问题,吃饭的时候突发灵感,所以回来就马上试验一下。这个例子我并不是说我那同学酒后写代码的能力有多强,而是说优秀者之所以优秀,在于他们那种遇到问题力求甚解的习惯与品质。但另一方面,求甚解并不意味着你要一头钻到底,花费大量功夫绞尽脑汁追溯到操作系统底层甚至硬件层次,因为毕竟工作不同于科研,是需要有高效产出的。一般而言,你了解到框架设计的基本原理及关键源码,或问题产生的根本原因与最优解决方案,防止同类问题再次发生即可。
4. 责任感,做一个靠谱的人
衡量一个技术人员是否合格的标准我觉得无外乎三个:有态度、有技术、有素养。这里我将态度放在第一位,责任感是态度的一个重要表现。技术人员的责任感表现在哪些方面呢,我认为也是三点,是否具有自我驱动力、是否具有契约精神、是否具有主动担当。自我驱动力就是把分配给你的任务真正当成自己的事情,保质保量按期去完成,主动去跟进你的依赖上游,主动跟团队反馈问题与进度,主动去学习提升技能与工作效率;契约精神就是对自己承诺的事情说到做到,如果有变动也能及时沟通反馈协商;主动担当就是勇于承担自己应当承担或者无人能承担的责任,为团队出谋划策,尽自己能力协助他人。做到这三点,就是一个有责任感的人,就是一个靠谱的人,这样的人就是不论是老板或上级,还是同事都会信赖,尊重的人。
5. 延伸视野,不止于增删改查
经常听到一些同行抱怨,在这里每天就是增删改查,没什么意思,也没什么成长。面对这种抱怨,我想说的是技术人员的视野不应该这么狭隘。任何一个Web项目,都会涵盖从产品定位、需求分析到系统架构设计、数据库设计、前后端开发、测试到部署上线、运行维护,其中涉及的每一个环节都包含一本书都无法说清的内容,都有你可以去学习的东西。有些人可能会说,我就是个开发,你让我去管产品、架构、测试、运维的事?面对这种质问,我可能会说,那你接着去写增删改查吧。
我认为技术人员的价值,不在于你能写出多么优美的代码(当然不是说代码不需要写得好),也不在于你能设计出一个多么大而全高屋建瓴的架构,而在于你实实在在的解决问题的能力,在于你使用技术手段服务于业务的能力。增删改查之外,你可以了解的东西太多,比如你了解你们项目的整体架构吗,了解系统的部署方案吗,了解整体业务流程吗,了解所有的重点难点吗,如果都了解了,那你能找出现有各环节存在的问题吗, 能给出解决这些问题的具体方案吗。所以,不要抱怨只有增删改查了,延伸你的视野,从软件工程的角度而不只是某个功能某个模块的角度来提升自己的认知与能力吧。因为只有延伸你的视野,拓宽你的知识面,才能提升你实实在在的解决问题的能力。如果你一直停留在这事不归我管的认知,那你的水平能力与发展空间也就基本止步于此了。
6. 保持高度专注,提高工作效率
有人可能会说,你说的这么轻巧,我每天写代码都写不完,哪有那么多时间来学习、求甚解、延伸视野。对于这类同学,可能需要反问下自己为什么会一直这么忙,是技术水平与岗位不匹配还是工作效率太低?经历过面试筛选的一般来说技术水平与岗位应该还是匹配的,那怎么来提高工作效率,我认为一个主要方法是提高专注度。读书的时候,你发现那些成绩好的,往往下课或放学都不会一直捧着书看,而那些一天到晚都捧着书看的,往往成绩都一般般,为什么?因为成绩好的在学习的时候他能高度专注,心无旁骛,所以效率很高,而那些一天到晚捧着书看的不可能无时无刻都能集中注意力,因为人的精力是有限的,有可能一会听听音乐,一会放空下大脑,久而久之养成这种拖泥带水的习惯,想不低效都难。工作也一样。
说一个我自己的例子,我属于那种工作时候能高度专注的人,忙事情的时候可能一天下来水都忘了喝一口。临毕业时曾在一家德企实习,一起进来的有一位同济的同学与一位复旦的同学(这里没有任何学校偏见,纯属个例讨论),每周主管会给我们三人分配同等工作量的任务,我一般两到三天并能完成且不需要加班,而那两位同学却几乎每天加班却还常常完不成,最后通过我协助才按期完成。有几天我特意注意了一下他俩的工作状态,发现一会看看新闻刷刷微博,一会去冲杯饮料,戴着耳机听着音乐,不急不躁,悠然自在得很。这种工作状态,除非能力非常强经验非常丰富,能轻车熟路三下五除二把事情处理完,不然,想不低效都难。
因此保持高度的专注,是提高工作效率的有效方式。工作效率提高了,你才能有一些时间去学习去求甚解去延伸视野,从而提升能力促进工作效率的进一步提高,这是一个良性的循环;反之,工作效率提不高,你就没有足够的时间去学习提升,当任务过来的时候,只会越来越忙,这是一个恶性的循环。
7. 提高软实力,把握机会
对于很多IT技术人员来说,技术管理是其职业发展的一个方向,尤其在国内环境中,很难有在40岁以上还能安心写代码的(除非你已经不需要靠工资生活了,写代码纯粹成了一种兴趣)。从一个普通程序员成长为一个技术管理者,除了技术能力,还要有一定的软实力,如沟通表达能力、组织协调能力、业务架构能力等。程序员普遍性格内敛,沟通表达的欲望与技巧相对欠缺,因此在平时的工作中,应尽可能有意识地在这些方面去提高自己,与人沟通表达好一点,主动担当多一点,对业务了解深一点。机会永远青睐有准备的人,只有平时的不断积累,当机会降临时,你才有足够的能力与自信去迎接。
如何去寻找与把握技术管理方向发展的机会,一般而言,有如下几种途径:1. 去有潜力的创业公司;2. 去知名大企业镀金,然后跳槽到中小企业;3. 现有上级离职;4. 公司新开业务线;5. 自己创业。任何一种途径,都只是一种机会而已,能否把握一方面看机遇,另一方面看自己的积累与准备。
8 . 总结
失败者失败的原因各有不同,成功者的特质与习惯却大同小异。IT技术人员的自我修养,可以从持续学习,求甚解,责任感,延伸视野,高度专注,软实力等方面去提升。不积跬步无以至千里,只有沉下心来,一步一个脚印踏踏实实地提高、进步,才能在一个领域里扎下根基,脱颖而出,才能从容应对所谓“中年危机”。
以上,共勉。
出处:http://www.cnblogs.com/spec-dog/