我为什么要造一个轮子——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链接

时间: 2024-08-06 17:04:15

我为什么要造一个轮子——GNova开发小计的相关文章

开发小计(3)

2015/12/21-----------------------------------------------------------------------------------        装了一天的weblogic和j2sdk,java1.4哎.        每次都不能将需要的项目部署到weblogic中,jsp文件都进不去,全是class文件进去了.        其他自己建立的新项目就可以,很奇怪.        MyEclipse启动也有错误,动不动就报JVm错误,莫名其妙

开发小计(2)

2015\11\11-----------------------------------------------------------------------------------------                 9:16 注释了销售出库扫描单号的222--227行,                ........................124行                ........................106行            10:38  

开发小计(1)

2015\11\11----------------------------------------------------------------------------------------        15:03    完成了昨天的供应链全部导出的问题                                1.仍然遗留的改进是将页面上显示的供应商与物料的代码与名称分开                  在数据库里面存的是代码,但是在页面上最好把代码和名称一起显示        

项目开发小计 <一> android开发小坑, 版本兼容

1, nosuchmethod 低版本会调用不到里面得方法首先是:   this.setBackgroundDrawable(); 这个是过期方法, 但是还是建议使用它, 因为在android 2.3 后 如果你尝试使用新得api this.setBackground();这个的话, 那么好吧,等着奔溃吧 其次是:  ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(null, 0);        array

SOA服务开发小计

http://item.jd.com/11181846.html#comment SOA面向服务架构——SOA的概念 http://www.cnblogs.com/leslies2/archive/2011/01/26/1934162.html http://blog.csdn.net/jzh440/article/details/26933505/ http://www.doit.com.cn/p/36431.html http://book.knowsky.com/book_8496.htm

开发小计之判断输入字符串类型(正则表达式)

#pragma mark - 正则表达式 - (BOOL)isMobileNumber:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSString * MOBILE = @"^1(3[0-9]|5[0-35-

用netty造一个简易的fiddler ( 一 生成证书重庆幸运农场 )

本人曾在上一家公司,搞过半年的爬虫.因此认识了这个叫 fiddler 的工具.当然市面上还有 charles ,开源也有 anyproxy whistle.到最后我还是喜欢用fiddler.似乎有点念旧.而现在这家公司是做erp的.项目用到了netty. 因此才有这个念头.造一个简单的轮子-简易的fiddler Fiddler是一个http协议调试代理工具重庆幸运农场 QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com,它能够记录并检查所有你

造新轮子啦,让pytesser支持3.x啦~

http://www.songluyi.com/%E9%80%A0%E6%96%B0%E8%BD%AE%E5%AD%90%E5%95%A6%EF%BC%8C%E8%AE%A9pytesser%E6%94%AF%E6%8C%813-x%E5%95%A6/ 0x00 前言 曾经用2.x版本的Python写过一个小小的验证码识别小程序,不到三十行,用的是pytesser 但是pytesser仅仅支持2.x版本,因此我们需要将这个轮子改写为3.x,方便我们调用. (等不及的小伙伴可以直接pip inst

我厌倦了 Redux,那就造个轮子 Rectx:第三集

仓库:215566435/rectx 前言 麻烦快去我的仓库里面喷: 老子学不动了,求不要更新. 呵呵,你没想到吧,这玩意儿竟然有第三集!我靠,我自己都没想到,让我们悄悄的回顾一下前两集完全没想到,竟然会有第二集! 我厌倦了 Redux,那就造个轮子 Rectx 第二集: immutable 痛点分析 第一集在这里:我厌倦了Redux,那就造个轮子:Rectx 算了,我都懒得写了,自己看吧,当然不看也无所谓,正式开始. 新的 Rectx 有什么不同? a light-weight state m