一个工程师的十年经历感悟_第1页
一个工程师的十年经历感悟_第2页
一个工程师的十年经历感悟_第3页
一个工程师的十年经历感悟_第4页
一个工程师的十年经历感悟_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一个工程师的十年经历感悟 星期一, 09/13/2010 - 12:04 南宫鱼 时间过得真快,转眼就做了十来年的技术。从当初的初出茅庐,一步步地走到了今天。在成长的路上,遇到了数个贵人,有过 很多次的当头棒喝,也有过很多的徘徊、很多的无奈和很多的感悟。很早就有写点文字的想法,于自己是个总结,于后来者是 个参考。因为工作上琐事缠身,一直没有机会落笔。这次,很多在头脑中长期潜伏的想法,一股脑地倒了出来。 本想用流水账的方式,把自己的经历写下,但写好后又大段地删掉了。因为我觉得,仅仅罗列自己的经历,能给自己什么帮助, 又能给别人以什么启发呢?!最后斟酌决定,以自己在工程师路上的几点收获作为线索来动笔,这正是我最想与别人分享的。 我的收获可以总结成下面三句话: 步步深入,水到渠成; 举一反三,触类旁通; 整合资源,提升自我。 步步深入,水到渠成 很多的初学电子工程师在面对新技术的时候总希望找到登堂入室的捷径。寻找捷径是人的本能,付出最小成本,换取最大的成 就,这是无可厚非的。但电子技术是门很严谨的科学,靠捷径和技巧最终都会是无果而返,折腾了半天又回到了起点。 说说我自己学 USB 的过程。2001 年的时候,公司的一个产品准备使用 USB 端口通信,我和几位同事自发开始学习 USB 的相 关知识。我好几次计划仔细把 USB 协议从头看到尾,但每次都是看了前三章,就缺乏耐性,抑或因为其他专职工作的时间安 排而中断。自此之后,至少 10 次,我一次又一次启动学 USB 设计的计划,但每次都是从阅读 USB 协议开始,然后阅读到第 三章就停掉了,甚至只看了十几页。虽然花费了时间,但没有丝毫进展,所掌握的知识比当初从科普文章中得到的也没有增加 多少。 直到 2003 年的一天,部门来了一位对 USB 小有所成的新同事。一次偶尔的聊天中,他提到, “USB 协议熟读第九章,再看些 sample 程序,就入门了”。于是,找来 Cypress 的 USB HID 的例子程序,对照 USB 协议的第九章来学习。那一周我不仅对 USB 开发入了门,而且顿悟了不少东西。我一直后悔没有早些仔细研读 Cypress 提供的 USB 例子程序,因为只要硬着头皮去 读,就能发现里面的代码很清楚的说明是由 CH9 协议实现的。我花了断断续续 3 年的时间学 USB,最大的收获不是技术层面 的,而是这曲折的学习之路让我领悟了做技术,要扎实才行。只要步步深入,自然水到渠成。试图走捷径,实际却是在原 地踏步。 我很早就把 TCP/IP 协议的那几本厚厚的书从书店抱回了家。然而晦涩的文字、复杂的协议,虽然也看过一些内容,不过更多 的时候,这几本协议参考都是书柜上华丽的摆设。偶尔有个机会,找了块 51 单片机 +RT8019 的板子,抱着试试看的心态,就 开始了调试。好在单片机的编程本身没有任何障碍,很快就入门了。在仔细学习 TCP/IP 协议栈的时候,就发现分层简直太奇 妙了,可以把很多复杂的问题简单化,然后得以单独解决。TCP/IP 分层带给我的认识,不再像 OSI 参考模型那样抽象,而是 非常的直观。对于具体的应用,TCP/IP 的四层甚至可以直接对应到我们的 4 个函数:链路层的任务是通过寄存器操作网卡芯 片,IP 层的主要工作居然只是打包,TCP 就跟 UART 似的发个命令然后等应答,应用层就是我们的测试程序的主函数,原来 这么复杂的技术居然可以化解成如此简单的几个模块。虽然我只是写了个 TCP/IP 测试程序,后来也没再做过以太网的开发, 但这段学习经历带来的自信让我受益匪浅。 我首次做硬件的经历也很有意思,甚至有些幼稚。刚毕业 2 年一直做软件,觉得做硬件很有成就感。因为我们那个 Team 是一 个硬件配十来个 Firmware 工程师。如果能看着很多软件工程师用自己做的开发板做开发调试,那成就感就甭提了。于是跟我 的主管领导要求做硬件,甚至以消极怠工做威胁。当时部门经理也想调动我的工作积极性,于是同意了,而且一个新的项目很 快就到了我手上。那时候,我的原理图设计还可以,但是 Layout 的经验基本没有。因为第一次设计硬件的缘故,我设计的开 发板稳定性差些,但设计的跳线非常实用,跟 Build 的 Debug 和 Release 配置正好对应。项目组的好几个同事在项目协调会上 说我做的 Jumper 好用。 得到 Team 内很多同事的肯定,对初入门的工程师绝对是莫大的鼓励。后来又陆陆续续地做开发板、产品板。一个硬件的初学 者居然做了几个 10 万台以上的销量的产品。当我看到项目组的十几个同事用我设计的板子调试程序的时候,当我从营销部听 到我负责设计的产品销量到了多少的时候,莫大的成就感和自我肯定对继续深入的学习也是一种动力。 技术是靠积累的,只要你朝正确的方向付出了努力,就会一步步靠近成功。当付出了足够的精力和时间后,取得进步是水到渠 成的事情。努力过程中的偶然有利因素,要利用起来,要学会把机遇转化成能力。因为实用的跳线获得同事的认可,我就趁热 打铁,把硬件的稳定性方面问题解决掉。 对捷径的无比向往和对技术复杂度的恐惧是初学路上最大的敌人。身边做技术的朋友或同事,有很多人是非常聪明的,然而真 正在技术上能独挡一面的确实不多,为何?实际上,很多人是在学习新技术方面过多的希望走捷径,而一直无法有所突破。我 也曾希望自己能找到捷径,不用辛苦的学习就可以掌握别人搞不定的技术。最后发现根本没有什么捷径,或者所谓捷径就是脚 踏实地去做。很多的电子工程师不屑于学单片机,认为单片机是低级技术,以 ARM、FPGA 等为学习的目标。我做过的一个 产品原来用的是 8 位单片机,后来转用 ARM 实现,整个 C 代码是平滑移植过来的。从一个产品工程师的角度去看,ARM 就 是一个跑得比较快、片上资源以及接口比较丰富的单片机,使用 ARM 不是因为它是高档的芯片,而是因为它可以提高产品的 性价比。 举一反三,触类旁通 我一直认为,作为一个工程师,尤其是电子工程师,“照猫画虎”的类推能力是非常重要的。如果我们用举一反三的交叉方式去 思考不同的技术,就会发现很多技术是有内在关联的。技术领域上较广泛的涉猎给我的感触是,很多技术是作为一个体系出现 的,靠架构来组成的。而架构的存在,也使中间件的开发更有效率。下面我想分享一下,学习过程中感触到的架构在不同技术 领域中的表现。 如果你做 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 的演示投影。创业之初虽然辛苦,但可预见的胜利果实的诱惑力太大了,加班、熬夜,都 是家常便饭。因为起步稍微有点基础,所以开始就抓到了客户,直接进入创业过程中“为他人做嫁妆” 的阶段。总结起来,我的 创业经历就是整合自身资源,充分提升自己的一个过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论