儿时在天山脚下长大。记忆中的冬天总是伴着鹅毛般的大雪,飘落在山的南北,即便是到了盛夏,雪也不曾完全融去。待得晴日,从我家向北望去,总是能看见无际的雪山。前些年,去了一趟玉龙雪山,那里的风景很美,却不能引发我过多的关注。

还在懵懂间,我便上了学。小学和初中没有在我心中留下过多的记忆。在高中,教我数学的是彭老师也是我的班主任,教我语文的是钟老师。他们是一对夫妇,待我极好。我已有二十年没有与他们相相见,仍怀感恩。

我的数学成绩一直不错,从高考到最后一次研究生入学考试期间,所有数学科目的成绩累计在一起也扣不了多少分。年轻人时经常引以为豪,后来与学专业数学的人接触多了,发现自己连基本的加减乘除也没有熟练掌握。细想起来,对数学的热爱,给予我最大的回报,是认识了现在的妻子。能与她在一起,是上天对我最大的恩德。

在 1992 年我开始上大学,在一所军事技术院校渡过,专业是计算机科学,大学毕业接着读了研究生,还是计算机专业。一年的基础课后,我剩余时间在一家军队研究所工作。这家研究所地处无锡,从我工作的地方向东西南三个方向都可以抵达太湖,向北是进城的路。那时工作得很辛苦,我今天习得的这些皮毛多与这段辛苦有关。当时国内没有实行双休日制度,周六是上班的。在这里,周日的上午还需要加班。我们极少进城,仅是往返车程就需要一个多小时。在休息时间异常珍贵的那段年月,浪费一个小时过于奢侈了。我们很快适应了这里,对发生在这里的一切习以为常。

在这里的生活工作如时钟般规律。住所,食堂和办公室间距离均不过百米,只要不去进城一切都很方便。早晨七点准时起床,步行吃早饭,步行去上班。我们所做的项目约有一千多人共同参与。即便是刚刚参加工作的我们,也需要用一个上午和其他部门的人开会讨论着各种问题。十二点下班用餐之后,我们总是抓紧时间午休。一天之中,下午两点,或者更迟一些才是属于自己的工作时间。下午的工作通常很忙碌。我们小组的主要任务是做一个用于 IO 处理的专用服务器,我们将其称为 IO 节点,这些 IO 节点将通过大规模的网络与运算节点互联。整个项目将由几千个运算节点和 IO 节点组成。

我很难忘记这段漫长的岁月。我在这里做的第一个课题是做一个基于 PCI 总线的光纤适配卡,负责 PCI 总线和光纤接口部分的 FPGA 逻辑设计。从现在的技术来看,这是一个没有太大难度的课题。而将时光推移到 1997 年,这个任务并不容易完成。当时有一个资深工程师一直在指导我做这些工作。军队研究所这个传帮带的传统被华为演绎得淋漓尽致。至今在华为的最顶层建筑中有相当多的人来自军队。

在这里加班是一个常态,即使是按照规定,晚上 8:00 到 10:30 也是工作时间。我们总能苦中为乐,一天之中最惬意的时间是下午 6:00 到晚上 8:00,我们不是在操场打球,就是邀几个好友打桥牌。当时的军队研究所多有打桥牌的传统。

年轻的时光总是值得回忆,先后在这里做了许多项目。第一个项目很快结束了,之后陆续做着一些与处理器相关的项目。当时我们并没有自己做处理器,而是选用了 DEC 的 Alpha 21264,主桥是 21272。在当时 Alpha 系列处理器是巨型机中的首选处理器,Alpha 系列处理器的性能和设计复杂程度较为明显的超过当时的同类产品。

我们组除了要设计一块基于 Alpha21264 的 IO 处理器之外,还需要设计网络和盘阵接口部分,这部分设计需要使用一些专用的 ASIC。我们有时也需要设计 PCB 板,这些任务我参与的相对较少。这时起,我开始在工作中而不是从课本中学习计算机体系结构,学习那些与处理器流水线和 Cache Memory 系统相关的知识。

这个项目历时了很长一段时间,我们除了日常的 IC Design 工作,也学习操作系统,偶尔写几个驱动程序,修改操作系统内核代码。除了学习与工作直接相关的 OSF 操作系统之外,我与几个同事共同研究 Linux,我们也是国内较早接触 Linux 的一些人。年轻时有用不完的精力,我们总想着多学习一些知识。

时间过得很快,总有曲终人散。我选择离开军队。这个选择很艰难,实施的过程更加艰难。当时部队研究所的待遇很差,在我之前有无数人提出了这个申请。我至今不知道离开部队是否一定是正确的选择。所有选择都是基于当时的认知,一经决定容不得一丝犹豫。

也许是命中有贵人相助,与他人相比我的专业过程异常顺利。我于 2002 年离开了部队。近些年我的部分同事和同学们也陆续离开了军队,这些人多数散布在政府机关公务员系统。也有部分人选择了创业。我加入了摩托罗拉半导体,就是今天的飞思卡尔。

加入摩托罗拉半导体后,前后参加了两个与 IC Design 相关的项目,一个是将 Coldfire 微架构与 802.11b MAC 进行集成,另一个是与 802.11g MAC 进行集成,这两个项目在香港设计。我有近一年的时间频繁穿梭于香港,深圳和上海之间。

不到半年的时间里,我们取消了 802.11b 的集成工作,之后改做集成 802.11g。我仍记得在当年写工作总结时的情景。在总结中我写道我们 Terminate 了这个项目。香港老板帮我改了改,告诉我说这个项目不是被 Terminate 了,而是 Upgrade 到了 802.11g。半年之后 802.11g 的集成工作已经没有地方再去 Upgrade,只能被 Terminate 了。我头一次体会到即便是尽自己全力也无法改变项目最终命运的辛酸。许多资深的员工告诉我这些很正常,在摩托罗拉,失败的项目从数量上远远超过成功的项目。

在香港的 IC Design 中心很快解散了。我回到摩托罗拉北京选择了一份和 Linux 有关的工作,这已是 2003 年的 9 月。十一长假过后,我在 10 月 8 日刚上班的时候得知正式通知,摩托罗拉已经将半导体部门分离出去。新浪在十月七日就发布了这个消息,我们作为摩托罗拉的员工对自己公司的消息远没有新浪灵通。

分离后的公司有个临时名字叫 SPSSpinco,后来改名叫飞思卡尔。名字的变革意味着许多。我们从此开始有了飞思卡尔的员工,许多从摩托罗拉加入飞思卡尔的员工多少有些怅然若失。分离后飞思卡尔的业绩还不错,那一年摩托罗拉的业绩也很不错,其总收入甚至还超过了半导体部门还在的年头,华尔街也借此证实了半导体部门确实是摩托罗拉的负担。

此刻我逐渐感受到在外企中国做研发的无奈。我们承接的许多项目只是试探性质。这种试探性的研发对于多数中国工程师是一个无奈的选择,我们被迫接收这种无奈。我们明白即便与美国同事没有文化与语言等等的一系列障碍,他们也不会把产品命脉给予这里,况且许多外企中国的队伍也没有做好这些试探性的研发。中华大地,本不缺乏人才,只是没有用好。在中国外企,许多 Talent 被一些垃圾项目荒废了,这是一个很严肃的问题。

许多中国外企的项目经理真正精通的是 ABC,也只是流利,达意。我见过许多在中国外企工作了十年以上的工程师,真正的研发造诣可能只有两三年。在北京,做了几个和 Linux PowerPC 相关的 BSP 后,我准备离开研发团队。我和当时的老板说,我只恨自己的时间太少,恨中国并不强大。离开研发团队后,我加入了 Sales 部门。此后我一直在这个部门工作,直到离开飞思卡尔。

在 Sales 部门的工作与华为交往最多,也因此认识了许多新的朋友。这个公司是我除了工作学习之外的,朋友最多的地方。与他们的合作中,我学会了很多在中国外企研发团队中不可能学会的知识,总结了一些 PowerPC 处理器和 Linux 相关的内容,书写了《Linux PowerPC 详解—核心篇》这本书籍,这本书关注于 PowerPC 微架构和 Linux 操作系统本身。

我坚持写完这本书,不想花费了两年半的时间,倘若一开始就知道写书如此艰辛,我必会放弃。写这本书我最大的成就是完稿时,我体会到了重来都没有感受过的平静。这本书出版后,我发现了很多不足,很多内容并不准确,我有计划更新这部分内容,却事与愿违。

完成第一本著作后,我还准备书写《Linux PowerPC 详解—应用篇》,当时想写处理器总线和网络这两部分。这本书几乎完成了一半。没有完成另一半的书写不是因为我的懒惰,只是我的身体无法支撑,每天下班后继续用四个小时以上的时间坚持写作。另一个重要的原因是我尚未完成这本书的初稿,便已离开了飞思卡尔。

我至今仍记得离开时的情景,正是在那一周我国西南的汶川发生了强烈地震。

加入英特尔的过程非常偶然。出乎所有人的意料之外,我加入了这个公司的技术团队,负责 Linux 架构方面的工作。这与飞思卡尔 Sales 团队多数人的选择不同。我始终对技术工作难以忘怀。在 Sales 团队工作时,技术层面的事情也未曾懈怠。在书写那些书籍的过程中,亲力亲为,从原理图设计,Bootloader 程序到 Linux BSP 的移植重头做了一遍,最终做出了基于一些 PowerPC 的参考板和若干参考设计。

在参考板的设计中,元器件的采购最为繁琐。幸运的是,摩托罗拉半导体进入中国非常早,也是一所大学校。我的许多同事朋友如同蒲公英的种子,已遍布在各大半导体公司中,东借几个样片,西凑几个电阻电容,元器件倒是没有什么投入。真正投入的是时间与心血。

在英特尔的工作,并不比摩托罗拉繁忙。我们组从 Moblin,Meego 到 Tizen 一路做过来,终极目标是将其用于手机。这些努力是否能够获得最终的胜利,尚无定论。Moblin 是英特尔自己做的,基于 Open Source 开发模式。Meego 是英特尔与诺基亚一道做的,后来随着诺基亚与微软的合作而告终结。Tizen 在与三星合作。

这些是我在 Intel 的部分工作,另一部分与处理器体系结构相关。加入 Intel 的第一件事情是梳理了 x86 微架构的历史,先后阅读了近万页的 x86 处理器数据手册,将一些简单的心得体会罗列出来,就是我在开源杂志中的名为《PC 的足迹》的这篇文章。

随后我将尚未完成的《LinuxPowerPC 详解—应用篇》书稿的部分内容取出,我不喜欢半途而废,却不能身在英特尔去书写与飞思卡尔相关的书籍。PCI Express 总线是英特尔的重心所在。我向朋友借了一块 Virtex V5 的开发板,利用 LogiCORE 实现了一个 Ring-Buffer 的 DMA 数据传送机制,最后完成了《PCI Express 体系结构导读》这本书籍的初稿。

将此书交付机械工业出版社已是 2009 年的冬季。还有一篇文章已在我心中酝酿多时,回想建国以来的艰辛,到今日的种种不合理,心中总有一股不平之气。几天时间写完了《又逢己丑》,发表在我的博客中。这并不是一篇技术文章,我觉得在今天的中国,有些问题如果不得已妥善解决,所谓技术报国只是一个美丽的梦想。

在 2010 年,ARM 的 Cortex 系列微架构异军突起,电子信息领域正式进入 Mobile Era。英特尔面临着前所未有的挑战。是 x86 还是 ARM,没有人能够回答这个问题。历时三个月,分析了从 ARM1 开始直到 Cortex A15 微架构之后,书写了《ARM 与 x86》这篇文章,最初发表在我的博客中,后来被弯曲评论转载。

也是这个原因,我与弯曲评论的陈怀临先生的交往逐渐多了起来,我认识他已经很长时间了。我们聊着各种各样的话题,最多的依然是技术。当时我的专注点依然在处理器微架构,他已经开始创业,做互联网中的应用了。

在微架构中有两个较为复杂的问题,一个是指令流水线,另一个是 Cache Memory 系统。指令流水线的设计基本上是 Superscalar 与 OOO 执行的组合,自 Tomasolu 算法提出后,很少有质的变化。我选择研究 Cache Memory 系统。我对 Cache Memory 系统并不陌生,也做过一些与此相关的小设计。待到动笔时却方显艰难。在阅读了近千篇论文之后,我发现之前对 Cache Memory 系统的无知,很谨慎地写出《浅谈 Cache Memory》,最初的版本是 0.01。这篇文章率先发表在弯曲评论。我一直都计划将其更新至 1.0,并正式出版,却一直抽不出整块的时间。在不远的将来,这个心愿终究会完成。

在英特尔的另一段时间,需要与华为相处。我与华为有难解之缘,即便在英特尔的研发部门,仍然也有部分时间与他们打交道。向他们推广 x86 处理器也是作为英特尔员工的责任,不容推却。

在这段时间里,认识了英特尔内部许多极有天分的同事,我们凭借着对处理器,网络,系统总线和对客户的理解,销售与技术团队其利断金。我们一道解决了许多问题,克服了许多困难,在华为的许多项目中战胜了多核 MIPS 的挑战,获得了一些 Design Win。

Sandy Bridge 处理器与 PCI Express 总线也逐渐成为华为网络基础设施中不可或缺的重要组成部分。这些谈不上是成就,只是一些琐事,慢慢记录下来。岁月一天天过去,已经到了看见他人年轻真心羡慕的年纪。心中却尚有未了心愿,遂有此篇。

[转]王齐前辈写的一篇随笔相关推荐

  1. 王齐自述在外企的工作经历和几本书的来历

    作者:王齐 背景:大侠应邀来我司交流,遂作此文介绍自己:阅后深有感触,特向大侠申请以飨诸位. 儿时在天山脚下长大.记忆中的冬天总是伴着鹅毛般的大雪,飘落在山的南北,即便是到了盛夏,雪也不曾完全融去.待 ...

  2. 如何以初学者角度写好一篇国际学术论文?

    来源:AI科技评论 本文约7000字,建议阅读15分钟 本文为你分享写好一篇国际学术论文应该注意哪些方面? 人工智能顶会论文之争越来越激烈了,CVPR.AAAI.ICLR等各大会议虽然录取率逐年降低, ...

  3. 程序员怎样才能写出一篇好的技术文章

    来源:http://droidyue.com/blog/2016/06/19/how-to-write-an-awesome-post/ 首先,这算是一篇回答知乎问题 程序员怎样才能写出一篇好的博客或 ...

  4. 博客小白如何快捷而又优雅的写好一篇博客

    人是注定要受自由之苦的. 有目录,不迷路 前言 Typora Markdown语法详解 标题 摘要 目录 文字 加粗 斜体 引用 删除线 文字标记 居中 颜色 组合 代码 多行代码 单行代码 列表 有 ...

  5. 如何写好一篇医疗文章

    做网编也快有一年半的经验,一直以来都是做医疗类的网站,如今虽然不用再做编辑,但想 想做 SEO 最基本的要求就是写文章,所以在这里跟大家分享一下,这么长时间以来,我修 改医疗类网站的一些经验. 1.首 ...

  6. 如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?

    转自<知乎>如何写好一篇高质量的IEEE/ACM Transaction级别的计算机科学论文?  问题:  作为一个博士生,一直为写论文头疼,读过很多高质量论文,觉得写的真好,但是轮到自己 ...

  7. 我读了这七本书,写了这篇关于如何高效阅读的文章(转)

    关于如何阅读的书籍并不多,比较有名的是<如何阅读一本书>,于是拿过来啃了一遍,书中教会了我一项重要技能 -- 同主题阅读,后面会详细介绍.我利用这项技能,又阅读了另外六本书籍,总结出自己的 ...

  8. 一般将来时语法课教案_速看,如何在考场写出一篇脱颖而出的教案

    面试最重要的考试环节就是试讲,而想要进行一次优秀的表演(试讲),则需要一个过硬的剧本(教案),那我们如何写出一篇完美教案呢? 今天上元教师就教给大家10分钟速写一份教案的方法,基本适配所有课型的备课与 ...

  9. 如何在vb.net中取得两时间的毫秒差_科技品牌软文营销如何写出一篇爆文?

    随着互联网的发展,尤其是移动互联网的发展,让营销方式从传统的线下电视报纸广告逐渐转移到线上的软文营销.软文营销因为其快捷,方便,性价比高的特点受到了很多品牌的追捧.文章是软文营销的前提,如何写好一篇好 ...

最新文章

  1. 面向对象分析和设计的几个关键步骤_(豁然开朗)《面向对象分析与设计》读书笔记 (4)- 分类...
  2. java调用cd传输_Java调用Linux命令(cd的处理)
  3. 安装kube-prometheus项目:k8s部署prometheus、监控k8s核心组件、添加告警(微信、钉钉、企业微信)、进行数据持久化
  4. 在Windows下搭QT编程环境
  5. K8s容器集群管理系统
  6. 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
  7. 《开学第一课》观后感—吕中琪
  8. 【Linux 应用编程】进程管理 - 进程、线程和程序
  9. 【python路上小记】匹配11位电话正则表达式
  10. 如何配置android的adb环境变量,windows系统下配置adb环境变量的方法步骤
  11. Mac词典扩充、本地化
  12. 2019-11-29奈奎斯特和香农定理
  13. 致加西亚的信 谁动了我的奶酪
  14. xm-select使用
  15. nnUNet使用教程
  16. ESP8266连接阿里云(二)烧录MQTT固件
  17. python中双向索引_Python 字典支持双向索引。Python 集合也支持双向索引
  18. 最新!互联网大厂各职级薪资对应关系图(2020年初)
  19. 北大AI公开课第三课--视觉计算变革与挑战by Face++孙剑
  20. oracle数据库dca,达梦数据库DCA考试经历

热门文章

  1. 一些不错的动画效果---郭雪彬
  2. iOS开发——Handoff详解
  3. 二分图最小点覆盖构造方案+König定理证明
  4. win10图片打印提示出现了一个内部错误
  5. 高压缩文件是如何实现的?
  6. MongoDB的地理位置搜索GeoSearch使用方法探索
  7. nwjs macos 签名 公证
  8. 休眠模式开启方法以win10系统为例
  9. 安溪六大名茶之大叶乌龙
  10. 解决微信公众号文章的防盗链