我是上个世纪,1998年考入浙江大学的,读的是电子工程,但是在大学期间情不自禁爱地上了计算机,当时在学校学的是汇编语言,C和C++,也钻研过微软的VC++。经历过点亮第一个8051板子的LED灯而兴奋不已,虽然当时的LED灯珠是直接用8051的GPIO口驱动的(没有考虑驱动电流能力)。后来大三的时候,闲不住的自己,直接去外面的软件公司兼职打工,在其中一家通信设备公司做PPP、PPPOE开发,在这家公司,让我见识了什么是超大规模代码开发(比Hello World要雄伟的多),什么是超级优美的软件架构,什么是良好的编程风格,什么是精巧的数据结构设计。大三大四的兼职生活,时间过的很快,后来我就很幸运地保研了,开始从事ARM嵌入式开发研究,当时(2002-2003)也算是中国第一代ARM开发工程师。从小学到大学,我和很多同学有一个特别大的差异,就是喜欢提问题。现在想来这个特别的技能为我未来成为优秀工程师打下了很好的基础。这个技能是我职业生涯第一个重要技能。
1、善于提出问题
我们的教育方式,注定了大部分人都是解决问题的高手,每次考试,我们的目标就是拿100分,从ABCD中选择中选择正确的答案,反而很少有人想,我们为什么要学这些知识,这些知识未来有什么用?或者想想这个数学公式是怎么来?有没有更简洁的表达方式呢?有没有其他没有发现的更好的解决方案呢?或者怎么提高学习效率?怎么让自己既学的好,又学的轻松呢?在我整个学生生涯,我的脑子里整天充满了这些问题,我觉得就是这样的思考习惯,让我成为一个善于提出问题的“好”学生。
2005年研究生毕业后,我加入华为有限公司,也就很自然从事了2/3G基站嵌入式开发工作,在华为,让我学会了作为优秀工程师的第二个技能:撰写&阅读技术资料。
2、撰写&阅读技术资料
在华为,有专门的技术资料库,涉及领域非常广泛,比如SDRAM的读写驱动原理,SPI总线解析,信号的毛刺测试和分析,网络分析仪的使用技巧等等,我是第一次看到这么海量的和实际工作这么接近的技术资料,绝对和大学教材有天壤之别,因此那一年半的华为生涯,我花了大量时间阅读学习这些资料。那你可能要问了,这些资料哪里来的呢?对,都是每个一线工程师在平时工作中总结的,因此这里就提出了一个技能:写技术资料。比如你学习了一个新技术,可以写分享报告;比如你解决了一个重大问题,可以写问题分析报告;比如你要设计一个新的软件框架,可以写设计报告等等。
3、好奇心
当时在华为,工作特别繁忙,有很多杂事,比如有时候让你去修个电路板,有时候让你去测一个总线的时序波形,有时候让你写一个小功能的代码,有时候参与其他团队的一个协同工作等等,在这个过程中,我对其中一些技术充满了好奇心,比如SDRAM,因为之前只理解SRAM的工作原理,感觉特别简单,而SDRAM,完全颠覆了我对RAM读写操作的认知,刷新,预充电,Burst操作等等新概念,让我充满了好奇心,因此我花了整整一个月时间,翻阅了技术资料库里我能找到的SDRAM的资料,并认认真真一字一句的啃下一个SDRAM芯片的英文SPEC,还拿着50万的示波器测量了SDRAM的时序信号波形,这下子总算把SDRAM的前前后后,左左右右都弄明白了。通过这些专注的工作,我算是SDRAM的小专家了,因此我就给我所在的Team同事一起搞了一个SDRAM技术分享。
4、善于分享
说到技术分享,之前我也没有做过,但是由于自己本身在大学期间是属于outgoing的类型,所以我并不怯场,只是不知道该如何整理这个PPT,我请教了我的师傅(在华为,3个月试用期是有师傅带徒弟的),知道了做PPT要“一图二表三文字”,也知道了,做分享需要先了解大家的知识背景(自己以为很简单,但是听众反而觉得很费解的技术点需要好好讲),也知道了,演讲一定要深入浅出,一定要遵循总分结构,或者2W1H等等,一定要站在听众的角度而不是自己熟悉的角度来展开演讲。当然最重要是明白了,技术分享既可以提高自己的技术理解力,也可以提高自己的个人影响力,从这以后,我到每一个新单位,都会主动发起一些技术分享。
5、28原则&效率优先
我们的工作有个特点,就是永远都做不完,因此我们应该把有限的时间投入到最重要的事情中,比如对团队业务不是特别核心的工作,可以投入20%的时间提高效率快速完成,没有必要完美主义,非得做到120分才OK。而对于团队的基础性工作,核心技术,或者是影响未来创新的工作,则需要投入80%的时间,尽量做到系统化,规范化,文档化,SOP化,尽量完美的打磨这种工作。通过这个28原则,我既快速完成了领导交给我的边边角角的工作,又帮团队沉淀了很多核心,基础的工作成果。
在华为,我们也要承担很多琐碎的工作(紧急但不特别重要),比如在写驱动代码的时候,突然接到一个任务,要求测试信号质量,这种事情需要搭建测试环境,使用高档的四踪示波器,然后还要飞线,因此这个时候效率优先就很重要,我都是“火急火燎”的快速安排好环境,快速计划好测试项目,然后干净利索的快速测试,连续高效工作2个小时,快速收掉这样的非核心工作,然后可以专注做更重要的工作。而很多时候,其他人喜欢磨磨蹭蹭的搭环境,慢慢吐吐的测量,测试一段时间,就要去外面走走,这里逛逛,或者回去写点代码,和谁去聊聊天,完全不遵守效率优先原则。
6、不要重复造轮子
很多“优秀”工程师都有“洁癖”,他们总觉得别人的代码不够好,自己的才是最棒的。其实,别人既然造了轮子,也经过一定时间和业务场景的考验,那很有可能自己就算发明了一个更漂亮的轮子,有可能性价比未必就比别人的高。我觉得工程师不是喜欢重复造轮子,而是缺了包容的心态,如果你能学着包容不同观点,学着求同存异的思维方式,则你会慢慢接受用实践检验过的轮子。因此每当你接到一个新任务,你一定要想想,这个工作别人是否做过了,到哪里可以找到,或者咨询谁可以找到这个轮子,而只有确定大概率是新工作的时候,你才开始动手。
7、读书能力
“书中自有黄金屋,书中自有颜如玉”,我觉得古人说的很对,我们的知识要么是直接经验,要么是间接经验(包括别人口口相传和自己亲自阅读),其中阅读是效率最高,知识最系统化的学习方式,一本书30几元,就可以涵盖作者几年甚至十几年的经验总结,这个性价比不是一般的高。而且很多知识,由于工作岗位限制,短期内我们没有办法直接经验获得,而口口相传又特别不系统化,这个时候,读书就非常好,比如你要学习销售,你不可能边写代码,边直接实践销售,那你可以买一本销售专业人士撰写的销售书籍,可能一两天你就可以知道销售的精髓,当然离融会贯通还很远,可是它为你打开了一个新的视角,新的思维方式,何乐为不为呢?
8、沟通&表达能力
中国教育培育出来的学生,很多时候更加善于埋头读书,不善于人际沟通,不善于表达,特别是工程师,自己有想法,有观点,但是碍于面子,或者怯场,不善于沟通表达,也不喜欢和人打交道。我们现在的社会分工越来越细,单兵作战已经无法满足社会需要,团队作战,或者跨团队跨公司作战越来越成为常态,因此沟通协同成为了举足轻重的能力。有人说,我知道这个技能很重要,但是我不擅长啊。其实,大道至简,如果能换位思考,抱着同理心和其他人聊天,你慢慢就能学会沟通和表达,沟通和表达一点都不难,哪怕有事没事和其他同学唠唠嗑,也能提高自己的沟通和表达能力。