驾驭你的“职场布朗运动”

在个人博客空间内,不时会有在校学生就任业发展和学习方面的内容向我寻求帮助。同窗们因为初入社会没有行业经验,加上在校所学内容又广(但不深),因此在择业方面很容易产生困惑。在择业观上,他们但愿找到一个未来有前途的行业,也但愿在“是选择大公司仍是小公司”这类问题上有人给予参考意见,也有人担忧本身的学历对未来职业发展的影响。
 
另外,在个人工做中,也不时会有同事就本身的职业发展与我探讨。他们几乎都是对技术颇有追求的“有为青年”和已经走上技术管理岗位的负责人。与在校学生的困惑有所不一样的是,这些人已经选择了通信行业,也有了好几年的工做经验,但却苦于在工做中很难发挥本身的特长和精进技术,或在技术管理岗位上担心本身未来的竞争力。此外,也有些同事对未来是走技术线仍是管理线充满着困惑。
 
对于全部的这些迷茫也好,困惑也好,我想借这篇文章谈一谈本身的见解。但怎么谈呢?这类话题能够说是老得不能再老了,但又新得不能再新— 由于每个人都具备本身的独特性,在离开学校以前或参加工做以后又有着本身特有的经历和感悟,于是所面临的问题也会别具一格。
 
时至今日的职场生涯中,每当我与同事分享本身的成长经历,总会有人为之振奋(但愿你读这篇文章时也能感觉到),或许以个人成长经历做为本文的写做主线是一个不错的选择!经过这篇文章,你能够看到一个1997年毕业的大专生(毕业于南昌水利水电高等专科学校,现改名为南昌工程学院)、一个在高二时英语还只考29分的人,是如何一步一步成为Motorola的软件架构师。
 
在继续读下去以前,读者应认识到一点:我的观点的独特性与自身的成长经历有很大的关系。所以,千万不要盲从,而应时刻保持一种批判接受的态度。或者说,你得有本身的观点,你(也只有你本身)得对本身的职业发展负责!另外,文章主线是自传形式,若是你对个人成长经历不感兴趣,能够快速地略读,只关注文中加粗的部分。
 
故事的开始得从大学之前开始。从小受“学好数理化,走遍天下都不怕”观念的影响,我认为只要学好数理化就好了,因此偏科很严重,高二时英语还考过29分。那时也不爱读书,高三时,别的同窗在复习,我却在看《晶体管技术》这类电子技术书。这种状态,直接的结果就是第一次高考落榜了。
 
落榜的那个暑假,父母为个人出路没少操心。在一天早晨刷牙时,当我妈对我说但愿我去复读时,我当时脑海里想“能象表哥那样考上大学那该多好啊!”,在这个念头驱使下,我答应了去复读。从那天开始,我顿悟了,真正知道本身要什么了。在复读的一年里,我学到的一种重要能力是— 自学,这为之后大学乃至职场学习打下了很好的基础。正因如此,我想给出个人职场第一感悟:自学能力是竞争力之本。
 
通过复读,高考总成绩提升了100多分,但也只够专科线。最终,我被南昌水利水高等专科学校录取,专业是“供用电技术”。这个专业相信不少人不知其然,其实就是电力自动化的变种专业,其专业内容主要是电站、发电厂高电压的继电保护技术。
 
大学读书期间,我开始有与人在成绩上一争高下的念头了,加上复读一年所得到的自学能力,以及本身的努力,学习至关轻松,尤为是只要与电子技术沾边的课程,都能轻松地拔得头魁。三年共六个学期的学习,我拿了五个一等奖学金,一个二等奖学金。毕业时,我是系里惟一的一名优秀毕业生。期间经过了大学英语四级考试和计算机二级考试,得到了江西省电子技能比赛一等奖。须要说起的是,在大学期间所学的与计算机相关的课程只有:《电子技术基础》、《计算机组成原理》、《计算机软件基础》、《单片机技术》和《Basic编程语言》。
 
在大学期间,我完成了人生很重要的一件事 — 找好了如今的妻子。因为她是浙江人,因此毕业时工做地点绝不犹豫地选择了杭州。那时不少同窗的工做仍是包分配的,而我来到了杭州的人才市场进行双向选择,那时找一份工做仍是相对轻松的(注:咱们大学录取那年的招生人数是90多万),投出一份简历就找好了工做。第一个工做单位是一家不到100人、地处杭州花港观鱼对面(三台山)的电力设备制造民企。
 
尽管选择去这家民企后立马到公司去作了实地调查,但因为没有社会经验,加上被问的人没如实反应,因此进入这家民企后所了解的状况让人大跌眼镜。另外也了解到单位会经过一些不入流的作法控制咱们的户口,不让咱们跳槽(那会儿的户口仍是至关重要的,结婚要户口证实,有同事就由于户口被控制而登记不了)。而咱们在进入这家单位时签定了六年的劳动合同。在这样的小企业干上六年意味着什么?!当时与家人打电话告知这一情况时,我都哭出来了(就在如今杨公堤与虎跑路交叉的、现早已不存在的一个电话亭里,记忆犹新呀!)。
 
尽管前途是那样的渺茫,但带有“优秀毕业生光环”的我仍坚信本身能作得比别人更好,由于有个人职场第二感悟:自信能让你不同凡响,尽管有时的自信有点莫名其妙。在这个企业一开始的工做职责是电站设备的电气设计工程师,须要用AutoCAD(到单位后学的)设计电气图纸,并指导工人最终完成电气设备装配及调试。期间,企业经营范围扩大,须要从事电子设备的生产,所以我开始有机会接触电子技术方面的设计工做。在兄弟单位一同事的帮助下,在一个星期内我掌握了如何用Tango(后来改名为Protel,如今的名称是Altium Designer)进行原理图和PCB线路板设计。并且,这一个星期的设计结果最终成为了电气产品的一个部件。对于一个毕业不到一年的我来讲,这是不小的进步。那时知道了什么是网络表、过孔、焊盘等,掌握了不少电子原件的工做原理(有的还本身用面包板作实验),明白了作电路板的大体业务流程,还能动手焊接电路板,熟练运用示波器和万用表进行调试。那段时间,我对电子技术的兴趣帮上了大忙,学习起来远比别人快。当我精通电路原理,能自如运用示波器和万用表调试电子产品时,别人却还不明白个人调试动机。个人职场第三感悟:兴趣是学习效率的催化剂,培养本身的职业兴趣
 
第一次真正对编程感兴趣是从知道PLC(Programming Logic Controller)开始的。当时的电站设备采用了三菱的PLC,为了配合这一电气产品的须要,企业社招了一名懂PLC编程的工程师。因为老板担忧咱们相互学技术而“翅膀变硬”,因此明确提出工程师所掌握的技能不能互通有无。当时看到这位兄弟能经过“梯形图”改变PLC的行为,真是以为他太神气了,仰慕不已。后来经过这位兄弟的私下帮助(哥们呀!),我晚上偷偷地在厂房里面学习PLC编程。为了得到良好的学习效果,我设定了对电气产品的PLC程序进行重写的目标,且最终达成了这一目标(固然,因为这个目标不能让老板知道,因此个人PLC程序不能用于商用)。个人职场第四感悟:学习应给本身设置虚拟的项目目标,以作项目的形式提高学习效果,只有这样学到的内容才会深刻而实用,切忌无目标地学到哪算哪
 
一年多的功夫,我成为了某电气产品的技术负责人,对整个产品的全部技术细节都了如指掌,我带领了其余几个工程师实现了该产品的“自主研发”。有趣的一件事是,老板当时并不知道我已经“翅膀硬了”,想抵赖答应过的8000元项目奖金,年轻气盛的我在与之拍完桌子以后对其余工程师下令:“没有个人容许,谁也不能将电气图纸和电路原理图用于生产”(由于年经,因此二!)。对抗的结果以老板兑现承诺而了结。这时我隐约地有了个人职场第五感悟:话语权首先来自能力,而不是职位权力(公务员、国字号、垄断企业的工程师请忽略。你懂的!)。
 
我那时还学会了CRC算法并将之运用于PLC的串口通信中,但对于计算机如何经过串口与PLC通信得到采集数据存在很大的好奇心。因而想到了学习编程语言,并计划作一个能在计算机上实时显示PLC所采集数据的软件。在向PLC编程的兄弟表达了这一想法后,他给个人建议是:学习C语言比较难,Basic语言则更容易。因而,我绝不犹豫地选择了自学C语言,由于我深信个人职场第六感悟:难学的技能一旦掌握更具竞争优点
 
也正是从那时开始,我真正开始了成为软件工程师的自学旅程。那时比较幸运的是,单位专为我配备了工做电脑,因此具有了自学的硬件条件。因为那时Internet还不普及,学习书籍都来自浙江大学的科海书店(后来眼见着它的店面愈来愈小,这也是进入电子商务时代的一个缩影),那时隔三叉五地到科海去找书,生活最大的花费就在于购书(那时这方面的书很多是质次价高)。固然,学习的过程或多或少还得瞒着老板。那段时间,别人午休我就编程,除了看书和作书后的习题,还一直朝实现本身的计算机监控软件这个目标迈进(参见个人职场第四感悟)。终于有一天,我用Turbo C在DOS环境下实现了具备串口通信功能的、基于图形界面的监控软件(若是你用如今的眼光看那个软件,必定会说“很土”)。当我乐此不疲地向他人演示时,你能够想象我那时有多高兴和自豪!这种小小的成功滋长了个人信心,也让我感觉到了个人职场第七感悟:用阶段性成果不断加强本身的自信,且最终支持自信的是能力,而不是自大。尝到了成功甜头的我随后拓展了本身就软件开发方面的学习内容。那时的我已经下定决心要向软件开发方向发展,这种选择是由于个人职场第八感悟:作本身喜欢的事,若是那是本身的兴趣最好
 
1999年的某月,在企业拖欠了一个月工资的情形下,“蓄谋”逃离企业束缚的咱们(共19个工程师)通过几个月的劳动仲裁后,与企业解除了劳动合同。在离开这家民企的次日,1999年11月的某天,我在浙江大立机电技术开发公司(即如今的大立科技。后面都简称为大立公司)找到了第一份专职的软件开发工做。我逃离束缚后能很快地找到新的支点,彻底得感谢个人职场第九感悟:不论身处多么困难的环境,即便以为前途渺茫,也不要放弃学习,不然就是“自断筋脉”
 
在大立公司所参与的第一个软件项目,是使用Visual C++从事Windows某变电站图像监控桌面软件的开发。尽管我以前自学过C++语言,但那时并未彻底掌握面向对象编程,尤为是其中的多态。我在该桌面软件中借鉴微软的示例软件DrawCli,独立地实现了电子地图功能。正是经过掌握这个示例软件的设计与实现,我真正领悟到了面向对象设计的好处。也经过该图像监控桌面软件的开发经历,掌握了Windows VxD驱动开发、socket通信、多线程编程、图像处理(锐化、伪彩处理、图像字符识别和图像对比等)、ODBC数据库编程(用的是SQL Server)等。
 
这里要插一个与我妻子相关的小故事。她是我大学的同班同窗,毕业之后进了诸暨供电局从事农网预算工做。我在第一家民企工做时,时常往返于两地,有时以为非常辛苦。另外,妻子在供电局安逸的工做环境下,时常会开玩笑说老了要是下岗了都不知能干什么。在我进入大立公司不到一年的时间里,我向公司提出了能否让她到公司来从事软件开发工做。当时在我妻子没有任何面试和编程经验(她当时只自学了谭浩强老师的《C程序设计》和一本C++的书,忘记书名了)的状况下,公司让她过来了,我想这是缘于公司对个人器重(这里要谢谢庞总和章总两位老总!)。天然,我成了妻子学习编程的老师。个人岳父岳母当时对于妻子放弃供电局的工做尽管不舍,但仍是尊重了咱们的想法,谢谢他们的开明。支持咱们作出这一决定,除了为了解决两地分居问题,还有咱们的职场第十感悟:长期安逸的工做意味着未来更大的风险
 
在妻子进入大立公司不久,由我担纲了新版图像监控软件的从新开发,这是我第一次担任软件项目负责人。在这个项目上,我能够从技术层面尽情发挥,将我在老版本软件上所看到的设计不足彻底克服。也正是经过这个软件项目,个人面向对象编程能力有了很大的提升,并且完整地作过了一个软件产品。用我如今的眼光来看:那时的开发工做除了引入了版本控制软件外,是彻彻底底的做坊式软件开发;至于管理技能的提升,也能够说是微乎其微。
 
2000年末,大立公司由于业务拓展的须要,需开发嵌入式图像监控系统(系统中的前端产品是后来数字硬盘录象机的前身)。为此,公司社招了一位比我年长十岁的资深硬件开发工程师,他在进公司时已经有基于AMD的Elan SC520 x86嵌入式微控制器的硬件开发经验。他在进公司之初与章总交谈时指出:“作这类嵌入式产品,须要软件功底很是强的人”,章总的回答是:“你放心好了,我必定找一个最好的人与你搭档”(章总后来告诉个人)。是的,所找的那我的就是我!而其实那时我只有用Visual C++从事Windows桌面软件的开发经验,可见公司领导对我能力之信任!个人职场第十一感悟:机遇很重要,但你得有能力才能抓住它
 
我当时所面临的技术挑战,读者能够想象。要知道,在2000年时基于x86微控制器的嵌入式系统的开发人员国内还不多。个人自学能力、电子爱好的兴趣在这种挑战面前又帮了大忙。其实,作嵌入式系统开发最主要的是参考各类资料以便掌握各种技术细节,这得经过大量地阅读芯片手册、用户手册,以及研究AMD在其官网上所提供的示例程序。在这个过程当中,就技术困惑坚持探究和养成各类好的工做习惯(思考习惯、笔记习惯、总结习惯、阅读习惯)很是重要。个人职场第十二感悟:职场首先比拼的不是智商,而是坚持与好习惯
 
我独自完成了该嵌入式前端产品上的软件开发工做。其中包含的大体技术内容有:从编程的角度精通x86处理器架构; PCI、IDE硬盘、网卡、串口、闪存等总线或外设的驱动;实时操做系统内核的移植工做;MINUX操做系统的文件系统的移植; XINU操做系统的TCP/IP协议栈的移植工做。移植工做每每会碰到各类技术细节问题,等移植工做完成,对被移植模块的实现和背后的原理也已了如指掌。正应如此,这一时期的工做让我对操做系统的实现原理有了很深的理解。
 
除了软件方面的进步,我在大立公司时的硬件知识也获得了很强扩充。不只能轻松地阅读数字电路原理图,还自学了VHDL语言,使得拿到逻辑器件CPLD的VHDL程序就能调试软件(经过VHDL程序,能够了解编程所需的译码端口、相关信号的操做时序等)。还学会了如何使用逻辑分析仪辅助软件调试工做。前面提到的这位兄长式硬件工程师调侃我说:“你让我看到了中国软件的但愿!”,而我将这话当成了对本身的鼓励。另外,这期间还考入了浙江大学专升本的通信工程专业,给本身充电(2001年入学,2004年毕业, 多学期 “优秀学生”和“优秀毕业设计”)。
 
因为大立公司是浙江省测试技术研究所的子公司,它或多或少带有事业单位的气息。加上公司的技术舞台有限,以及妻子也在同一家公司工做,我于2003年4月份左右离开了大立公司。在我离开以前,浙江省科委已批复了公司的申请,分配给我一套福利房。在我离开之时,房子仍在建,很多同事对于个人离职非常不解,也劝我拿到房再走。但我有个人职场第十三感悟:当短时间利益与长远利益没法得兼时,选择长远利益
 
在大立公司工做期间,很但愿本身能入职UTStarcom这样的通信企业(那时的UTStarcom是多么地辉煌!)。计划离开大立公司之际,我向UTStarcom提交了求职简历。此次求职开始好像很顺利,但到我真正入职UTStarcom的过程却非常曲折。
 
一开始当我收到UTStartcom的面试通知时,可能太但愿能进入这个公司了,在没有很深刻了解这个岗位的前提下,就去面试了,且立刻拿到了Offer。但后来才了解到,我拿到的是生产部测试开发岗位,与实际研发部门是有区别的。 当时很纠结   — 这是我想进的公司,但却不是我想要的岗位。若是拒绝生产部的Offer,我颇有可能与UTStarcom无缘。考虑再三,我仍是选择了拒绝(参见个人职场第十三感悟)。并从新向研发部门投了简历。
 
通过度日如年的一个多月等待(那会儿恰好发生了SARS疫情),在以为入职UTStarcom研发部门无望的状况下,我入职了另一家小公司。使人意外的是,在入职那家公司的次日,我收到了UTStarcom研发部门的面试通知。在HR面试的那一轮中,HR对我说,“你是我所面试的人中最有工做激情的”。那时的技术面试官中,其中一位是我往后入职后的上司 — 夏青(如今是恒生电子通信事业部的总经理),他是个人伯乐。因为个人学历问题,在技术面试经过后,别人只要一位VP面试经过就行,我却须要两位。个人职场第十四感悟:学历是很重要的敲门砖,即使你的能力很强学历尽管很重要,但能力才是最终的通行证
 
2003年6月份左右,我正式入职UTStarcom研发部,从事小灵通基站控制器(后面简称为基站控制器)的软件开发工做,也今后踏入通信行业。在入职之初,因为自认为对于操做系统的原理很精通,又完整地作过软件项目,有点飘飘然,以为本身是个“小×××”。然而,入职后一接触工做就发现,内容没有想象的那么简单!
 
首先,基站控制器的软件规模比我之前主导开发的项目要大不少,并且须要熟悉通信行业的相关信令。其次,尽管我那时精通x86处理器,基站控制器用的倒是PowerPC 8250,这意味着我得从新掌握它。再次,实时操做系统用的是前美国军方的、开源的RTEMS,那是我第一次接触。最后,UTStarcom的工做语言是英语,写文档和邮件都得用英语。尽管我那时能无障碍地阅读MSDN和各种芯片手册,但要着手写,倒是一大挑战(口语不做要求,由于不需直接接触老外)。
 
一入职所分配的工做是网元网管部分告警抑制软件模块的开发。尽管PowerPC处理器和RTEMS操做系统技术细节的掌握与否并不影响平常开发工做,但我仍将掌握它们做为本身的努力目标,由于个人职场第十五感悟:技术细节掌握得越深,解决问题时就越能游刃有余
 
那时工做时间应付平常开发工做,业余时间则先将精力集中放在熟读PowerPC 8250处理器相关的技术手册上(晚上还得上夜大)。加起来超过2000页的英文资料,我读了很多于3遍。随着时间的推移,当我对PowerPC 8250处理器颇有感受以后,我将工做重点转移到了熟悉RTEMS操做系统的实现细节上。先处理器后操做系统的学习安排,是基于我以往在x86处理器上的工做经验而得出的,也是由于个人职场第十六感悟:技能的发展应采起深度先于广度且交替进行的方式,只有这样,面对大量的新知识才能更淡定
 
RTEMS是一个类UNIX的实时操做系统,也正由于接触这个操做系统我才意识到了本身在软件设计能力上存在很大的提高空间。尽管我对操做系统的实现原理成竹在胸,但却无力于构建一个象RTEMS那样优雅的操做系统,也真切地体会到了RTEMS的设计之美。那时基站控制器上运行的RTEMS操做系统是由美国的新泽西研发中心移植好的,杭州研发中心只需在之上作应用开发。为了就RTEMS操做系统得到更好的学习效果,我又一次运用了个人职场第四感悟,设定了本身完成RTEMS新版本移植这一目标。
 
RTEMS新版本的移植工做虽不在公司的平常工做范围内,但却获得了上司的支持。因为那时RTEMS还在开发新的功能,并非很稳定,在移植过程当中碰到各类奇怪的问题,有些问题还与GNU的binutils工具集有关(binutils中包括nm、ld、objdump等工具。RTEMS是用GCC编译的)。在没法确认是GNU工具集的问题以前,我甚至还向Wind River公司(其知名产品是VxWorks实时操做系统)寻求过帮助,由于那时用的是它的JTAG仿真器。移植工做虽曲折,但最终仍是成功了(我所移植的版本并无运用到产品中,后来的同事又作过了RTEMS4.6.0pre4的移植,且运用于产品中)。这一移植经历,让我对GNU的binutils、RTEMS操做系统的实现有了更为深刻地掌握。
 
在UTStarcom工做的前期,我大多从事的是RTEMS操做系统相关的代码维护工做,工做内容除了OS内核,还包括FTP、Telnet等协议。直到中期转为作E-Box产品的互联网接入模块的开发工做。
 
E-Box是一个企业级电话交换产品,其中还存在一块基于ADSL的互联网接入数据板(与如今的ADSL猫功能同样),用于实现企业网对互联网的数据接入功能,这一数据板使用的是VxWorks5.5.0实时操做系统(PNE 2.0),处理器是Intel的XScale IXP425。那时VxWorks的IP协议栈仍是基于BSD的,但Wind River对之作了必定加强。这段时期个人工做重点全在IP协议栈上(《TCP/IP详解》这套书帮上了大忙)。这一时期的开发经历,让我对PNE的Bridge、FastPath、MUX、PPPoE协议、Radix路由算法和VLAN协议很熟悉,也学会了用SmartBit仪器和Chariot软件作网络性能测试。总之,让我对IP(v4)协议栈方面的知识和软件实现有了长足的进步。
 
E-Box产品数据板上的开发工做进行了半年后,管理层决定放弃,因而我被调到了E-Box产品的软件平台组。那时平台组恰好面临一个比较麻烦的问题 — 在命令行上运行reboot命令后,有时会出现整个系统挂起,而不是指望的重启。平台组的同事花了一个多星期的时间仍没有解决这一问题。
 
进入平台组之际,一样是在没有任何人安排的状况下,我本身主动承担解决reboot命令功能异常的工做。在个人职业生涯中,我一直热衷于去解决别人难以解决的技术问题,由于个人职场第十七感悟:越难的技术问题,其所蕴藏的知识越丰富,也越具学习价值。通过一天半的时间,问题被解决了。其根源在于,reboot以前没有禁用CPM协处理器。我能那么快地解决这一问题,彻底是由于以前熟读过PowerPC 8250处理器的资料。
 
我在UTStarcom工做的后期,致力于ACE在E-Box产品中的一些应用,借助ACE的网络通讯功能帮助实如今Windows平台上经过Visual Studio调试E-Box产品。我在《专业嵌入式软件开发》一书的《可开发性设计,一种高效且经济的开发模式》一章中所阐述的内容其实就是这一工做经历的总结与延伸。
 
另外,我还在E-Box产品上作过难度比较大的一个特性是,利用PowerPC 8250的MMU功能在VxWorks操做系统上实现了对任务栈的保护 — 当一个任务被调度而处于运行状态时,它的栈就处于可读写状态,而其余任务的栈全处于只读状态(VxWorks5.5.0内核中,尚未RealTime Process的概念,这一律念是从6.0开始有的,因此那时我所作的这一特性很具实用性)。经过这一特性,能够有效地防止任务栈被意外篡改(好比野指针操做),即使出现篡改也能尽早发现根源。这个功能的实现过程须要调试VxWorks内核,那时VxWorks的源码虽对公司提供,但Wind River公司对所提供的GNU的binutils作了特殊处理,使得没法为内核代码生成调试所需的信息,结果是没法对内核进行源码级程序调试。因为我以前的RTEMS操做系统移植经历让我对binutils很是熟悉,经过使用必定的方法(说来话长了)绕过了Wind River公司所设置的障碍,成功地实现了对VxWorks的源码级程序调试。
 
在职场中,我不时能成功解决复杂问题和克服技术障碍。个人职场第十八感悟:每次积累的点滴知识,必定会在未来不知不觉地发挥效能
 
2006年4月份左右,我离开了UTStarcom。在UTStarcom所学到的,不仅是前面所介绍的那些技术知识,更让我知道了软件开发的“正规军”是怎样的,与小公司相比,UTStarcom的软件开发流程要正规得多;也经历了英文写做的“挤牙膏”时期过渡到轻松时期(好友周海东在个人英语学习中帮了很多忙);看到了好友于善成如何经过大量阅读成为一个知识渊博的人(他的阅读量如今还是个人学习榜样);还有上司夏青的技术敏感度到如今仍让我为之称道,是我职场至今所见过的二位具备良好技术敏感度的技术管理者之一(另外一位是我在Motorola工做期间认识的,后面会谈到他);团队实力之强使得开发出的E-Box产品在我离开UTStarcom后不时能听到正面的评价。
 
对了,我在大立公司工做时期,就很注重软件设计文档的编写,并且在我离开之时,不只完善了全部文档,还为后继同事作了全面的培训。我始终坚守个人职场第十九感悟:经过文档化的方式传承知识给后继者是你的基本责任,由于你做为后继者时也但愿如此,这也是对本身负责的一种表现(文档的重要性请参见《该死的“代码就是文档”》一文)。在UTStarcom工做期间,我进一步造成了将本身的技术想法写成文章与你们分享的习惯(那时同事贺旭东称我为“做家”,而我则称他为“点评家”),也由于本身在嵌入式软件开发技术上的长期点滴积累,开始有了写书的想法。
 
离开UTStarcom后,我入职了杭州华数集团旗下的雷科通技术(杭州)有限公司。公司当时的意向是安排我负责某宽带接入产品的软件开发工做。在这个公司,尽管只有两个月的时间但也作了些事。除了一个月内完成了宽带接入产品以太网交换芯片在VxWorks操做系统上的驱动开发,并使得产品支持VLAN功能外,还解决了好几个影响整个产品系统稳定性的严重遗留缺陷。这两个月的工做不光让我在技术团队中很快地树立了本身的威望,也使得公司高层管理者真切地看到了个人能力而在我提出离开时极力地挽留。这短暂两个月的工做经历带给我职场第二十感悟:别人对你价值的承认,其实不是简单地根据你的自身能力,而是根据你对他人和团队的贡献
 
入职2006年初在杭州成立的Motorola研发中心的故事得从面试开始。在入职雷科通不久,我收到了猎头的电话,虽然那时并无换工做的想法,但也没有拒绝猎头投简历。随后我收到了Motorola的面试电话。那次面试过程记得很清楚,由于那是我所经历的第一次英语口语技术面试。虽然工做中从没有锻炼过英语口语,好在对于本身作过的技术知识很熟悉,也常常须要查阅英文资料,因此对于所作过的内容还能用英语勉强解释清楚。在面试的最后,我对印裔技术面试官说,“如今个人英语口语很差,但我相信只要有合适的环境,能很快地提升”。印裔技术面试官最后将我领到HR那,说了一声“Yes” — 个人技术面试经过了!
 
面试结束的次日,收到了Motorola HR的电话,告知Offer的相关信息(个人入职级别是E09,E09及以上的人在整个Motorola杭州研发中心占比大约为10%)。那时因为并无换工做的想法,因此拒绝了Offer。想法很简单,由于曾在UTStarcom这样的公司呆过了,因此对外企的工做并非很向往,反而认为在雷科通这种小公司更能施展。在我拒绝了Motorola的Offer后,我将这件事告诉了身边的同事,他们的反馈几乎都是“你应当去Motorola”。
 
幸运的是,另外一名HR再一次致电给我,试图说服我加入Motorola。她当时说“你一旦加入Motorola,之后离开时所看到的就是HP或IBM这样的大公司”,也正是这句话打动了我。以后的经历证实,加入Motorola是很正确的一个选择!
 
2006年7月6日,我正式入职Motorola杭州研发中心。加入的初期是大量的内部培训,培训内容包括技术方面的、流程方面的和英语。Motorola有着成熟的企业文化,经过培训可让工程师很快地融入企业,令人行事象是Motorolan(摩托罗拉人)。在经历了约半年的培训和学习后,2006年末,我开始参与WiMAX产品线上的CLA中间件软件项目。
 
尽管我在CLA项目上没有具体的工做(好比,没有缺陷修复工做会分配给我,也没有新的特性开发工做会挂在个人名下),但对整个团队所从事的技术工做都得负责。个人平常工做主要是设计方案评审、代码审查、帮助或带领团队解决技术难题等。
 
在CLA项目上工做了一个月左右,2007年春节以后,我被第一位派到Motorola的芝加哥研发中心作为期二个月的现场技术支持。以前尽管在公司有过英语培训,但要很好地听与说仍是存在很大的障碍,加上芝加哥那边一块儿工做的是口音较重的印度人和巴基斯坦人,挑战能够想象。在芝加哥研发中心除了作现场技术支持,还得为后续人员的到来作铺垫。好比,租好房子、车子,准备好生活所需的一些家当(当时由于预算有限,咱们住的是公寓,还得本身烧饭)。那段时间虽然由于语言的问题倍感压力,但在全英文的环境中,个人据说能力进步也明显。以后差很少每一年一次的出国,见到之前认识的外国同事,总会有人对我说“Your English is getting better”。对于自认为英语据说能力不行的同仁,请记住个人职场第二十一感悟:英语的据说能力只要有合适的环境,并敢于张嘴练习的状况下能快速地提升,没必要担忧
 
CLA软件在技术上属于运行于Linux操做系统上的一个中间件,它存在多个进程用于帮助通信设备网元(包括WiMAX基站和接入网关)实现网管功能。因为软件架构的特色,使得CLA团队不时会碰到因为其余团队没有用好CLA而产生的技术问题,这类问题开始大多难以定位是属于CLA的、仍是不属于CLA的,于是查错过程很低效。在CLA项目的后期,我但愿经过引入新的软件设计方案帮助团队提升软件的查错能力,并改善软件质量。引入新设计须要增长不少代码,如何让管理层不担忧由此而引入更多的缺陷是我着力这事时首先要考虑和解决的问题。
 
在这种背景下,我在CLA项目引入了单元测试,寄但愿于经过单元测试提升新增代码的质量,以使管理层更具信心而得到他们强有力的支持。最终结果代表,在新增了近一万行代码的状况下,代码在最终发布后总共只发现了一个软件缺陷。这个项目上的工做经历让我第一次真正尝到了单元测试的甜头,在《专业嵌入式软件开发》一书中,就单元测试方面的内容不少源于我在这一项目上的成功经验。我在CLA上新增设计中的AED(Abnormal Exiting Detection)功能,在我离开CLA项目以后,还帮助团队发现了很隐蔽的多线程问题。当经过AED功能发现这一问题的同事高兴地跑过来对我说这个功能管用时,个人高兴劲写满了整张脸。这个项目的经历,也让我更加坚信个人职场第二十二感悟:在软件开发活动中,应设法经过有效的技术途径去解决工程困境
 
2009年初,Motorola杭州研发中心迎来了一个重量级项目 — WiMAX产品线的接入网关ASN-GW,我被安排到该项目,角色是软件开发架构师。初期个人架构师一职只是杭州研发中心单方面的角色安排,而非全球性的(当时该产品由美国、印度和中国三个研发中心共同参与)。
 
在ASN-GW项目上与我一同共事的经理,是曾在Motorola美国研发中心呆了近十年、后来临时转到国内来工做的华人李亮(后面简称亮,习惯了)。他以前在美国工做时作过架构师、软件发布经理(Release Manager)等职,是一个对技术颇有敏感度的管理者(我前面提到过的两位有技术敏感度的管理者之一)。我在此以后的成长,彻底离不开他的支持与信任,以及他为我所创造的职场发展环境,能与他共事让我倍感荣幸和感激。
 
我从亮身上学到的第一个内容是如何与美国管理层打交道。整体说来,Motorola在软件开发管理方面非常四平八稳,其管理存在两大特点,一是争夺项目的全部权(Ownership),另外一个是质疑(Challenge)。前者使得各团队职责清晰,不容易出现突发问题或情况找不到负责人;后者使得团队在工做中有所做为,不至于让人浑水摸鱼。在面对美国团队的质疑时,我之前看到的大多管理者都很紧张,总想一味地达到美国方面的要求,但亮在这方面的表现却明显不一样。他告诉咱们(包括Team Lead),“若是美国提的要求不合理,直接与他们‘掰’”。后来我认识到,美国方面作事其实很讲逻辑,只要咱们对于他们所质疑的问题能给出合理的解释,不少异常事件根本就没什么大不了。个人职场第二十三感悟:不要用沉默的方式一味地迎合别人的要求,力排众议或许才是做为的表现
 
参与ASN-GW的呼叫处理子系统的开发工做后,整个团队经历了大约半年的成长痛苦。痛苦的根源,一是对WiMAX无线接入技术相关的国际标准不熟悉,另外则是对ASN-GW产品的现有实现不了解,并且产品的复杂度的确很大(其中一个技术指标是:必须达到99.999%的容错能力)。在半年的痛苦期中,我很重要的一个工做职责是帮助团队成长,做为亮这类管理层与基层工程师间的桥梁。好比,为团队起草《开发者指南》和《测试指南》这样的文档,且要求和引导工程师经过文档化的形式沉淀经验与教训,以便提升工做效率(虽然文档化方法的实施过程须要我不断地提醒,但这一方法被证实在这种时期颇有效);我也会在例会上绝不留情地指出工程师的哪些行为影响了工做效率。个人职场第二十四感悟:流程、文档的做用,不仅是引导咱们作完事,更能规范咱们的行为和帮助培养工做习惯
 
亮在项目进展的过程当中,一直向美国方面主张杭州团队必须设置架构师一职,也正是因为亮的一再争取,美国方面最终努力地帮助我向这个方向发展,不断为我分派属于架构师工做的任务(如更新产品架构模型、参与需求管理、参与系统设计文档的评审、完成新特性开发工做评估等)。亮那时告诉我,我应是杭州研发中心第一个真正从事架构师工做的人。
 
刚接触架构师方面的工做时,其实仍是不大自信的,尽管我那时掌握了软件架构师所需的基础技术技能(好比,个人软件设计能力很强、UML从1998年开始接触加上以后的持续学习因此功底也很好),但对于软件研发管理方面的内容,以及WiMAX无线接入技术知识的系统性认识仍是相对单薄的。那时与美国同事接触下来的感受是,他们的综合能力都很强,彷佛随便一我的都知道如何作架构师,很多人有作GSM、iDen和CDMA产品的经验,并且长期工做于无线接入技术领域。随着更多地参与架构师方面的工做,不只逐渐创建了自信,对Motorola的软件研发管理也有了更为深刻地认识与理解。所看到的不只仅是产品技术自己的复杂度,更有开发活动运做管理方面的复杂度。最终,我成为了整个ASN-GW产品的架构师。
 
在2009年,我考入了浙江大学的MBA,同时还开始着手写本身的×××做《专业嵌入式软件开发》。在以后长达近两年的工做、学习和写做的三重压力下,我在时间管理上有很大的进步,抗压能力也获得了很好的锻炼,这时个人职场第十二感悟(指其中的坚持)又让我最终渡过了这段最为艰难的时期。(注:《专业嵌入式软件开发》一书其实不仅专一于嵌入式,其中绝大部份内容是C/C++开发人员应当掌握的。当时书名中采用“嵌入式”三个字彻底是由于给书定位的须要,惧怕书名不具体而令人难以选书。固然,也正由于“嵌入式”三个字,令人以为面太窄了。有利有弊吧!该书在各大网上书店都归类于“软件工程及软件方法学”,而非“嵌入式系统”)
 
2010年中期,NSN宣布收购我所在的Motorola网络部门,收购活动直到2011年的4月份才结束。同时因为WiMAX市场的不景气,美国很多系统架构师转到了FDD-LTE产品线上,我也由于这一缘故担任了大约半年的系统架构师,主要负责WiMAX技术的移动性与网络安全方面的工做。
 
2012年7月份,由于WiMAX产品线裁人,我转到了NSN的WCDMA产品线。也今后开始离开了Motorola的研发管理环境,而真正步入了NSN的研发管理环境。
 
真感谢你花时间读到这!尽管咱们常将“职业规划”挂在嘴边,实际上职场发展真的是一种“布朗运动”。你不知道下一站会是哪、也不知道后面将要从事什么工做、更不清楚后面会碰到怎样的老板。在众多不肯定因素面前,或许参照我一路走来所总结出的职场感悟能让你不断地朝好的方向发展。
 
做为结尾,我想就几则网友在个人博客空间的留言进行回答,这样你也能看到职场感悟是如何被运用的。
 
问:李老师,我如今主要还在校学习,主攻方向是J2EE,课余时间在自学Android,有时候花不少时间在Android上面,内心很矛盾,到底哪一个发展得更好,能够指导一下吗?
 
答:在面对当前纷繁复杂、层出不穷的技术时,学习应运用个人职场第十六感悟:技能的发展应采起深度先于广度且交替进行的方式,只有这样,面对大量的新知识才能更谈定。我想借助下图,让读者更好地理解这一感悟。
 
大致上,技能的发展是在横向广度与纵向深度上进行的。上图中,从A点发展到B点存在两条路径,分别用黑线与红线表示,其中红线所表达的路径更可取。实际上,不管有多么不一样的技术,它们发展到最后有不少相通性。采用深度发展优先的方式,能让咱们在短时间内所关注的技术焦点相对小,使得学习过程不容易焦躁。相反,采用广度优先的方式,尽管在短时间内会让咱们以为学识很广,但因为各门技能都不深刻,因此学习过程容易烦躁。在这种状况下,即便想要深刻也很容易由于了解的面太广、知道要学的内容太多而惧怕不前。
 
须要注意,现实中,从A点发展到B点应是一个深度与广度发展交替上升的阶梯。上图是为了说明方便而作了适当的简化。
 
回到开始的问题,就目前的形势来看选择Android或许更好。但不管选什么,必定不要患得患失,而应在所选择的技术上作至关长时间的纵向发展。不然几年下来,发现本身什么都没有学好,很容易打击本身的信心。
 
问:我仍是正在大三的学生,并不是计算机专业,可是对嵌入式比较有兴趣。 如今也不明白本身去公司到底是干什么,就是本身想学哪就学下哪?自学的路,有时候确实很艰辛!有什么比较系统的学习方法吗?感受如今学得很杂,在实验室,画画电路板,学学Linux。 脑壳里的东西一片混乱!求指导!
 
答:你已经走在了个人前面,我是在工做岗位上才学到你如今所学的内容。至于之后要干什么,不是你如今能担忧好的。放好心态,“兵来将挡,水来土淹”;沉下心来,打好基础。
 
为了得到好的学习效果,请不要忘记个人职场第四感悟:学习应给本身设置虚拟的项目目标,以作项目的形式提高学习效果,只有这样学到的内容才会深刻而实用,切忌无目标地学到哪算哪
 
对于嵌入式软件开发的系统性学习方法,得作下广告了,向你推荐个人《专业嵌入式软件开发》一书。花时间把这本书啃透,我相信你能应付不少平常开发工做。(注:有读者反映读过这本书后出去面试很轻松,但尚未人反映读后工做很轻松,期待后面有人有这样的反馈)
 
问:李老师,你好!我是一名大一的学生,喜欢编程。学习C语言已经有一段时间了。可是,我感受我仍是写不出来一段精彩的代码。我在学习的时候老是敲别人的代码。可是我想改变这种处境。我该怎么办呢?很迷茫啊!
 
答:Oops! 我尚未就这一问题提出过职场感悟,如今补上个人职场第二十五感悟:在模仿中不断前行,最终造成属于本身的方法和思想
 
我相信每一个人都会经历你所说的这一时期,这是正常的。也是由于咱们所掌握的技能在深度上还不够。静下心来好好地学,总有一天你会(忽然间)摆脱这一困境的。相信我!
 
问:李老师,如今有各类关于“去大公司,仍是小公司”的观点,你是如何看的呢?
 
答:选择大公司或小公司的讨论历来就不绝于耳。支持大公司的人认为:公司的条件好,所得到的培训机会也多、正规;支持小公司的人则持:公司人少,一人多职,锻炼的机会多。以个人工做经历,能够确定的是,我不会告诉你只去大公司或只去小公司。
 
其实,职场发展是一个螺旋上升的过程,我认为应在大、小公司都干干。若是一我的只在小公司干过,虽然能锻炼成多面手,但他获许不知道“正规军”是怎样,眼界会很窄;若是一我的只在大公司干过,他作事可能相对专业,但也更可能落入工做范围窄的地步,之后出去的话适应性会差些。
 
你能够选择先进小公司,而后加入大公司,这样就有机会经过对比了解大公司是如何解决在小公司曾碰到的问题或困境,这种对比是一种启发思考 途径。一旦在大小公司都干事后,对于之后的公司选择必定会更有想法。对于大公司,我建议你选择到外企工做一段时间,除了有机会到国外了解他们是如何的“水深火热”外,还能看到国人在作事专业性方面的巨大提高空间。