一年多的功夫,我成为了某电气产品的技术负责人,对整个产品的所有技术细节都了如指掌,我带领了其他几个工程师实现了该产品的“自主研发”。有趣的一件事是,老板当时并不知道我已经“翅膀硬了”,想抵赖答应过的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在其官网上所提供的示例程序。在这个过程中,就技术困惑坚持探究和养成各种好的工作习惯(思考习惯、笔记习惯、总结习惯、阅读习惯)非常重要。我的职场第十二感悟:职场首先比拼的不是智商,而是坚持与好习惯。