《那些年啊,那些事——一个程序员的奋斗史》——40
虽然黄华中和武总并没有太多过问应用程序的编写状况,但已经几天没有敲打代码的段伏枥手已经开始痒痒的了。忙里偷闲固然好,但也不能太过分,毕竟需要做的东西,再怎么拖,也是必须要完成的。放下看了大约1/3的《C++ primer》,段伏枥开始了音乐播放器的旅程。
如果要做一款杰出的音乐播放器,特别是想在音质方面鹤立鸡群,那么熟悉编码解码是非常重要的。可这对于数学不怎么样的段伏枥来说,这的确是一个难以逾越的鸿沟。所幸公司的这音乐播放器,只要能够正常播放音乐文件,简单的快进快退停止之类能实现就可以了,至于音质神马的,都是浮云。因此对于段伏枥来说,首先要知道的是,在Windows CE下如何去播放。
现在的程序员是幸福的,至少比网络还不发达的时候的程序员要幸福多了,有什么问题,可以直接问度娘和谷哥。只不过,搜索出来的结果,却是非常沮丧的。基本上所有的帖子,关于视频播放的,都是采用Windows Media Player这个ActiveX控件。而这个控件所使用的基础嘛,却偏偏是MFC。自从认识到Win32 API好处的段伏枥,断不可能回头再去整这个折磨人要死的MFC。其实退一万步来说,即使段伏枥想吃回头草,情不甘心不愿地回头打理MFC,注定也是一个非常大的杯具——因为Windows CE没有Windows
Media Player这个控件!那有没有不使用这可望而不可及控件的方法呢?答案是:不知道。即使段伏枥跑去书店,翻看相应的多媒体书籍,所用的,也都是Windows Media Player!
一筹莫展!难道这个音乐播放器的命运,只能归于流产?这实在太打击人了吧?搜索了大半天都毫无头绪,段伏枥觉得有点灰心了,暂时也没有太多的心情再去一页一页网页查看,索性便在QQ上和徐雅思聊起天来。自从那次给徐雅思修完电脑之后,段伏枥很顺利地就拿到了她的QQ号码,平时有事没事也会在QQ上聊上几句。不能不说,QQ这的确是一个非常好的玩意,在一定程度上增进了之间的感情。特别是有一些人,如果使用电话,那么会紧张得不知道该说什么;但如果是在QQ,因为还有思索的缓冲空间,反而聊得不亦乐乎。段伏枥和徐雅思目前就处于这样的状况,如果段伏枥打电话,肯定匆匆忙忙不到十句就会挂断;但在QQ上,却能滔滔不绝。从另一个角度来说,QQ其实也称得上划时代的红娘,估计通过QQ,先慢慢熟悉,然后进一步发展为情侣,最后走到一块的为数不少。没有QQ,或许这世界上就多了很多单身剩男剩女,特别是属于程序员这一族群来说。当然罗,如果没有QQ,或许也没那么多小三……
姜还是老的辣,别人的一句话,很可能便是解脱自己苦苦思索无果的指明灯。虽然老柳属于那种绝对不会和别人分享自己成果的自私分子——这点淋漓尽致地表现在他给公司的电脑设置密码,并且不在座位上就一定会将电脑锁住——但对于不是他所拥有的东西,或是他不屑于乃至掌握不了的知识要点,他还是非常乐意分享的。当然咯,这所谓的“分享”也不要抱有太高的指望,他最多会说:“哎呀!这个简单,你可以看看Windows CE下面的源代码吗,那不是有例程吗?”如果在继续深问下去,比如在哪个文件夹,或是什么工程,那么他直接哑火了。往往这时候,他会很有气势地非常严肃地说:“你这样懒惰不行啊!你需要自己去找,这样子记忆才够深刻。”
每次遇到老柳的挖苦或是欲言又止,段伏枥总在心理暗暗骂道:“就那么点技术,有必要保守得那么严密吗?”或是:“这东西如果你不懂,直接承认又不会丢你面子,哪有人什么都懂的?可你有必要这么怒气冲冲地教训人嘛?”可这一次稍微有点不同,虽然只是一句话,但却给了段伏枥无限的想象:Windows CE是开源的,而它自带了媒体播放器。它既然没有Windows Media Player控件,那么这自带的播放器是如何实现的?这个,如果查看代码的话,应该能知道一些端倪吧?
想到这一环节,段伏枥颓废的心情一扫而空,和徐雅思说了句要忙去,就开始在烟波浩渺的Windows CE代码中搜寻起来。说天无绝人之路也可,或是皇天不负有心人也行,段伏枥终于找到了播放媒体文件的方法。准确地说,应该是找到了能够播放媒体文件的工程。虽然这工程最后生成的程序并不是自带的媒体播放器,而是一个最简单的测试播放的小程序,但对于仅仅只是要了解媒体播放如何运作的段伏枥来说,这已经足够了。甚至可以说,这精巧的小程序,比那复杂的播放器要好很多,它可以没那么多逻辑层,可以让段伏枥能够将所有的精力放在如何播放这个要点。也正是如此,没有花费多少时间,段伏枥已经明白如果要播放媒体文件,大致需要调用哪些函数,以及这些函数的次序。
不过段伏枥并不满足于此,因为很快他就发现了一个问题。如果将这些操作多媒体的函数放到界面的逻辑层里,那会显得代码非常杂乱,特别是可读性非常糟糕,远远不如使用控件的简便。但这似乎也有解决之道:自己将这些操作封装为一个类,只是暴露出类似于Play,Pause等接口,界面逻辑层只需要简单调用即可。这个和之前做UI界面时只是根据每个界面划分,更显得有逻辑和地道一些。在这样的背景之下,段伏枥的第一个真正意义上的功能类——CMedia—— 诞生了。
其实对于很多程序员来说,如果公司的管理比较疏松,允许员工复制代码的话,他们都会携带自己所写的代码至下一家公司。只不过,当去到下一家公司的时候,绝对不会直接将之前的程序原封不动使用,因为这毕竟还多少牵扯到一些版权问题。然而更重要的是,原封不动的话,不一定适合新公司对于程序在逻辑层的要求。而这时候,很多程序员就仅仅是使用之前程序的部分代码,比如播放器的话, 只是使用播放核心的代码;至于逻辑层,则是根据新要求重新构造。这个时候,能否将核心代码提炼出来,便决定了后续的使用是否能够快速简便。也正是如此,便有了一个众所周知的业界潜规则:老程序员的跳槽,肯定是带着几个类到处跑。换个角度来说,将代码根据用途不同进行分层,不仅对于现在的公司有利,对于后续的个人也不无益处。
以前在浩程微的时候,吃饭从来不会和老柳和黄华中一起,但搬过来之后,只有这几个人,自然是大家一起了。当然,这还是有个人例外,张文香是自己带饭,中午自己呆在办公室。吃饭是在旁边,一家名为蓝白的快餐厅。点菜方式和学校食堂差不多,菜分门别类,自己随意挑选;选择完毕之后,坐在座位上,会有专门的人来计算价格。如果有时候吃的非常快,当计单员还没过来的时候,吃完的那个菜有时候还不用记账。至于最后的费用,不是每个人分摊,大部分时间是老柳和黄华中买单。但次数多了,总是过意不去,所以有时候段伏枥和沈俊还会抢着买单。
这天,段伏枥因为需要到华强北买个电池,所以没有和大家一起吃饭;然后听别人说,中电上面有个快餐,据说味道还不错,段伏枥便去换个口味。说实话,味道其实说不上非常美味,但至少还过得去,不过价格就比较贵,吃一次可以,吃多了就觉得有点舍不得了。吃完饭后,段伏枥坐上电梯,同行的还有一对小情侣。
谁说中国人不开放?已经非常和国际接轨了!你们这对小鸳鸯,在俺这个单身汉之前牵牵手也就罢了,亲亲嘴俺也忍了,可你们能不能不这么乱摸?乱摸也不要这么明目张胆吧?手都伸进去了!麻烦你们两个亲热的时候,能不能回家再继续啊?这现场的表演,你让俺这个只能靠自己双手的单身汉来说,情何以堪啊?
这时候,一个空灵的声音传来:“够~淫~荡~”
这声音,立马激起了这对小鸳鸯的愤怒:“你说什么?有种你再说一遍!”
很显然,这鸳鸯的声音是冲着段伏枥来的。可段伏枥愣了,因为他什么话都没有说啊!
女鸳鸯的泼妇气质出来了:“不是你说的,难道这里还有别人嘛?什么够淫荡?我们做什么,关你什么事情?你不看不就好了吗?像你这样的人,肯定找不到女朋友,一辈子就只会用双手!”
俺现在没有女朋友,是没错。可您佬能不能留点口德啊?不仅诅咒俺找不到女朋友,还要一辈子用手!难道非要俺的手长老茧您佬才满意啊!
段伏枥有口难辩,但还是不能不辨:“真的不是我……”
女鸳鸯火更大了:“你以为你故意变声音,我就听不出来啊?做贼心虚,你这种人,假惺惺的……”
女鸳鸯还打算继续撒野,这时候,那个空灵的声音又出来了。不过,这时候段伏枥听清楚了,什么“够淫荡”,那是“going down”!英文!中文的意思是正在往下!
不知道这对鸳鸯是否听懂了这英文,但至少他们已经知道这不是段伏枥发出的声音。电梯刚到一楼,门一打开,这对小鸳鸯飞一般地跑了,只留下目瞪口呆的段伏枥。不识英文的小鸳鸯伤不起啊,伤不起……
注1:CMedia类源代码:http://blog.csdn.net/norains/article/details/1712083