過(guò)來(lái)人結合自身的體會(huì )和大家聊聊,希望新人能少走彎路。每個(gè)人的情況不一樣,我下面的描述可能并不適合每一個(gè)看到這篇文章的人。 C/C++語(yǔ)言 如果你的基礎很差, 建議不要一開(kāi)始就學(xué)C++語(yǔ)言,從C開(kāi)始學(xué)起,對程序有個(gè)初步的認識,循序漸進(jìn)。C語(yǔ)言的書(shū)嘛,先買(mǎi)一本 300 頁(yè)以?xún)鹊,把?shū)中的每一個(gè)例子都通過(guò)鍵盤(pán)敲打進(jìn)去到 Visual studio里面去,然后單步執行,逐行調試去看各個(gè)變量的值;蛘咦孕刑砑右恍﹑rintf語(yǔ)句去輸出變量的值。這樣當你看完一本書(shū)后, 你就有編寫(xiě)小程序的感覺(jué)了。 記住,千萬(wàn)不要偷懶,不敲進(jìn)去,自以為聰明, 能看懂, 或者直接從光盤(pán)復制。偷懶的代價(jià)是會(huì )花費更多的時(shí)間學(xué)習,最后還沒(méi)有學(xué)會(huì ),給自己的自信心造成巨大打擊,再也不想學(xué)程序了。 C語(yǔ)言看完一本書(shū)后,下來(lái)你就可以買(mǎi)一本C++的書(shū)看了。 C++的書(shū)也是一樣, 必須300頁(yè)以?xún)鹊哪欠N,不要一來(lái)就想學(xué)《C++ Primer中文版》這樣的好書(shū), 因為太厚了,怕你沒(méi)有信心能夠看完,即使你很有信心,花費一年的時(shí)間才看完,不值得。這種經(jīng)典的厚的好書(shū), 適合作為資料查閱,不適合挨個(gè)細節都看。 還是要提醒各位,一定要把書(shū)中的例子挨個(gè)敲打到電腦里面, 單步執行。一定不要從光盤(pán)復制, 一定要單步執行。 經(jīng)過(guò)兩本書(shū)的磨練, 估計你對C/C++肯定有比較深入的了解了, 下來(lái)應該可以進(jìn)入實(shí)戰了。 帶界面的應用程序 學(xué)會(huì )了C/C++語(yǔ)言本身,可能還沒(méi)有什么成就感,畢竟都是控制臺的程序, 老是輸出一串字符串, 整天面對各黑框框,成就感估計不是那么爽。要是能搞個(gè)帶UI界面的程序就爽了。 下來(lái)就看個(gè)人的志向了, 如果走微軟路線(xiàn), 那你下來(lái)學(xué)MFC好了,如果要走開(kāi)源路線(xiàn), 那開(kāi)源跨平臺的界面庫多得是。 通用的并且簡(jiǎn)單的就是 wxWidget 了, 官方網(wǎng)站為 www.wxwidgets.org/ 。你下載后看具體的例子, 把里面的例子程序敲到你的 visual studio 里面, 去調試, 看運行的結果, 你也可以試著(zhù)去修改例子, 添加按鈕,響應按鈕事件等。 走到這一步, 恭喜你,可以照葫蘆畫(huà)瓢的搞個(gè)小應用程序了, 還帶界面。 網(wǎng)絡(luò )應用程序 語(yǔ)言搞懂了,UI程序也會(huì )了, 下來(lái)該學(xué)學(xué)網(wǎng)絡(luò )咯, 現在那個(gè)程序不需要聯(lián)網(wǎng)啊,懂網(wǎng)絡(luò )對你理解很多程序非常有幫助。但是網(wǎng)絡(luò )應用程序從哪里入手呢 ? 我來(lái)告訴你,從《UNIX網(wǎng)絡(luò )編程》這本書(shū)入手吧,這本書(shū)可以教會(huì )你網(wǎng)絡(luò )套接字的底層原理,把上面的例子好好學(xué)習,自己動(dòng)手寫(xiě)一個(gè)回應服務(wù)器。寫(xiě)一個(gè)服務(wù)器端,在寫(xiě)一個(gè)客戶(hù)端。服務(wù)器端請務(wù)必學(xué)會(huì ) select 這個(gè)簡(jiǎn)單的多路復用模型,這樣你才能慢慢的深入里面 poll , epoll ,IOCP 之類(lèi)的模型。 文件操作 所有的程序,基本都會(huì )用到文件的讀寫(xiě)操作,windows系統有自己的文件操作API, 比如CreateFile, DeleteFile 等,請新手不要學(xué)windows的文件操作API, 新手請學(xué)標準C語(yǔ)言的文件操作函數,簡(jiǎn)單易學(xué)還跨平臺。就那么幾個(gè)函數,三下五除二你也就學(xué)會(huì )了, fopen, fclose, fread , fwrite, fseek, ftell 就這么幾個(gè)而已。 深刻理解內存與指針的關(guān)系 作為一個(gè)C/C++程序員, 從學(xué)習程序的頭一天開(kāi)始,就要和內存的分配釋放作斗爭。你必須理解內存與指針的關(guān)系。怎么樣才能理解呢, 請大家去看 《高質(zhì)量C/C++編程》里面自帶的幾個(gè)經(jīng)典例子吧。把那幾個(gè)例子搞得清清楚楚, 基本能夠理解其中的原理了。 仔細研究apache源碼 學(xué)程序非特別是C/C++程序,非3年之功可以出山,三年對一個(gè)C/C++程序來(lái)說(shuō)是一個(gè)從量變到質(zhì)變的過(guò)程,三年的項目實(shí)戰經(jīng)驗,可以讓你接觸到一個(gè)完整的應用程序所需要具備的骨架。但是這個(gè)階段你寫(xiě)的代碼,可能充滿(mǎn)BUG, 會(huì )宕機,運行效率很差,自己回頭看看一年前寫(xiě)的代碼,可能自己都感覺(jué)惡心, 看不下去。沒(méi)有關(guān)系,這種感覺(jué)是每一個(gè)進(jìn)步青年都會(huì )有的。要提高自己的代碼水平, 還是要像高手學(xué)習。你可能要問(wèn),公司同事的水平一般, 水平好的人家也不愿意給我講。沒(méi)有關(guān)系,開(kāi)源的代碼就是你像高手學(xué)習的最佳途徑,開(kāi)源代碼是高手留下的練功秘訣, 你看了后你會(huì )突然感覺(jué)茅塞頓開(kāi), 感覺(jué)自己的水平差人家太遠了。我為何要推薦apache的源碼呢? apache的源碼是高手中的高手寫(xiě)的,執行效率和程序架構堪稱(chēng)一絕。里面的很多思想是所有程序都通用的,搞懂了, 很多模塊你也可以直接拿來(lái)使用。apache對內存池的使用, 對線(xiàn)程池的使用, 對模塊結構的封裝,非常具有實(shí)際意義。要是你能把apache的源碼吃個(gè)透徹,每一個(gè)細節都搞明白了為何人家要這么實(shí)現,我可以給你說(shuō),“恭喜你 , 你離傳說(shuō)中的高手已經(jīng)不遠了! 修煉C++ 我上面說(shuō)的基本都是修煉C的, 要修煉C++, 還得再花3年功夫, 才有可能練成C++高手。C++太博大精深了,其中最復雜的莫過(guò)于泛型編程思想,不要以為能寫(xiě)個(gè)模板類(lèi)就認為泛型編程不過(guò)如此而已。仔細看看STL源碼, Boost 源碼, 你就知道泛型編程有多么的博大精深了。修煉C++, 可以從用C++封裝的MFC, wxWidget入手, 看高手如何通過(guò)C++語(yǔ)言, 封裝這樣龐大的UI庫,里面應用了很多的C++機制, 最典型的就是多態(tài)機制, 還有很多的設計模式應用可以研究。 深研設計模式 設計模式是程序設計的靈魂,是通用方法,當你面對一個(gè)大型項目的時(shí)候,如何設計一個(gè)有彈性的系統,是所有系統分析員應該掌握的技能。在設計模式的研究上,要結合實(shí)際的項目進(jìn)行。更多嵌入式學(xué)習,歡迎咨詢(xún)余工Q 二八五九七八零二零三 |