作為一個(gè)經(jīng)驗(yàn)豐富的C/C++程序員, 肯定親手寫過各種功能的代碼, 比如封裝過數(shù)據(jù)庫訪問的類, 封裝過網(wǎng)絡(luò)通信的類,封裝過日志操作的類, 封裝過文件訪問的類, 封裝過UI界面庫等, 也在實(shí)際的項(xiàng)目中應(yīng)用過, 但是回過頭仔細(xì)想想,其實(shí)以前自己寫過的這些代碼,只能是在特定的項(xiàng)目或者特定的環(huán)境中使用, 對(duì)于自己來說, 在不同的項(xiàng)目中應(yīng)用, 只需要復(fù)制代碼, 改改也就可以了, 因?yàn)樽约簩懙拇a自己很熟悉。問題是, 你封裝的這些庫, 在給別人使用的時(shí)候, 別人用起來是否很方便, 跨平臺(tái)方面是不是也很通用, 性能是不是足夠的好, 是不是支持多線程, 功能是不是也足夠強(qiáng)大,可以適用于各種不同的需求。如果你上面這些都做到了, 證明你在這個(gè)庫上確實(shí)花費(fèi)了一番功夫, 經(jīng)過了持續(xù)的改進(jìn)和優(yōu)化。
在日常的開發(fā)中, 作為一個(gè)程序員, 很多東西已經(jīng)沒有必要再重新開發(fā)了, 可以直接拿過來使用, 畢竟21世紀(jì)都已經(jīng)過了N年了。我們沒有必要重新發(fā)明輪子(不可否認(rèn)發(fā)明輪子的過程可以學(xué)到很多東西,我就是這么走過來的)。
下面結(jié)合自己多年的開發(fā)經(jīng)驗(yàn), 想到哪里寫到哪里, 希望對(duì)新人有一定的幫助。
一、網(wǎng)絡(luò)
網(wǎng)絡(luò)庫必須掌握 ACE 和 libevent, 一個(gè)是重量級(jí)的網(wǎng)絡(luò)庫, 一個(gè)是輕量級(jí)的網(wǎng)絡(luò)庫。仔細(xì)想想,現(xiàn)在那個(gè)程序不用網(wǎng)絡(luò)啊。不懂網(wǎng)絡(luò), 你將寸步難行啊。 熟悉這兩個(gè)開源庫的前提是你必須懂socket的原理, 給大家推薦的好書就是 《UNIX網(wǎng)絡(luò)編程》,看懂這本書就可以了, 其他的什么《windows網(wǎng)絡(luò)編程》這些都不用看, 因?yàn)榫W(wǎng)絡(luò)編程,你學(xué)會(huì)了伯克利的套接字, 你就可以在任何平臺(tái)上進(jìn)行網(wǎng)絡(luò)編程了, 不需要學(xué)什么windows下的網(wǎng)絡(luò)編程, 因?yàn)閣indows下的網(wǎng)絡(luò)也是從伯克利套接字搞過來的, 如果你學(xué)習(xí)《windows網(wǎng)絡(luò)編程》, 那么你那天在linux,unix下進(jìn)行網(wǎng)絡(luò)編程,你還得在學(xué)習(xí)一下。沒有那個(gè)必要。
二、數(shù)據(jù)庫
數(shù)據(jù)庫嘛, 開源的Mysql和開源的PostgreSQL只要懂其中一個(gè)就可以了, 商業(yè)數(shù)據(jù)庫在掌握一個(gè)Oracle就可以了,文件數(shù)據(jù)庫掌握 sqlite。 不過請(qǐng)大家注意, 不要被上面數(shù)據(jù)庫名字給迷惑了, 數(shù)據(jù)庫的本質(zhì)是SQL語句, 一定要懂?dāng)?shù)據(jù)庫的基本原理,熟練應(yīng)用SQL語言,懂?dāng)?shù)據(jù)庫的優(yōu)化,存儲(chǔ)過程等。數(shù)據(jù)庫的原理搞懂了, 拿什么數(shù)據(jù)庫過來都輕松掌握, 就不會(huì)在乎是Mysql還是Oracle了。
三、日志操作
日志操作推薦大家熟悉 log4cpp這個(gè)日志庫, 支持多線程, 日志重定向到網(wǎng)絡(luò)等都有, 反正你能想到的日志的功能, 都有。
日志嘛,一個(gè)是方便查找問題, 方便記錄程序運(yùn)行的一些情況。這是必須的。
四、管理后臺(tái)
眾所周知, 寫程序是給其他人用的,不是自己用, 所以在程序的易用性上,多給對(duì)方提供一些可以直接查看的管理界面, 顯得分成重要。為程序提供一個(gè)web的管理界面,方便用戶登錄上去查看程序的各種信息, 很有必要。
我這里有一個(gè)方便的web后臺(tái)管理的http實(shí)現(xiàn), 可以方便的集成到應(yīng)用程序中。在IE里面輸入監(jiān)聽的端口,就可以查看程序的狀態(tài)。代碼還沒有仔細(xì)整理。有需要的弟兄可以給我留言, 給大家發(fā)。
五、讀取配置文件
所有的程序都必須有配置文件, 方便配置一些項(xiàng)目, 為程序提供靈活性。 所以寫程序,必須有讀取配置文件的封裝類。
六、內(nèi)存池
所有的進(jìn)程都需要分配內(nèi)存, 對(duì)C/C++來說, 分配和管理內(nèi)存是已經(jīng)很有挑戰(zhàn)性的工作。
給大家推薦 nedmalloc 這個(gè)開源的內(nèi)存池庫。nedmalloc是一個(gè)跨平臺(tái)的高性能多線程內(nèi)存分配庫,很多庫都使用它。
七、緩存庫
眾所周知, 緩存庫用得最多的就是 memcache 了。在做數(shù)據(jù)庫開發(fā)的時(shí)候特別有用。
八、腳本
腳本是一個(gè)很有意思的東西,很多功能,其實(shí)我們只要寫個(gè)腳本就可以完成,代碼量少,開發(fā)速度快。
必須掌握的腳本,比較通用的要算 perl 了, 很古老的語言,但是功能太強(qiáng)大了。 我可以保證的說,.net,java能干的工作,肯定可以讓perl來干。 C能干的, perl不一定能干。 perl作為linux, unix的系統(tǒng)集成的腳本語言,必須學(xué)會(huì)。
lua 語言, 這個(gè)語言, 在游戲行業(yè)用得比較多。不推薦學(xué)。
python 腳本, 功能很強(qiáng)大, 推薦學(xué)。
上面這些是所有程序都會(huì)用到的比較通用的功能。
在不同的應(yīng)用領(lǐng)域, 需要掌握不同開源庫, 比如搞游戲開發(fā)的, 可能需要掌握開源的UI庫CEGUI, 開源的3D引擎OGRE等。
搞分布式開發(fā)的可能會(huì)有分布式的文件系統(tǒng)庫等。
今天就為大家介紹到這里, 慢慢完善慢慢補(bǔ)充。