《那些年啊,那些事——一个程序员的奋斗史》——15

     技术总监又给段伏枥布置任务了,这次和计算器和录音机不同,并不需要他去写代码,而是要想办法让程序去适应产品。公司做的GPS导航仪的屏幕分辨率是320x240,属于典型的3.2'的LCD,和现在市面上铺天盖地的5'和7'尺寸不同,那时候的4.3'也是很稀少,3.2'是绝对的主流。可对于这样的一个主流,微软却视而不见,最简单的例子,控制面板中很多选项,其对话框的很多都是超出屏幕的大小。虽然可以通过Platform Builder来设置设备的显示模式,但对话框大小不是480x320,就是是240x320,无论采用那种模式,都是无法适应3.2'的LCD。而技术总监交代给段伏枥的任务,就是解决这一难题。
   
    虽然大家都知道,Windows CE是开放源代码的,并且这些控制面板的程序确实也是通过这些源代码编译出来的,那么直接更改然后再重新编译不就好了?段伏枥也是这么想的。一般来说,变更对话框的大小,只要更改相应的.res文件即可,虽然段伏枥是菜鸟,但好歹也弄过几个程序,对于这点也是心知肚明。可当段伏枥使用EVC来重新对控制面板的组件进行布局之后,却傻眼了:这些.res无法再通过链接了!段伏枥不信邪,持续尝试了好几个控制面板的组件,都是如此,这下他可傻眼了。本来以为很简单的事情,还觉得是老柳嫌麻烦不去弄,原来这还是一个大难题啊!
   
    反正段伏枥之前所做的工作也从来没有顺利过,虽然这时候遇到了挫折,但也不至于灰心丧气。于是还是和往常一样,通过搜索引擎来查找资料。不经意间,在CSDN论坛的一篇帖子上找到一个专门研究Windows CE的QQ群,突然有一种找到组织的感觉,赶快申请加入。没想到,刚加进去,才发现群里正在热火朝天地辩论。事情是由一个网名为“水域”的QQ挑起的。
   
    水域:“你们这些固守C++的,全是SB!”
   
    像这样的话语,自然会激起Q友的反击,和水域干上的,是另一个名为“专属天使”的QQ。
   
    专属天使:“你才SB呢!用C#有什么了不起?”
   
    水域:“你们全是一群固步自封的老家伙!不懂得去运用新技术,肯定要被社会淘汰!一群SB!”
   
    专属天使:“C++是万能的!”
   
    水域:“哼!还万能呢!汇编语言才是万能的,什么都要转为汇编语言才能进而成为二进制代码,可你看看,现在逻辑复杂一点的单片机程序,还有几个人是用汇编的?都是用C!”
   
    看起来,水域似乎是力挺C语言,但接下来话锋一转:“对于Windows CE来说,C++就相当于单片机的汇编,C#就相当于单片机的C!两者的差距,不可同言而语!”
   
    这还没完,水域继续说到:“你们之所以坚持C++,一方面是自己不肯接受新事务,另一方面是要误导初学者!因为C++难学,初学者学了C++后,很难赶得上你们现在的水平,你们自然就高枕无忧了。如果是C#,初学者学一段时间,就能上手写程序,你们这些老家伙就要被炒了!”
   
    最后,水域丢下一个问题:“你们说C#不好,那么我问你们,C#有哪里不好了?”
   
    段伏枥用的正是C++,虽然他并不反对C#,甚至可以说,如果有时间有精力他也会去学学C#,但现在这么贬低自己正在使用的语言,他也觉得非常不爽,特别是水域的语气。于是,在网上流传很多C#的缺点,他正好拿来用。还不等专属天使回话,段伏枥啪啪就打字回应:“C#的效率太低了!”
   
    正如所料,水域立马回话:“又是人云亦云!效率怎么低了?你有没有测过?低多少?对使用有没有影响?”
   
    段伏枥顿时语塞,这不就像老柳让自己用查表方式去计算除法一样吗,照搬以前的经验去瞎指挥,而不去考虑实际的运用。段伏枥也只是在网上看了人家的评论,自己也没有亲自去实践,自然也不会知道这效率差多少。其实程序员这一职业,没有那么多似是而非的方面,是就是,不是就不是,容不得半点含糊。比如说,一个检测病人生命特征的程序,应该按照什么规范去检测就要怎么去做,不能说似乎这样可以,那样也行,因为很可能就那么一点偏差,一条生命就此消失。虽然段伏枥并不是做生命相关的设备,但其中的道理却是想通的。这个和做行政的,人事之类的处事方式非常不同,他们为了不引起更多的矛盾,往往说话只说六分,剩余的四分需要自己去揣摩。至于是对还是错,那就无所谓了,只要不对公司的利益有损害即可。
   
    水域的话语,就像一个巴掌,狠狠地扇在了段伏枥的脸上,感觉火辣辣的,无以反驳。很显然,群里面的人对于这个问题,大家都没谱,因为没有人真正去实际测试过。只不过这也暴露了一点,QQ群里面的人基本上都是做应用的,如果有人是做系统级别的话,只需要丢出一句:“你用C#写写驱动看看?”估计水域就无从下手了。因为Windows CE是嵌入式设备所用,和桌面PC的应用环境大为不同。做桌面运用的,其实真的是很少去接触驱动级别的;但对于Windows CE来说,却是截然不同:如果你不懂得C++,那么你如何去看底层的BSP包代码?如果连BSP代码都看不懂,那板子又该如何调试起来?板子都无法启动,还谈何做产品?相对于桌面以应用为重,嵌入式接触更多的是底层驱动级别。当然,这些对于刚出茅庐的段伏枥来说,是完全不懂这一层的关系的。
   
    水域有一种傲气,混混洒洒说了那么多,觉得自己不屑与这些顽固的老家伙为伍,骂了几句之后,毅然退群。对于很多程序员老鸟来说,类似的事情不胜枚举,充其量只是一个小小的插曲,但对于段伏枥今后的态度,却产生了深远的影响:任何事情,即使对方说得言之凿凿,也要自己亲自测试一番,眼见才能为实,绝对不能人云亦云!
   
    不过加入这个QQ群,段伏枥也不算是完全没有收获。当段伏枥提出如何更改程序对话框大小的时候,就有人建议不妨使用exeScope看看。exeScope是桌面Windows常用的一个更改界面的工具,很多朋友都喜欢用它来汉化界面。Windows CE下面的程序,虽然不能直接在Windows XP上运行,但程序的组织还是相同的。段伏枥抱着试试看的心态,用exeScope更改了几个Windows CE程序,放到公司的设备中:一切正常!根据LCD大小更改后的程序,完美地运行在了Windows CE中!段伏枥感觉就跟捡到了宝贝似的,不过有了上一次的教训,这次他只是偷偷地呆在座位上乐呵乐呵。
   
    其实对于程序员来说,绝对不能拘于形式。最重要是明确自己的目标,需要达到什么样的目的,至于使用什么手段,则不是所关心的。如果段伏枥一直不转变自己的观念,总是从代码的角度入手 ,虽然最终也可能解决问题,但所耗费的时间,绝对比直接更改程序文件要多。
   
    段伏枥是菜鸟,这没错,但他身上却有一种百折不挠,寻根问底的特性。虽然解决了程序大小不能适应屏幕的问题,但他还是决心去探究为什么采用EVC更改后的.res会导致Windows CE系统无法编译的真正原因。老天不负有心人,段伏枥发现,如果是用EVC更改了.res文件并且保存的话,EVC会添加不少额外的东西,甚至是原来的描述符也会被更改。而这些添加的或是被更改的字段,正是系统无法正确编译的真正原因!如果要解决这问题,只能采用记事本来进行修改。但没有了IDE,坐标都不好设置,肯定还要花费很多的精力,既然问题已经解决,并且根源也找到了,段伏枥就不再去深究。
   
    只不过段伏枥觉得,自己遇到这样的问题,说不定别人也可能会遇上。既然如此,为何不将它写出来呢?恰好搜索问题的时候,找到了CSDN这个网站,并且上面不是刚好有个博客系统吗?说干就干,段伏枥赶紧注册了一个账号,并且将这过程整理为一篇《WinCE 系统界面修改偏方(一)》的文章,堂而皇之地发表于博客之中。虽然文笔很嫩,言语很不通顺,并且其中的知识点很可能为众多高手所不齿,但毕竟这是自己的第一篇技术文章,所谓的儿不嫌母丑狗不嫌家贫便是如此。只不过对于一个新人来说,发表的一篇没什么技术含量的文章,实在不会引起很大的波澜。发表了近一周之后,点击率也寥寥无几,而这为数不多的点击率,有一半还是出自于自己的手。幸好段伏枥对此也有心理准备,本来就不报很大希望的事情,谈何来的失望?只不过这一口子一开,就再也刹不了车。在往后的日子里,只要段伏枥知道了点新东西,就会往博客上放。每次往上面写文章的时候,段伏枥总会幻想:会不会有一天,自己这些文章能够结集出版呢?只不过这念头只是转瞬即逝,自己又不是韩寒,仅仅是一个小小的菜鸟,有谁去看重自己?虽然觉得出书的概率很渺茫,不免有点失望,但段伏枥还是暗暗下决心,不管结果如何,写技术博客这习惯,一定要坚持下去,就像自己坚持走程序员这条路一样。
   
   
   
    注:
    BSP是板级支持包(Board Support Package)的缩写,是通常用在嵌入行业中的一个术语,用来代表在一个特殊硬件平台上快速构建一个嵌入操作系统所需的原始资料或者二进制软件包。BSP的作用是支持操作系统,使之能够更好的运行于硬件平台。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,包括Windows CE、Linux、Vxworks等。SoC/CPU厂商应向其芯片的用户提供一个基本的BSP包,以支持主板厂商或整机制造厂商在此基础上定制和开发各种商用终端产品。
posted @ 2011-07-23 09:03  我的一天  阅读(160)  评论(0编辑  收藏  举报