本文章信息
作 者 资 料
作 者 首 页

我 要 收 藏
文 章 下 载
添 加 专 题
 >> IT写作社区闫辉《程序员》杂志

《程序员》:硬件程序员

(这条文章已经被阅读了次) 时间:2002年06月18日 08:35 来源:闫辉 原创-IT

一直以来,在很多人的想法中,程序员和软件应该是画上等号的。但实际上,硬件公司中同样有很多程序员,不过他们从事的开发同硬件的结合相对要紧密的多,或者就是进行硬件的设计,比如IC(集成电路)设计。而同硬件关系密切的软件开发,就包括了BIOS开发、驱动程序开发和嵌入式开发等各项工作。台湾著名技术作家李维说过:“IC设计也是做开发,所不同的是他们用的是专门的开发工具,普通的软件开发人员是考虑如何用最少的内存让程序得到最快的运行速度,而IC设计也是要考虑用有效的线路设计让硬件得到最好的性能。”CSDN上有位Michael网友写道:“我注意到很少有人关注硬件开发,但实际上它的应用非常广泛。在一个芯片中,它的灵魂仍然是开发。”当你了解了这些,你就会发现程序员不仅仅只存在于微软、金山这样的纯软件公司,在硬件公司中,同样占据了重要的部分。


硬件程序员



早上,尽管通向北京上地信息产业基地的路上像往常一样,被各种车辆堵的水泄不通,但毕业于西安电子科技大学的王君毅还是准时出现在了得实大厦六层的威盛公司北京分公司,红色T恤的随意着装说明他并不是来洽谈的。他是威盛北京分公司招收的第一批的员工,现在的职位是软件部副理(Deputy
Manager)。门口“中国芯”的大字在黑色的招牌背景下闪闪发光,象晶莹的硅片。王君毅穿过展示着各种威盛产品的走廊,全身充满了新的动力。到了自己的工作台前,他稍稍皱了皱眉,除了书外,一堆主板之类的硬件让他的桌面变的有些混乱。“程序员都是这样!”心里阿Q精神似的安慰着自己,一边收拾着,开始了他一天的工作。



算起来,从2001年4月份威盛在北京成立分公司之时,当时和王君毅一同经过层层考试招聘进来的第一批员工有十几个人。而到现在为止,北京分公司的员工已经超过一百多人,而和王君毅一样的开发人员就占到了70%以上。



早在1987年,台湾首富王永庆的女儿王雪红创建了“威盛公司”。从那时开始,威盛经历了众多的坎坷,不断的壮大,而后又收购了美国国家半导体公司微处理器事业部(Cyrix
MII部门),一跃成为了除英特尔、AMD之外的亚洲第一大、世界第三大IC设计厂商。2001年威盛的营业总额达到十亿美元。在很多人看来,威盛是一家真正的硬件公司,但当你看到威盛的员工总数仅为2500人,营业项目为无晶圆厂专业IC设计,威盛75%的员工都是坐在计算机前、用软件进行设计和开发的专业工程师的时候,你是否会感到吃惊呢?



相信大多数人对于他们的工作情况了解的还非常少,那就让我们走近这些硬件程序员,了解一下他们的生存状况吧。


IC设计工程师



世界上有两个摩尔定律,除去我们中学学到的之外,另一个摩尔定律是Intel公司创始人之一摩尔提出来的,这就是“每隔18个月,相同面积的IC上,可容纳的晶体管数目及性能将提升一倍。”说这句话很轻松,可要实现起来就不是那样简单了,除了在制造方面需要更精密的技术之外,IC设计人员开发出更合理的集成电路结构也是必不可少的。



最近我们可能会听到很多投资芯片厂的报道,这是因为IC产业的前景吸引了大批的资金和投入,但大部分是投向硬件制造的。以产业结构来看,芯片厂和IC设计公司相依为命,如果大陆开始发展芯片代工产业,势必带动大陆IC设计公司成长,因此台湾地区的很多IC设计公司,如威盛、凌阳、矽统、扬智、联咏、联发科等均加紧在大陆投资的脚步。



然而IC的发展也遇到了危机。我们可以看到,制造技术大幅超前于设计技术,也就是说IC设计技术发展缓慢,IC设计人才缺乏。大陆现有IC设计业从业人员仅约3000人,其中,仅有半数具有学士学位,因此很多公司都把发展方向放在了提高IC设计水平上,其中威盛行动得最快。
为了让更多技术人员和学生了解IC设计,威盛公司举办了“威盛校园IC之旅”活动,在北京、西安、上海、四川、南京、安徽、武汉、浙江等八个城市的15所高校进行讲解,我们也采访到了这次活动的主讲人RianChen,他向我们介绍了IC设计和工艺流程。让我们从下图中简单了解一下IC设计和大型软件开发有何相似和不同。



RianChen告诉我们:“现在软件工程学院林立,软件人才缺口在不断缩小,但IC设计人才仍然呈现缺口增大的趋势,未来几年,IC设计将会成为真正热门的产业。”不知我们能够从这些话中领悟些什么?


硬件程序员王君毅(威盛)



“要做硬件方面的开发,当然要了解很多硬件方面的知识,最重要的是要有兴趣。”王君毅学的是电子工程专业,但兴趣使他在毕业后一直从事同硬件开发相关的工作,曾经从事过通讯产品方面的开发。招聘进入威盛时,书面考试中很多硬件方面的问题,他回答的很轻松。尽管这个考试只要一个半小时,题量也不大,但对于一般的程序员,这一关就很难过。



但那些知识并不能保证新员工进入威盛之后能够尽快的融入到团队中,因此威盛提供了很好的学习和培训环境。首先是要了解很多技术标准,然后向资深的员工求证,相互交流,这是自发的学习;第二种是由资深的员工进行一些有针对性的讲座,每个资深员工都是某个技术方向的专家,研究的体会和经验会讲解给新来的员工,使这些新人能够很快上手,而且很多专家都是从公司总部过来的,每次讲座都会录制下来制作成VCD供以后的员工学习;最重要的是通过具体的项目来提高水平,很多时候公司总部的工程师会和他们一起做项目。王君毅的第一个项目就是PCI总线方面的,做完项目之后收获颇丰。“其实学习阶段是一直在持续的,我带领的团队中,每个人有自己的强项,而且公司也希望每个人都专注在他自己擅长的领域,强调钻研。”



王君毅所在研发部的软件开发方向主要有三类:BIOS、Drivers和Application。这些Application主要是硬件的诊断测试程序(比如芯片的测试程序)和一些控制程序,还有和硬件产品配套的软件产品,比如针对声卡的媒体播放器类软件。这些都是为了更好的发挥硬件的性能,因为作为芯片和主板厂商,他们最清楚硬件的结构和潜力。



他们开发所使用的语言更接近底层,比如做BIOS,主要是汇编语言,因为代码的格式有些特殊,所以会写一些辅助的工具,而驱动程序很多是用Windows的DDK和C语言来进行开发。“一般程序是运行在用户态,而驱动是运行在核心态的,开发很复杂。而且微软操作系统趋势是要内置所有的硬件驱动,驱动就是操作系统的一部分,假如驱动出现问题,整个操作系统的运行就会不稳定,所以微软为不同的硬件区分了不同的复杂构架,要求也很高。威盛总部的技术人员也经常到微软总部去和微软的软件人员进行交流,微软也会给我们提供专门的支持。”
王君毅告诉我们,他们可以看的书很少,更多的是技术标准。相对于编码能力,他们更强调对技术标准的理解。象PCI总线、ATA控制、SCIC控制这些都是要掌握的基本标准。在这些标准中,有些是免费的,比如AT是由T13组织负责,scsi由T10组织负责,有专门的网站可以下载详细的资料,但还有一些标准属于IEEE标准委员会,很多时候要和其他厂商合作,拿来一些硬件的标准学习。标准上面写的就是技术的实现,因此做硬件相关开发不需要特别去进行需求分析,不像通用软件那样必须要和客户讨论,因为技术标准已经制定的很详细了。“我们的软件人员也会经常参与一些标准的制定,因为设计必须要符合软件方面的某些标准和规范,像内存如何分配、CPU的具体某一部分行使什么样的功能这些都是软件人员所熟悉的,很多标准本身就是软件的实现过程。而且硬件的升级设计都要保证兼容旧的软件,比如最早的程序现在仍然可以运行在现在的CPU上,这些都要求软件和硬件人员在一起探讨。”



在威盛工作的这一年多时间里,王君毅体会最深的是公司对专利的重视。“在这里,公司鼓励每个员工都申请专利,而且公司有专门的法务部门来做这方面的工作。申请了专利之后,虽然专利的实现方法已经公开,大家都可以学习了解,使大家的技术水平都能提高,但因为申请了专利,你的做法得到了保护。我们这个开发团队现在就有7项专利提案。而且专利会和年终的考评挂钩,如果一年中没有专利申请,在年终考评的时候是要被扣分的。当然专利并不是挖空心思去想,而是在做项目的过程中,必然会产生一些新的思想和方法,这些思想和方法经过总结和提炼就成为了专利的原始。”


硬件程序员柯克(联想)



就在得实大厦不远处,矗立着联想大厦和连绵不绝的厂房。走进联想大厦的大堂,抬头望去,钢铸的屋顶直插云端,令人不由自主产生渺小的感觉。走上四楼,展现在眼前的仍然是宽阔的大厅,中央有几个水池,假山和荡漾的水面给大厦带来了更多自然的魅力。就在水池旁,伴着拂面的微风,联想的部门经理柯克接受了我们的采访,他曾经参与过联想机顶盒、天乐电脑、掌上电脑和其他的一系列嵌入式产品的研发。



联想是一个硬件集成商,研发人员负责硬件相关的研发。和芯片厂商以及板卡商有很大的区别,他们不只关注某一类产品,而是要负责很多产品中不同硬件的软件支持。柯克认为做硬件驱动开发,提高水平的最有效方法是读源码,尤其是Linux源码。“哪怕写的是Windows的驱动程序,也应该多读Linux的源码,因为Linux源码中能够看到很多硬件方面的知识,包含了很多应用的驱动。以硬盘为例,很多底层的技术细节连厂商都没有提供,但在Linux源码中可以找到,因为这是全世界的程序员把自己的理解表现出来的结晶。要想提高水平,多看源码和研究源码是必不可少的。”



在和硬件结合的非常紧密的项目中,技术准备的程度直接影响到这个项目的能否成立,所以需求人员会多方征求技术人员的意见。做一个嵌入式的设备,需求人员会问这样一套硬件能否实现各种功能,只有在技术上能够实现之后,才会考虑成本、市场等因素并进行需求分析。


小 结



毕竟做硬件和做软件还是两群人,不太可能在一起,因此制定一些技术规范和标准是非常必要的,这样可以在某些阶段把他们分开。比如有时写驱动的时候,硬件还没有做出来,这时只能按照规定的标准做一个仿真的设备和仿真的软件。如何恰当的定义这个界限是需要研究的。同时硬件发展的速度相对较快,软件的发展速度往往是滞后的,比如显卡的计算能力在驱动和上层应用软件中没有充分发挥出来;现在很多软件仍然在使用386CPU的指令集,象MMX、奔腾3和奔腾4新添加的指令集都没有用到,因此如何在软件中充分发挥硬件的性能,也就是将硬件和软件更好的结合在一起,这在规划新产品、提高性能的时候是需要考虑到的。总之硬件和软件是辩证统一的结合体,作为一个程序员,不要将自己的视线只凝滞在一方面。打开关注的目光,眼前会有更宽广的天地。



批 注 该 文]    [采 用 该 文]    [发 表 评 论]    [文章下载]    [关闭窗口

相关批注:
暂时还没有媒体记者对这篇文章做出批注

相关采用:
暂时还没有媒体记者采用这篇文章

相关讨论:
没有评论