一位 中国70 后老程序员的 26 个职场感悟

点击上方“何俊林”,马上关注

真爱,请置顶或星标

本文转载自 公众号 阿里巴巴中间件

在上周末阿里巴巴中间件举办的APM深度交流技术沙龙上,出现一位白发高龄程序员,一个本子、一支笔、一台笔记本,正记录着台上80后和90后开发者分享的分布式系统下的压测、监控和可用性的话题,free talk期间,还和年轻程序员聊起了算法、架构和开发效率的话题。

 

参会网友:这几年总能看到一些关于大龄程序员职业危机的话题,看到这位老爷子之后,心安定了很多。

编者按:年龄是一个永恒的话题,不论是演员、运动员,或是身边的程序员。岁月带来了经验上的积累和虑事的周全,但也带走了年轻时候的体力和冲劲。

技术变化太快,大龄程序员对新技术的兴趣、学习和接受能力可能不如以前,年龄成为大龄程序员走出舒适区最大的障碍之一。但我们身边总会有一些年龄虽长,依旧保持乐观、皮实、自省的前辈,不断的进行自我迭代,跳出舒适区,我想,这是否就是技术成长道路上最为关键的品质strong>本文整理自70后程序员至简于2012年底写的一篇博客,时间虽然有点久远,但文中内容从现在来看,似乎比6年前更为受用。

正文

时至今日的职场生涯中,每当我与同事分享自己的成长经历,总会有人为之振奋(希望你读这篇文章时也能感受到),或许以我的成长经历作为本文的写作主线是一个不错的选择!通过这篇文章,你可以看到一个1997年毕业的大专生(毕业于南昌水利水电高等专科学校,现更名为南昌工程学院)、一个在高二时英语还只考29分的人,是如何一步一步成为Motorola的软件架构师的。(至简目前就职于阿里巴巴中间件团队)

在继续读下去之前,读者应认识到一点:个人观点的独特性与自身的成长经历有很大的关系。因此,千万不要盲从,而应时刻保持一种批判接受的态度。或者说,你得有自己的观点,你(也只有你自己)得对自己的职业发展负责!另外,文章主线是自传形式,如果你对我的成长经历不感兴趣,可以快速地略读,只关注文中highlight的24点职场感悟。

学生时代

故事的开始得从大学以前开始。从小受“学好数理化,走遍天下都不怕”观念的影响,我认为只要学好数理化就行了,所以偏科很严重,高二时英语还考过29分。那时也不爱读书,高三时,别的同学在复习,我却在看《晶体管技术》这类电子技术书。这种状态,直接的结果就是第一次高考落榜了。
 
落榜的那个暑假,父母为我的出路没少操心。在一天早晨刷牙时,当我妈对我说希望我去复读时,我当时脑海里想“能像表哥那样考上大学那该多好啊!”,在这个念头驱使下,我答应了去复读。从那天开始,我顿悟了,真正知道自己要什么了。在复读的一年里,我学到的一种重要能力是— 自学,这为以后大学乃至职场学习打下了很好的基础。正因如此,我想给出:

我的职场第一感悟:自学能力是竞争力之本。

经过复读,高考总成绩提高了100多分,但也只够专科线。最终,我被南昌水利水高等专科学校录取,专业是“供用电技术”。这个专业相信很多人不知其然,其实就是电力自动化的变种专业,其专业内容主要是电站、发电厂高电压的继电保护技术。

一位 中国70 后老程序员的 26 个职场感悟

 

尽管选择去这家民企后立马到公司去做了实地调查,但由于没有社会经验,加上被问的人没如实反应,所以进入这家民企后所了解的情况让人大跌眼镜。另外也了解到单位会通过一些不入流的做法控制我们的户口,不让我们跳槽(那会儿的户口还是相当重要的,结婚要户口证明,有同事就因为户口被控制而登记不了)。而我们在进入这家单位时签订了六年的劳动合同。在这样的小企业干上六年意味着什么当时与家人打电话告知这一状况时,我都哭出来了(就在现在杨公堤与虎跑路交叉的、现早已不存在的一个电话亭里,记忆犹新呀!)。
 
尽管前途是那样的渺茫,但带有“优秀毕业生光环”的我仍坚信自己能做得比别人更好,因为有我的:

我的职场第二感悟:自信能让你与众不同,尽管有时的自信有点莫名其妙。

在这个企业一开始的工作职责是电站设备的电气设计工程师,需要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还不普及,学习书籍都来自浙江大学的科海书店(后来眼见着它的店面越来越小,这也是进入电子商务时代的一个缩影),那时隔三叉五地到科海去找书,生活最大的花费就在于购书(那时这方面的书不少是质次价高)。当然,学习的过程或多或少还得瞒着老板。那段时间,别人午休我就编程,除了看书和做书后的习题,还一直朝实现自己的计算机监控软件这个目标迈进(参见我的职场第四感悟)。

一位 中国70 后老程序员的 26 个职场感悟

?caspar-rubin

在大立公司所参与的第一个软件项目,是使用Visual C++从事Windows某变电站图像监控桌面软件的开发。尽管我之前自学过C++语言,但那时并未完全掌握面向对象编程,尤其是其中的多态。我在该桌面软件中借鉴微软的示例软件DrawCli,独立地实现了电子地图功能。正是通过掌握这个示例软件的设计与实现,我真正领悟到了面向对象设计的好处。也通过该图像监控桌面软件的开发经历,掌握了Windows VxD驱动开发、Socket通讯、多线程编程、图像处理(锐化、伪彩处理、图像字符识别和图像对比等)、ODBC数据库编程(用的是SQL Server)等。

一位 中国70 后老程序员的 26 个职场感悟

  ?rawpixel

2000年底,大立公司因为业务拓展的需要,需开发嵌入式图像监控系统(系统中的前端产品是后来数字硬盘录象机的前身)。为此,公司社招了一位比我年长十岁的资深硬件开发工程师,他在进公司时已经有基于AMD的Elan SC520 x86嵌入式微控制器的硬件开发经验。他在进公司之初与章总交谈时指出:“做这类嵌入式产品,需要软件功底非常强的人”,章总的回答是:“你放心好了,我一定找一个最好的人与你搭档”(章总后来告诉我的)。是的,所找的那个人就是我!而其实那时我只有用Visual C++从事Windows桌面软件的开发经验,可见公司领导对我能力之信任!

我的职场第十一感悟:机遇很重要,但你得有能力才能抓住它。

我当时所面临的技术挑战,读者可以想象。要知道,在2000年时基于x86微控制器的嵌入式系统的开发人员国内还很少。我的自学能力、电子爱好的兴趣在这种挑战面前又帮了大忙。其实,做嵌入式系统开发最主要的是参考各种资料以便掌握各类技术细节,这得通过大量地阅读芯片手册、用户手册,以及研究AMD在其官网上所提供的示例程序。在这个过程中,就技术困惑坚持探究和养成各种好的工作习惯(思考习惯、笔记习惯、总结习惯、阅读习惯)非常重要。

我的职场第十二感悟:职场首先比拼的不是智商,而是坚持与好习惯。

我独自完成了该嵌入式前端产品上的软件开发工作。其中包含的大致技术内容有:从编程的角度精通x86处理器架构; PCI、IDE硬盘、网卡、串口、闪存等总线或外设的驱动;实时操作系统内核的移植工作;MINUX操作系统的文件系统的移植; XINU操作系统的TCP/IP协议栈的移植工作。移植工作往往会碰到各种技术细节问题,等移植工作完成,对被移植模块的实现和背后的原理也已了如指掌。正应如此,这一时期的工作让我对操作系统的实现原理有了很深的理解。

一位 中国70 后老程序员的 26 个职场感悟

  ?benjamin

一开始当我收到UTStartcom的面试通知时,可能太希望能进入这个公司了,在没有很深入了解这个岗位的前提下,就去面试了,且马上拿到了Offer。但后来才了解到,我拿到的是生产部测试开发岗位,与实际研发部门是有区别的。 当时很纠结 — 这是我想进的公司,但却不是我想要的岗位。如果拒绝生产部的Offer,我很有可能与UTStarcom无缘。考虑再三,我还是选择了拒绝(参见我的职场第十三感悟)。并重新向研发部门投了简历。

 

经过度日如年的一个多月等待(那会儿刚好发生了SARS疫情),在觉得入职UTStarcom研发部门无望的情况下,我入职了另外一家小公司。令人意外的是,在入职那家公司的第二天,我收到了UTStarcom研发部门的面试通知。在HR面试的那一轮中,HR对我说,“你是我所面试的人中最有工作激情的”。那时的技术面试官中,其中一位是我日后入职后的上司 — 夏青,他是我的伯乐。由于我的学历问题,在技术面试通过后,别人只要一位VP面试通过就行,我却需要两位。

我的职场第十四感悟:学历是很重要的敲门砖,即便你的能力很强;学历尽管很重要,但能力才是最终的通行证。

2003年6月份左右,我正式入职UTStarcom研发部,从事小灵通基站控制器(后面简称为基站控制器)的软件开发工作,也从此踏入通讯行业。在入职之初,由于自认为对于操作系统的原理很精通,又完整地做过软件项目,有点飘飘然,觉得自己是个“小牛牛”。然而,入职后一接触工作就发现,内容没有想象的那么简单!

一位 中国70 后老程序员的 26 个职场感悟

  ?sergey

另外,我还在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工作期间,我进一步形成了将自己的技术想法写成文章与大家分享的习惯(那时同事贺旭东称我为“作家”,而我则称他为“点评家),也因为自己在嵌入式软件开发技术上的长期点滴积累,开始有了写书的想法。

一位 中国70 后老程序员的 26 个职场感悟

  ?sven

面试结束的第二天,收到了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)等职,是一个对技术很有敏感度的管理者(我前面提到过的两位有技术敏感度的管理者之一)。我在此之后的成长,完全离不开他的支持与信任,以及他为我所创造的职场发展环境,能与他共事让我倍感荣幸和感激。

一位 中国70 后老程序员的 26 个职场感悟

 ?javier

刚接触架构师方面的工作时,其实还是不大自信的,尽管我那时掌握了软件架构师所需的基础技术技能(比如,我的软件设计能力很强、UML从1998年开始接触加上之后的持续学习所以功底也很好),但对于软件研发管理方面的内容,以及WiMAX无线接入技术知识的系统性认识还是相对单薄的。

那时与美国同事接触下来的感觉是,他们的综合能力都很强,似乎随便一个人都知道如何做架构师,不少人有做GSM、iDen和CDMA产品的经验,而且长期工作于无线接入技术领域。随着更多地参与架构师方面的工作,不仅逐渐建立了自信,对Motorola的软件研发管理也有了更为深入地认识与理解。所看到的不仅仅是产品技术本身的复杂度,更有开发活动运作管理方面的复杂度。最终,我成为了整个ASN-GW产品的架构师。

工作、学习和写作

在2009年,我考入了浙江大学的MBA,同时还开始着手写自己的处女作《专业嵌入式软件开发》。在之后长达近两年的工作、学习和写作的三重压力下,我在时间管理上有很大的进步,抗压能力也得到了很好的锻炼,这时我的职场第十二感悟(指其中的坚持)又让我最终渡过了这段最为艰难的时期。

 
2010年中期,NSN宣布收购我所在的Motorola网络部门,收购活动直到2011年的4月份才结束。同时由于WiMAX市场的不景气,美国不少系统架构师转到了FDD-LTE产品线上,我也因为这一缘故担任了大约半年的系统架构师,主要负责WiMAX技术的移动性与网络安全方面的工作。

 

2012年7月份,因为WiMAX产品线裁员,我转到了NSN的WCDMA产品线。也从此开始离开了Motorola的研发管理环境,而真正步入了NSN的研发管理环境。
 
真感谢你花时间读到这!尽管我们常将“职业规划”挂在嘴边,实际上职场发展真的是一种“布朗运动”。你不知道下一站会是哪、也不知道后面将要从事什么工作、更不清楚后面会碰到怎样的老板。在众多不确定因素面前,或许参照我一路走来所总结出的职场感悟能让你不断地朝好的方向发展。

至简:阿里巴巴高级技术专家,是集团Service Mesh方向的重要参与者和推动者。曾出版《专业嵌入式软件开发——全面走向高质高效编程》一书,坚信和倡导软件设计是软件质量之根本,并对软件开发的复杂性本质有着深刻的认识,对如何高质高效实施软件开发有着自己独到的见解和方法。

一位 中国70 后老程序员的 26 个职场感悟

来源:码农突围

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月13日
下一篇 2019年1月13日

相关推荐