工程师成长路上的感悟
举一反三,触类旁通
我一直认为,作为一个工程师,尤其是电子工程师,"照猫画虎"的类推能力是非常重要的。如果我们用举一反三的交叉方式去思考不同的技术,就会发现很多技术是有内在关联的。技术领域上较广泛的涉猎给我的感触是,很多技术是作为一个体系出现的,靠架构来组成的。而架构的存在,也使中间件的开发更有效率。下面我想分享一下,学习过程中感触到的架构在不同技术领域中的表现。
如果你做Windows WDM Driver,会发现WDM的架构是非常棒的,只要精通某一点并开发设计成一个小小的sys文件,就可以把它挂到操作系统中去。Windows的OS会在适当的时候调用你的sys文件,跟写应用程序的消息机制似的。我们再深入到WDM的这个sys驱动的内部看,有两个非常显著的特点:第一,把一系列的函数指针指向自己实现的函数,目的是把自身挂到驱动栈里去;第二,接受驱动栈上层驱动的请求,先处理,然后传递给驱动栈的下层驱动。正是架构的精心设计,让模块开发的劳动强度大大降低,于是连对PC硬件不甚熟悉的我,都有过几次做Driver的经历。
做嵌入式系统WinCE的工程师会注意到,WinCE的驱动架构,几乎完全是Windows WDM的简化版。WDM驱动的那两个特点在这里表现得淋漓尽致。当然,因为是嵌入式系统,肯定要比Windows系统简化很多,而且嵌入式的CPU提供的资源跟X86也是无法相比的。因为工作的缘故,我对WinCE没有更深入的学习。
我曾有机会做Windows Media的编程开发,这是Windws XP平台上一个视频特别处理,当然用到了DirectShow技术。我当初就感觉DS的架构怎么这么面熟,就是一时认不出来。原来DS使用了COM技术,变得神秘了。但透过COM这个接口技术看架构,原来又是跟WDM那么的相似,只是表现形式由Device变成了Filter而已。一个内核层的架构居然在应用层也能找到它的影子。
做Windows通信程序的时候,希望收到数据时才响应,例如向主窗口发个消息。这是APP级的,怎么做呢?对了,就用FILE_FLAG_OVERLAPPED这个属性,我们只要以这个属性打开设备,如串口或者USB等,以后读取设备数据的时候,这个函数会立即Return,我们随后就可以等待事件(Read完成了或者Timeout了或者是某故障发生了)。配合多线程编程,很容易做成消息驱动型的,而不必用死循环浪费额外的CPU时间片。这里就借助了操作系统给我们提供的消息机制。
在开发嵌入式设备的时候,我们会遇到类似的问题,想节约额外的CPU时间片以达到节电的目的,甚至更迫切,这就可以用到消息机制。用户程序一直在等待事件,只有在有消息来到的时候,处理程序才会被启动。而底层程序,则被设计用来维护消息机制,当空闲(如按键、中断等都没有到来)时候,系统可以进入空闲状态,甚至睡眠状态。多数情况下,嵌入式系统的CPU占用率是非常低的,所以消息机制的使用可以大副降低功耗。
其实,嵌入式设备即使不用Embedded OS也可以利用OS的某些特性来设计,这使得代码的可维护性大大增强。所以做过Windows SDK开发的人,转做消息驱动的嵌入式系统,很多概念是非常容易接受的。其实,很多嵌入式系统的设计者,也确实参考了Windows的消息机制的实现方式。所以,我面试嵌入式工程师的时候,一般都会顺便问一下有没有Windows PC编程的经验。
整合资源,提升自我
很多人觉得整合资源,是管理上的术语。实际上,工程师也需要把已经掌握的资源进行整合,以得到最大程度的自我提升。就像我们总质疑为何某同事的技术能力不如我,却做上了部门经理的位子。如果我们仔细观察,就会发现是自身的某些因素导致了我们的很多能力无法得到最大机会的表现,或者,要充分整合我们已经掌握的资源,才能使得我们的能力最大程度的展示。这是更高层次的自我提升。
当工作数年之后,我发现自己认识了很多朋友,有做技术的,也有做市场的;发现自己掌握了很多零零散散的技术,能做TCPIP通信了,能独立Layout出一块完整的PCB了;发现自己具有一定的组织协调能力,能独立组织一个团队的工作,能协调团队和外界的沟通了。如果你有跟我类似的感觉,说明你也注意到自己的潜力了。当这些潜力没有转化成能力之前,这只是潜在资源而已。所以,我们要学会整合这些资源。
把自己掌握的两项独立的技术应用于某个产品,并协调其搭配工作,这是技术上的整合。自己擅长做软件,和做硬件的同事合作,并主导合作中的很多烦琐事物,这是人力上的整合。自己有技术,和有市场能力的朋友,合伙创业,那更是整合。通过整合,我们表现出了单打独斗无法表现的能力,这就是整合的力量,撬动地球的杠杆的力量。
我在工作7年之后辞职准备创业。同很多工程师都有的艰苦创业经历一样,单单一个角色转化就非常令人痛苦。以前只需专注技术就足够了,现在却需要面对成本、工期、工厂等N多的因素,整天在工程师、业务员、售后服务之间角色转换。另外,创业之初,各类文档的撰写就是个不小的门槛,包括合作意向书、NDA协议、产品规格书、报价书,都需要较好的文字表达能力。拜访重点客户之前,还要制作PPT的演示投影。创业之初虽然辛苦,但可预见的胜利果实的诱惑力太大了,加班、熬夜,都是家常便饭。因为起步稍微有点基础,所以开始就抓到了客户,直接进入创业过程中"为他人做嫁妆"的阶段。总结起来,我的创业经历就是整合自身资源,充分提升自己的一个过程。
很多工程师都有创业的冲动。我的建议是:第一,创业前做尽可能多的准备工作;第二,尽量选择自己最熟悉的领域。当然,工程师还有一个方面相对欠缺,就是文字表述能力。各种文档的撰写,都需要有好的文字功底。在以前那家公司工作的时候,因为管理一个小Team,每周都要在视频会议上给老板做汇报,还要给几个下属做计划。赶鸭子上架,在现实的压力下,我开始重视书面表达能力。我觉得,书面文字的运用能力,对一个工程师而言,是一道门槛,应该努力跨越过去。
愿每个工程师,都有美好的人生,都能实现自己的理想,实现自己的价值。
- 电子行业人才面临转型机遇(09-03)
- 过来人支招,要在LED照明行业混得好你得做到这几点(10-17)
- 别冲动:当电子工程师遭遇解职(04-04)
- 微话题 | “10000小时定律”对电子工程师奏效吗?(06-13)
- 中国超算拿下“戈登贝尔奖”,不仅仅只是零的突破(10-22)