我為什么要造一個(gè)輪子——GSystem開發(fā)小計(jì)

最初學(xué)習(xí)C++是在大學(xué)時(shí)期的專業(yè)課,學(xué)生時(shí)代也曾用C++寫過一些算法,但項(xiàng)目和比賽一般是用C#和Java完成的。工作之后,由于項(xiàng)目需要,我們的業(yè)務(wù)平臺(tái)的客戶端部分需要使用C++和Qt進(jìn)行編寫,這才重新拾起幾乎遺忘的技能。

當(dāng)時(shí)的我,總是認(rèn)為C++的標(biāo)準(zhǔn)庫(kù)SL不如Java的lang包和.Net的System庫(kù)好用,再加上當(dāng)時(shí)接觸到了Qt的Core模塊,以及項(xiàng)目合作單位自己的基礎(chǔ)庫(kù)封裝,于是我漸漸萌生了編寫一套屬于自己的好用的基礎(chǔ)庫(kù)的想法,CSystem也就應(yīng)運(yùn)而生。

現(xiàn)在看來(lái),當(dāng)時(shí)的想法非常幼稚,標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)既優(yōu)美又高效。當(dāng)然,Qt的功能依然非常強(qiáng)大。倒是珠玉在前,合作單位的基礎(chǔ)庫(kù)與之相比遜色了太多。

CSystem原本的功能是通用的基礎(chǔ)庫(kù),不包含任何業(yè)務(wù)功能。我做它的目的是學(xué)習(xí)和積累C++的基礎(chǔ)知識(shí),將平時(shí)的點(diǎn)滴記錄匯總成一個(gè)成型的產(chǎn)品體系。為了不與別人的文件名發(fā)生沖突,當(dāng)時(shí)的項(xiàng)目文件和類命名都以Cs作為前綴。在這一時(shí)期,我參考了包括標(biāo)準(zhǔn)庫(kù)(包括STL)、Boost、Qt和ACE在內(nèi)的成熟的基礎(chǔ)庫(kù)或其中的基礎(chǔ)模塊。比如Qt的P指針/D指針設(shè)計(jì)模式,很好地解決的二進(jìn)制兼容的問題,不過我認(rèn)為動(dòng)態(tài)綁定在效率上總是不滿足要求,所以這個(gè)設(shè)計(jì)模式?jīng)]有應(yīng)用到所有模塊。同時(shí)我也借鑒了一些能夠接觸到源碼的商用產(chǎn)品的基礎(chǔ)庫(kù),但這部分用得極少。我查閱了大量的參考書籍,在這些學(xué)習(xí)和動(dòng)手的過程中,我的編程能力逐步提升。收獲了知識(shí)讓我很快樂,也能夠反哺工作,帶來(lái)積極正面的影響。

按照現(xiàn)在的標(biāo)準(zhǔn)來(lái)看,實(shí)在是沒有必要去造輪子,我應(yīng)該把時(shí)間和精力放到一些還沒有十分完善的領(lǐng)域,去開拓創(chuàng)新。我個(gè)人十分同意這一觀點(diǎn),所以造輪子僅僅針對(duì)這一個(gè)項(xiàng)目。我還希望能夠參與很多使用各種語(yǔ)言、各種標(biāo)準(zhǔn)和各種平臺(tái)的產(chǎn)品。話說回來(lái),在編寫CSystem的過程中,我確實(shí)收獲了許多。

隨著項(xiàng)目工作的開展,我對(duì)gsystem的功能要求也越來(lái)越高。我的專業(yè)是地理信息系統(tǒng)(GIS),我當(dāng)然希望將專業(yè)的積累整合到項(xiàng)目中。因此,我將CSystem改名為GSystem,文件和類的前綴也從Cs改為了一個(gè)字母“G”,表示這是一個(gè)主打GIS的產(chǎn)品。

GSystem是用C++完成的。誠(chéng)然,在現(xiàn)在的技術(shù)環(huán)境中,C++的地位日漸尷尬,但其獨(dú)特的靜態(tài)語(yǔ)義確實(shí)能達(dá)到別的需要無(wú)法達(dá)到的高效和優(yōu)美。市場(chǎng)逐漸被動(dòng)態(tài)語(yǔ)言和弱類型語(yǔ)言所占領(lǐng),這些技能確實(shí)大大減少了項(xiàng)目的開發(fā)時(shí)間和維護(hù)成本,也更容易做出成果。說實(shí)話,我非常喜歡Java和JavaScript,目前我的工作也主要在用Java,但我更喜歡C++那種強(qiáng)大的掌控感,和那與編程難度相匹配的收獲。所以,在這個(gè)項(xiàng)目中,我會(huì)堅(jiān)持使用C++作為底層主力語(yǔ)言。好在現(xiàn)在沒有人在使用,也只有我一個(gè)人需要維護(hù)。不過我的編程習(xí)慣和教條是編寫大家都能看得懂的代碼,我會(huì)用一系列代碼格式、注釋和命名規(guī)范去約束我的代碼。

項(xiàng)目分兩種,一種姓“開”,一種姓“閉”。日常工作中,我除了學(xué)習(xí)和參考一些開源項(xiàng)目,我也能接觸到公司買來(lái)幾個(gè)閉源的C++商用產(chǎn)品的源代碼。不知道是行業(yè)的限制,還是合作的單位工作模式所致,我接觸到的幾個(gè)商用產(chǎn)品的基礎(chǔ)庫(kù),往往都不是很好。這里的不好,指的是對(duì)新技術(shù)的接受程度不夠,甚至抵觸革新,還有一些編程技巧也太過老舊,完全不知當(dāng)今社會(huì)技術(shù)的早已發(fā)展到了何種地步。這幾個(gè)方面開源項(xiàng)目完勝。倒是那種晦澀莫深的態(tài)度、陰陽(yáng)怪氣的語(yǔ)氣,和那種外強(qiáng)中干、自我吹捧的精神,沒有幾個(gè)開源產(chǎn)品能夠匹敵。我知道這些都是個(gè)例,但確實(shí)讓我對(duì)待開源和閉源的態(tài)度產(chǎn)生了影響。所以,我決定將GSystem所有子項(xiàng)目全部開源。
對(duì)GSystem的開發(fā)和維護(hù)早已成為我生活的一部分,也要感謝GitHub這個(gè)全球最大的項(xiàng)目托管平臺(tái),讓我的上述渴望和訴求成為了現(xiàn)實(shí)。也希望通過這個(gè)平臺(tái),認(rèn)識(shí)一些志同道合的朋友,共同學(xué)習(xí)和進(jìn)步。

截止目前,GSystem的完成度還很低,這個(gè)完成度是針對(duì)我目前對(duì)整個(gè)平臺(tái)的規(guī)劃而言的,不包括今后的擴(kuò)展。我會(huì)繼續(xù)開發(fā),并做好審查,不斷學(xué)習(xí)接受吸納最新的、最好的成果,完善這個(gè)平臺(tái)。

學(xué)習(xí)是永無(wú)止境的,所以我認(rèn)為對(duì)GSystem的開發(fā)也是永無(wú)止境的。
最后,奉上GSystem的GitHub鏈接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,172評(píng)論 4 61
  • 每年到了中秋的時(shí)候都是收獲的時(shí)候,所以小時(shí)候在地里干活會(huì)把五仁月餅當(dāng)干糧。 家里幾代農(nóng)民,所以從小沒少干活,從我記...
    西古墻的小眼兒迷閱讀 447評(píng)論 0 1
  • 要有多勇敢,才能攜一顆溫暖的心,與歲月相望。時(shí)間越久,越不愿離開的,才叫愛人。 01. 那年的你,是最好的你。 而...
    識(shí)花蜻蜓閱讀 516評(píng)論 2 9
  • 開篇便起了標(biāo)題“腐爛”,說團(tuán)隊(duì)沒有集中力量不錯(cuò),說“腐爛”卻有些不恰當(dāng)——部門各崗位精英仍在,這腐爛也只是腐...
    我憶你懂閱讀 305評(píng)論 0 0

友情鏈接更多精彩內(nèi)容