现在很多事都不好预料前景。然而有些事却铁定的是要走上下坡路的。正如现在已成俗语了的那句话----别人家的-----是啊。现在慢慢的体会到这句话的恶毒之处了。别人家所在的行业在蒸蒸日上,而孤家所在的行业却是如同正在日落西山。有的东西可能确实与所谓的技术含量这东西有关系的。进入门槛低,一看有钱,就一涌而入。最后大家才发现,疯狂争抢的结果,是一块喝稀饭。并没有赢家。实际上你也赢不了。有些行业中可以有输赢,赢家通吃。而有些行业就不是这样,一争抢,大家全输,全是XB。
啊,好象扯远了。不过也不是完全不着边际。正因为以上的情况,所以,我时常觉得无聊。怎么办呢?还好,我多年以前曾热爱过一阵游戏,巨大的热情驱动之下,想要自行建立一个游戏系统。第一人称射击。支持场景自建。
本来的想法。找到一个我看中的游戏引掣(开源的)。尔后,为其建立编辑环境。
想的很好。引掣也找到了。然而美中不足。引擎是纯C的。代码维护会是个恶梦。于是想找到该引掣的C++版本。我想应该是有的。一定有人已经完成过此事并也开源了。
然而,霹雳一声惊天地,天上掉下个林妹妹。一下把我的美梦给砸没了。
恶耗传来,google被封。
国内的搜索死活找不到我想要的。
万般无奈之下。只好自已动手丰衣足食。
先将该引掣的图形驱动部份改为C++的。同时将其由基于openGL的改为基于DX90C的。
这一改不要紧。效果竟是出乎意料的好。证明改用DX是相当正确的决定。
当然这样说实有轻描淡写之嫌,容易令人产生错觉,感觉此事似乎很是简单,甚至相当简单。
实则不然,为了达成此事,本人的确是奋斗了相当一段时间。在这段时间中,本人依次经历了,废寝忘食,夜以继日,通宵达旦,辗转反侧,夜不能昧,冥思苦想,上下求索,顺藤摸瓜,摸索前进,摸着石头过河,划着船过河,游泳过河,潜泳过河,骑着鱼过河,自游泳过河,赶着鸭子过河,跳过河,从桥上过河,一个后空翻过河,等河水干了过河,叫游泳高手背过河(这个游泳高手后来史了),坐着抛石机过河,化装成青蛙过河,象风一样(或者象木头一样)飘过河,假装过河,晓行夜宿,月黑风高,狂风呼啸,南征北战,东挡西杀,最终在一片睡眼蒙胧中,到达了胜利的彼岸。
当然,上面所说很多都是形容词。只可意会不可较真:)。
我想凡干过类似事情的人应该会有同感。花时间那是一定的,而且这种事往往还不是三五天三五十天所能搞定的。但是一旦开始了就很难自行终止,除非完成此事。某些事情初看往往觉得似乎并不是很难,搞定是分分钟的事儿。实则不然。C转C++合并同类项代码嘛。实则不然。源代码系统内部勾连错节,要想以另外的理念重构,事实表明并非预想的那般容易。如果那还是个比较大的系统,则要想重构之,不作些妥协可能是不可能的。除非全新另行重建。然而那恐怕真的是不可能的(原因显而易见)。还好,本人所用的源代码还没复杂到无法理清其头绪的地步。
这是对源代码刻意选择的结果。没有选择较高的版本。为何要如此。项目的复杂度会递增是原因之一,大幅增加了解析时间(所用源代码并没有提供多少说明文档只能靠代码本身了解它在说什么)。而更主要的原因还在于,项目的较高版本往往走上了对于象我这样的重构者所不希望看到的那么一条发展之路,那是一条整合之路,一条繁复之路,一条有那么句话所称的过渡设计之路。将几乎所有细枝末节都整合一处。在横向上互相牵连,在纵向上相互依赖。导致的结果,你无法将其中几乎任何东西单独抽取出来。整个项目如铁桶般水泄不通。你要使用其中某个局部功能吗?那好吧,你必须牵扯上该项目的所有其它部份,你要么全都带上,要么一个也别想拿走。然而,我们有我们使用其代码的目的,全都带上,不单是非我所愿,而且往往在实际操作中也是难以实施的。没那个时间是一方面。一个小功能后面一定要牵扯一个大系统,这是问题所在。对于那些认同已存项目体系的开发者言,这也许是一种方便,但对于那些想从另个角度来使用项目的人来说,这是一种巨大的障碍。因此。为了得到一条可以随意操纵的快艇,显然就要放弃规模巨大的万吨轮了。
而事实上,这并不是规模大与小的问题,也不是东西复杂与否的问题,而是一个路线选择问题。如果有人认同那个万吨轮,尽可以搭乘之,同行之,借用之。然而若它的结构方式,功能侧重,整个体系的灵活性,可塑性,以及要去的目的地等等都与你的希望相左,这时你又会怎么选择呢?它的路子是对的吗?虽然很为巨大。技术控中的激进派自有他们的彼岸,但那彼岸其实未必就是追随者的。他们指引的方向当然不会没有价值,但也未必会给追随者带来多少所希望的价值。巨浪卷起,飞沫跟随,其存在的意义有多大,这是个很大的问号。这样说可能有失公允,甚至是错的。如果证明路子对了,则无穷飞沫将会由此获得巨大能量而幻化为巨浪。所以,最后,这归结为风险问题。如果有了新的方向,那么它就内含的有一个价值方向。而如果沿着这个方向走去。就必与其它价值方向相左。新的样式就这样分化出来了。如果灵活性,可塑性被作为一个标准,则由此衍生的系统必将与其它标准的产物呈现不同的面貌。一个防守型的,僵化死板的系统之所以是那样一个样貌,是它的内在价值标准决定的。系统内部的无为并不导致僵化,而是由价值标准所衍生出来的一个行为体系,这个体系一方面内含了标准,一方面决定了系统的实际样式。一个低劣的系统不是因为没有形成某种行为体系所致,相反,是因为在实际上已经形成了那么一个低劣的形为体系。所有,很多时候,价值取向的不同成为一种根本的不同。任何系统的某个具体方面的价值取向在经过一段时间的了解,解读之后,都会被了解。一旦被了解。则价值取向机制就会本能的起作用。于是,取舍,这种行为就必然发生了。因此,快艇与巨轮的比较,不是体量方面的。如果论体量,则应舍快艇而就巨轮。这里体现的是不同的价值取向。如果没有真的认为快艇所隐含的价值方向要大大优越于巨轮的话,就不会选择快艇。然面,标准的优越与现实的优越是两回事。如同种子的萌芽预示了一棵大树。然而种子远不是大树。两者之间其实存在着巨大的不确定性。这就是现实与未来的不同。比较一般的系统可能占有一定的现实优越性。而更先进的标准则可能面临着能否生存的压力。这样看来,选择所认为的先进(不同的)标准,就现实而言,未必是明智之举。
然而,更严重的问题还在后面。一种价值的实现,从无到有,由小到大,是个极为艰难的过程。在培育过程中,若无环境助力,则根本无法想象能够生长。这样,先行者极可者就是被牺牲掉而得不到任何回报的那么一群。有个词可能就指这群人的----foolish.
所以,如果不是出于巨大的诱惑,或是出于无知,或是出于巨大的压力,或是出于来自内心深处的某种动力。谁会出此下策呢?然而,如果环境参数被调整到某种状态的话,情况就会有所不同。在很多情况下,荣誉感是一个强大的动力。有荣誉感立足之地的环境,将是该环境能够进化至优等的基础。
而项目开源正好是获取环境支持的一个方式。
那么,开源是什么以及,为何要开源呢?显然这个问题是需要讨论的。
今天先写到这儿。