首页 > 代码库 > 我为什么要造一个轮子——GNova开发小计

我为什么要造一个轮子——GNova开发小计

GNova最初叫做CSystem,是作为系统库来设计的。
我最初学习C++是在大学时期的专业课,学生时代也曾用C++写过一些算法,但项目和比赛一般是用C#和Java完成的。工作之后,由于项目需要,我们的业务平台需要使用C++进行编写。在当时,我总是认为C++的标准库SL不如Java的lang包和.Net的System库好用,再加上当时接触到了Qt的Core模块,以及项目合作单位自己的基础库封装,于是我渐渐萌生了编写一套属于自己的好用的基础库的想法,CSystem也就应运而生。
现在看来,当时的想法非常幼稚,SL的实现既优美又高效。当然,Qt的功能依然非常强大。倒是合作单位的基础库就逊色了太多,这一点先按下不提。
CSystem原本的功能是通用的基础库,不包含任何行业功能。我做它的目的是学习和积累C++的基础知识,将平时的点滴记录汇总成一个成型的产品体系。为了不与别人的文件名发生冲突,当时的项目文件和类命名都以Cs作为前缀。在这一时期,我参考了包括SL、Boost、Qt和ACE在内的成熟的基础库或其中的基础模块。比如Qt的P指针/D指针设计模式,很好地解决的二进制兼容的问题,不过我认为动态绑定在效率上总是略微逊色于静态绑定,所以这个设计模式没有应用到所有模块。同时也借鉴了一些能够接触到源码的商用产品的基础库,但这部分用得极少。我也查阅了大量的参考书籍。在这些学习和动手的过程中,我的编程能力逐步提升。收获了知识让我很快乐,也能够反哺工作,带来积极正面的影响。
按照现在的标准来看,实在是没有必要去造轮子,我应该把时间和精力放到一些还没有十分完善的领域,去开拓创新。我个人十分同意这一观点,所以造轮子仅仅针对这一个项目。我还希望能够参与很多使用各种语言、各种标准和各种平台的产品。话说回来,在编写CSystem的过程中,我确实收获了许多。
随着项目工作的开展,我对CSystem的功能要求也越来越高。我的专业是地理信息系统(GIS),我当然希望将专业的积累整合到CSystem中。因此,我将CSystem改名为GNova,文件和类的前缀也从Cs改为了一个字母“G”,表示这是一个主打GIS的产品。我也希望将我所学习到的服务端的知识也整合到平台中,我会仿照J2EE的标准,加入一个服务框架。另外,我在研究生期间主要的学术课题是网格生成算法,我会将当时用.Net编写的一个网格生成库iMesher用C++重写,当然,这些都是以后的事情了。随着这些模块和板块的加入,原本的一个库也也会逐渐演变成一个具有平台性质的产品。
GNova是用C++完成的。诚然,在现在的技术环境中,C++的地位日渐尴尬,但其独特的静态语义确实能达到别的需要无法达到的高效和优美。市场逐渐被动态语言和弱类型语言所占领,尤其是前者,如Java成熟的开源生态和标准,确实大大减少了项目的开发时间和维护成本,也更容易做出成果。说实话,我非常喜欢Java和JavaScript,目前我的工作也主要在用Java,但我更喜欢C++那种强大的掌控感,和那与编程难度相匹配的收获。所以,在GNova这个项目中,我会坚持使用C++作为底层主力语言。好在GNova现在没有人在使用,也只有我一个人需要维护。不过我的编程习惯和教条是编写大家都能看得懂的代码,我会用一系列代码格式、注释和命名规范去约束我的代码。
项目分两种,一种姓“开”,一种姓“闭”。日常工作中,我除了学习和参考一些开源项目,我也能接触到公司买来几个闭源的C++商用产品的源代码。不知道是行业的限制,还是合作的单位工作模式所致,我接触到的几个商用产品的基础库,往往都不是很好。这里的不好,指的是对新技术的接受程度不够,甚至抵触革新,还有一些编程技巧也太过老旧,完全不知当今社会技术的早已发展到了何种地步。这几个方面开源项目完胜。倒是那种晦涩莫深的态度、阴阳怪气的语气,和那种外强中干、自我吹捧的精神,没有几个开源产品能够匹敌。我知道这些都是个例,但确实让我对待开源和闭源的态度产生了影响。所以,我决定将GNova所有子项目全部开源。
对GNova的开发和维护早已成为我生活的一部分,也要感谢GitHub这个全球最大的项目托管平台,让我的上述渴望和诉求成为了现实。也希望通过这个平台,认识一些志同道合的朋友,共同学习和进步。截止目前,GNova的完成度还很低,这个完成度是针对我目前对整个平台的规划而言的,不包括今后的扩展。我会继续开发,并做好审查,不断学习接受吸纳最新的、最好的成果,完善这个平台。
学习是永无止境的,所以我认为对GNova的开发也是永无止境的。
最后,奉上GNova的GitHub链接。

我为什么要造一个轮子——GNova开发小计