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

最初学习C++是在大学时期的专业课,学生时代也曾用C++写过一些算法,但项目和比赛一般是用C#和Java完成的。工作之后,由于项目需要,我们的业务平台的客户端部分需要使用C++和Qt进行编写,这才重新拾起几乎遗忘的技能。

当时的我,总是认为C++的标准库SL不如Java的lang包和.Net的System库好用,再加上当时接触到了Qt的Core模块,以及项目合作单位自己的基础库封装,于是我渐渐萌生了编写一套属于自己的好用的基础库的想法,CSystem也就应运而生。

现在看来,当时的想法非常幼稚,标准库的实现既优美又高效。当然,Qt的功能依然非常强大。倒是珠玉在前,合作单位的基础库与之相比逊色了太多。

CSystem原本的功能是通用的基础库,不包含任何业务功能。我做它的目的是学习和积累C++的基础知识,将平时的点滴记录汇总成一个成型的产品体系。为了不与别人的文件名发生冲突,当时的项目文件和类命名都以Cs作为前缀。在这一时期,我参考了包括标准库(包括STL)、Boost、Qt和ACE在内的成熟的基础库或其中的基础模块。比如Qt的P指针/D指针设计模式,很好地解决的二进制兼容的问题,不过我认为动态绑定在效率上总是不满足要求,所以这个设计模式没有应用到所有模块。同时我也借鉴了一些能够接触到源码的商用产品的基础库,但这部分用得极少。我查阅了大量的参考书籍,在这些学习和动手的过程中,我的编程能力逐步提升。收获了知识让我很快乐,也能够反哺工作,带来积极正面的影响。

按照现在的标准来看,实在是没有必要去造轮子,我应该把时间和精力放到一些还没有十分完善的领域,去开拓创新。我个人十分同意这一观点,所以造轮子仅仅针对这一个项目。我还希望能够参与很多使用各种语言、各种标准和各种平台的产品。话说回来,在编写CSystem的过程中,我确实收获了许多。

随着项目工作的开展,我对gsystem的功能要求也越来越高。我的专业是地理信息系统(GIS),我当然希望将专业的积累整合到项目中。因此,我将CSystem改名为GSystem,文件和类的前缀也从Cs改为了一个字母“G”,表示这是一个主打GIS的产品。

GSystem是用C++完成的。诚然,在现在的技术环境中,C++的地位日渐尴尬,但其独特的静态语义确实能达到别的需要无法达到的高效和优美。市场逐渐被动态语言和弱类型语言所占领,这些技能确实大大减少了项目的开发时间和维护成本,也更容易做出成果。说实话,我非常喜欢Java和JavaScript,目前我的工作也主要在用Java,但我更喜欢C++那种强大的掌控感,和那与编程难度相匹配的收获。所以,在这个项目中,我会坚持使用C++作为底层主力语言。好在现在没有人在使用,也只有我一个人需要维护。不过我的编程习惯和教条是编写大家都能看得懂的代码,我会用一系列代码格式、注释和命名规范去约束我的代码。

项目分两种,一种姓“开”,一种姓“闭”。日常工作中,我除了学习和参考一些开源项目,我也能接触到公司买来几个闭源的C++商用产品的源代码。不知道是行业的限制,还是合作的单位工作模式所致,我接触到的几个商用产品的基础库,往往都不是很好。这里的不好,指的是对新技术的接受程度不够,甚至抵触革新,还有一些编程技巧也太过老旧,完全不知当今社会技术的早已发展到了何种地步。这几个方面开源项目完胜。倒是那种晦涩莫深的态度、阴阳怪气的语气,和那种外强中干、自我吹捧的精神,没有几个开源产品能够匹敌。我知道这些都是个例,但确实让我对待开源和闭源的态度产生了影响。所以,我决定将GSystem所有子项目全部开源。
对GSystem的开发和维护早已成为我生活的一部分,也要感谢GitHub这个全球最大的项目托管平台,让我的上述渴望和诉求成为了现实。也希望通过这个平台,认识一些志同道合的朋友,共同学习和进步。

截止目前,GSystem的完成度还很低,这个完成度是针对我目前对整个平台的规划而言的,不包括今后的扩展。我会继续开发,并做好审查,不断学习接受吸纳最新的、最好的成果,完善这个平台。

学习是永无止境的,所以我认为对GSystem的开发也是永无止境的。
最后,奉上GSystem的GitHub链接。

你可能感兴趣的:(我为什么要造一个轮子——GSystem开发小计)