首先聲明,我可不是什么高手,也就是剛脫貧.因?yàn)檫\(yùn)氣很好,買到了幾本好書,在學(xué)習(xí)過程中幾乎沒走什么彎路,沒費(fèi)什么勁就入門了,現(xiàn)在一般的小程序能搞定了.看到那些因?yàn)椴恢獜暮蜗率侄嗫鄴暝呐笥?希望我的文章能給他們一些幫助.
學(xué)編程急不得,上來就學(xué)VC肯定碰一頭灰,說VC難就難在這點(diǎn)上了.如果硬上,意志堅(jiān)強(qiáng)的話也許能挺過來,但也是會(huì)缺乏后勁,不得不回過頭來補(bǔ)習(xí)基礎(chǔ)知識(shí).意志不堅(jiān)強(qiáng)的話,很有可能就此放棄了,并留下一個(gè)VC難得不得了的印象.其實(shí),只要踏踏實(shí)實(shí)一步一步來,VC也就是很簡單點(diǎn)事.在這里我說一下,如果你還只是一個(gè)初中生,那么你就應(yīng)當(dāng)仔細(xì)考慮一下了.首先,限于你的知識(shí)和思維能力,學(xué)學(xué)C語言還應(yīng)該沒問題,但要學(xué)VC是要下相當(dāng)大的功夫的.而且,你現(xiàn)在學(xué)到的東西將來一定會(huì)過時(shí),所以不如把精力放在算法的研究上,畢竟這些東西永遠(yuǎn)都不會(huì)過時(shí).
我覺著如果走對(duì)路子,入門VC,一個(gè)暑假應(yīng)該夠用了.
雖說學(xué)VC并不是傳說的那么難,可不下些苦功夫是學(xué)不成的.在學(xué)VC前,你必須確定,你是因?yàn)闊釔劬幊滩艑W(xué)VC的,而不是出于炫耀或其他.否則,恐怕你堅(jiān)持不到勝利的那一天.
等你對(duì)編程有一定的認(rèn)識(shí)后,就應(yīng)該開始進(jìn)軍C++了.注意,是C++而不是VC,這兩者根本不是一碼事!別買VC入門,你肯定看不懂!C++是一門語言,而VC教程則是講解如何使用MFC類庫,學(xué)習(xí)VC應(yīng)建立在充分了解C++的基礎(chǔ)上.
我覺著比起許多花花綠綠的大全、寶典,不如買本大學(xué)的C++教程(注意:別買等級(jí)考試的教程,那是應(yīng)試用的),那些教程大都經(jīng)過反復(fù)錘煉,比較系統(tǒng),很有含金量,有不會(huì)太貴.這里我暴力推薦由清華大學(xué)出版社出版的一本《C++程序設(shè)計(jì)教程》,封面是紅色的,封底是黃色的,看起來很樸素,主編是錢能.這本書簡直是好的沒法說,還便宜(39.5元).這本書不但告訴你語法,還告訴你為什么要這樣規(guī)定語法,看完之后,你會(huì)覺著那許許多多的規(guī)定是理所當(dāng)然的,根本不用費(fèi)心記,不但不枯燥,反而會(huì)使有一種美感.書中還有許多實(shí)際編程時(shí)應(yīng)注意的問題,很有價(jià)值.這本書還配有《實(shí)驗(yàn)指導(dǎo)》,和《習(xí)題集》,不過對(duì)于有一定編程經(jīng)驗(yàn)的人應(yīng)該是用處不大,所以我沒買.除了這本書,我建議再買本關(guān)于傳統(tǒng)C語言的書,要著重以下幾個(gè)方面:編譯預(yù)處理、typedef的使用,位運(yùn)算,標(biāo)準(zhǔn)庫函數(shù)的使用(最好有一個(gè)比較詳細(xì)的列表,用的時(shí)候好查).
C++的標(biāo)準(zhǔn)類模板是個(gè)不錯(cuò)的東東,不過對(duì)于學(xué)習(xí)MFC卻沒有幫助,原因是MFC太落后了(^_^),可以先放一放,要不要學(xué)等搞定MFC時(shí)再作決定.雖然我沒怎么學(xué)過,不過覺著它挺不錯(cuò),而且代表了一種發(fā)展方向.雖然學(xué)著費(fèi)勁(那東西幾乎沒一點(diǎn)C++的樣子,簡直是在學(xué)新語言),但掌握它可使編程輕松不少.
學(xué)完了C++,該學(xué)VC了吧?別急,先找本W(wǎng)IN32編程的書,這次沒什么講究,看著差不多的,便宜一些的就行了,如果有對(duì)于VC集成環(huán)境的介紹就最好了.WIN32編程是指用WINDOWS API編程,MFC是將眾多的API函數(shù)進(jìn)行了封裝的類庫,用起來方便了不少,但如果沒有一些API編程基礎(chǔ),對(duì)相關(guān)概念不了解,學(xué)起MFC來可能會(huì)很費(fèi)解.相信我,將來你不會(huì)覺著學(xué)API編程是浪費(fèi)時(shí)間的.API函數(shù)有兩千多,要都學(xué)會(huì)累死.其實(shí)你只要知道如何創(chuàng)建窗口、對(duì)話框、控件、消息循環(huán),了解了句柄的含義就差不多了,最好再了解一點(diǎn)GDI編程.這個(gè)階段的關(guān)鍵是要理解WIN32程序是如何運(yùn)作的,把握各種窗口間的關(guān)系.因?yàn)槟阋院髴?yīng)該很少直接用WIN32 SDK編寫程序,所以關(guān)鍵是理解整體結(jié)構(gòu),記住幾個(gè)函數(shù)并沒有什么意義.函數(shù)用的時(shí)候可以現(xiàn)查.手頭應(yīng)有一份比較全面的資料.中文的API函數(shù)大全好像只有For VB的,不過看起來應(yīng)該是沒有任何障礙.英文的資料MSDN中就有,相當(dāng)全面,也比中文的詳細(xì)一些.我建議用中文資料快速查找,有問題再看英文.(我忘了我的html版中文API大全是從哪下載的了,不過書店有售,白皮的,很厚一本,很貴就是了.誰想要可以與我聯(lián)系iamsor@sohu.com)
對(duì)于想學(xué)游戲編程的朋友注意:從現(xiàn)在起,你不必去學(xué)什么MFC了,相信我,那東西除了讓你頭疼一點(diǎn)用處都沒有.游戲都使用Win32 SDK編出來的.現(xiàn)在,你要學(xué)的是DirectX.我推薦老王翻譯的DirectDraw文檔(www.imagic3d.com),前面有一些老王自己寫的基礎(chǔ)知識(shí),很適合入門, 在此特別感謝老王的辛勤勞動(dòng).我還買了一本《DirectX 7 速成教程》,機(jī)械工業(yè)出版社出版,封面封底都是紅色.除了翻譯慘了點(diǎn)還算不錯(cuò),介紹的挺全面,還有一些游戲編程基礎(chǔ)知識(shí).如果你想圖省事,可以考慮用云風(fēng)編寫的風(fēng)魂游戲庫,很方便的(www.codingnow.com 對(duì)云風(fēng)的辛勤勞動(dòng)表示感謝).不過我仍然建議至少了解一下DirectX.這里說一下,很多朋友抱怨找不到有關(guān)DirectX的書籍,我告訴你,別去編程書籍里找,去多媒體制作書籍那找,還要把眼睛瞪得大大的、圓圓的.Director.. Director.. DirectX!!!知道了吧,書店工作的人眼神都不大好,我也是有一天沒事瞎轉(zhuǎn)才發(fā)現(xiàn)的,嚇了我一大跳.發(fā)現(xiàn)這個(gè)秘密后我發(fā)現(xiàn)其實(shí)有不少關(guān)于DirectX的書,只是一般人找不到罷了.學(xué)會(huì)了DirectX,就可以開始奮斗了,剩下的問題就只有積累經(jīng)驗(yàn)了.
對(duì)于志向是應(yīng)用軟件的朋友,打好了基礎(chǔ),現(xiàn)在進(jìn)軍VC的障礙都已掃清了.不過還是應(yīng)做好充分的思想準(zhǔn)備,事情不會(huì)那么順利的.剛開始,你就要面對(duì)一個(gè)瓶頸,大量的緊密關(guān)聯(lián)的知識(shí),使你必須一下理解一個(gè)整體,而很難一點(diǎn)點(diǎn)來.可以說,學(xué)VC最難的就是剛開始.情況有些類似于你第一次創(chuàng)建窗口時(shí)面對(duì)的那長長的程序,只不過更糟糕就是了.很多人就是在此被一大團(tuán)知識(shí)噎著,放棄了學(xué)習(xí).事實(shí)上,這幾乎是Windows編程的一大特點(diǎn),在WIN32編程時(shí)你就應(yīng)當(dāng)有所體會(huì),而DirectX和COM都有類似問題.記住,一定要堅(jiān)信:突破了這個(gè)瓶頸之后便是一片海闊天空,而有著扎實(shí)基礎(chǔ)的你是一定能闖過去的.
我的建議是,不要等徹底弄明白一句才看下一句,而是知道好像怎么回事就向下看,實(shí)在看不懂也硬著頭皮往下看,等能比貓畫虎的作出個(gè)菜單、對(duì)話框時(shí)便回過頭再看一遍,幾遍之后應(yīng)該就可以大概明白MFC程序的運(yùn)作了.注意:這里有個(gè)關(guān)鍵,一定要用心體會(huì)面向?qū)ο缶幊痰木?努力將眼前的程序與你之前所學(xué)的知識(shí)聯(lián)系起來.通過比較成員函數(shù)和對(duì)應(yīng)的API函數(shù)間的區(qū)別,嘗試去理解MFC是怎樣封裝相關(guān)的API的.例如,相當(dāng)多的類將句柄封裝了起來,在傳遞參數(shù)時(shí)加以省略,這就是一個(gè)很重要的特性.MFC中有許多的宏,看起來很奇怪,但你不必理會(huì)其實(shí)現(xiàn)方法,只要知道如何使用便可,這點(diǎn)也很重要.還有,千萬不要過于依賴ClassWizard,對(duì)于其生成的代碼要自己進(jìn)行分析,偷懶就不能真正理解MFC.
這里我介紹一種學(xué)法,不過學(xué)法這種東西因人而異,所以還要根據(jù)個(gè)人的情況決定.開始時(shí),教程讓怎么辦就怎么辦,比貓畫虎的作出個(gè)菜單、對(duì)話框,然后試著添加控件.等能不看教程便做到這些時(shí),開始逐字逐句的試著理解MFC程序的組織.若看不懂就跳過看下面的.就這樣一遍一遍來.如果覺著頭大就先歇上兩天,等清醒了再接著來.最好在這期間多找些介紹MFC框架的文章.注意:先不要碰有關(guān)文檔/視結(jié)構(gòu)的東西,否則你會(huì)更頭大.然后便可試著寫個(gè)定時(shí)器、名片夾之類的小東西,熟悉一下各種控件的使用.
突破了開始的瓶頸之后再學(xué)下去便會(huì)越學(xué)越容易,因?yàn)槟憧梢砸稽c(diǎn)一點(diǎn)的積累知識(shí),而不用擔(dān)心被噎著了.再過不久,你就不得不開始使用API函數(shù)完成一些功能,如在系統(tǒng)托盤加圖標(biāo),自畫列表框等.這時(shí),你也會(huì)體會(huì)到學(xué)習(xí)WIN32編程的好處了,沒學(xué)過的人很可能就此卡殼.
關(guān)于VC的教程遍地都是,但魚龍混雜,市場烏煙瘴氣,騙錢的書真不少.有些書很厚,內(nèi)容當(dāng)然也很全,對(duì)老鳥很不錯(cuò),但對(duì)于初學(xué)者似乎有些浪費(fèi)錢,因?yàn)槔锩娼^大部分的東西MSDN中都有,并且初學(xué)者用不著.老外寫的書一般內(nèi)容不錯(cuò),但翻譯水平是個(gè)問題.如果翻譯糟糕可夠你受的,加上價(jià)格不菲,我也不建議初學(xué)者買.還有些什么傻瓜書、圖解之類,好像是面向初學(xué)者,時(shí)則為騙錢,你看完后除了那幾個(gè)例子什么也不會(huì)作.如果你看到有一本書花了大量的篇幅圖文并茂,生動(dòng)形象的介紹如何畫圖,輸出文字,別買!騙錢的!(:-< 我就被坑去42塊現(xiàn)大洋)那些花哨的東西對(duì)初學(xué)者除了轉(zhuǎn)移注意力沒任何好處.如果你真的對(duì)GDI繪圖很感興趣,就去找些專門書籍,比那些書好多了.最好買名字類似于VC應(yīng)用,VC編程之類比較正式的,圖不要太多的,字不要太大的,最好是有較多的控件介紹的.當(dāng)然,文字流暢也是很重要的.書不要買太多,最多兩本,因?yàn)檫@些書內(nèi)容都差不多,買多了的話東看西看反倒沒好處.在這里,我建議初學(xué)者先別急著掏錢,而是去VC王朝( http://vcdynasty.yeah.net/)下載本MFC教程.雖說是網(wǎng)上教程,卻當(dāng)相當(dāng)有水準(zhǔn).不但內(nèi)容比較全面,還一句廢話也沒有(這里感謝作者的辛勤勞動(dòng)).只是可惜對(duì)GDI沒有一點(diǎn)介紹,還須其他書籍作補(bǔ)充.等搞定這本教程時(shí),應(yīng)該就已經(jīng)入了門,可以有針對(duì)性的選購書籍,不用擔(dān)心上當(dāng)受騙了.還有,VC知識(shí)庫(www.vckbase.com)的網(wǎng)上雜志也很不錯(cuò),對(duì)剛?cè)腴T的人很有幫助,建議下載.入了些門后,各個(gè)網(wǎng)站多轉(zhuǎn)轉(zhuǎn),看見好文章就往下拉,對(duì)提高水平很有好處.
一套MSDN光盤在這時(shí)是必不可少的,什么都找中文資料是不可能的,即使能找到也會(huì)很費(fèi)時(shí)間和金錢,只能看硬著頭皮英文.不過以我的經(jīng)驗(yàn)看,只要有高中水平的英語,加上金山詞霸一路滑過去,看那種專業(yè)文章還是很容易的.還有,初學(xué)者一上來可能根本不知道上哪找需要的東西,我在這里把常用的地方列一下:
WIN32 API: 平臺(tái)SDK->Reference->Win32 Functions in Alpha Order
MFC類庫資料: Visual C++ Documentation->Reference->Microsoft Fo...
C/C++語言及標(biāo)準(zhǔn)庫資料: Visual C++ Documentation->Reference->C/C++...
標(biāo)準(zhǔn)控件: 標(biāo)準(zhǔn)控件都被MFC封裝了,可以參考對(duì)應(yīng)的類,如Edit控件對(duì)應(yīng)CEdit類.
VC中帶的ActiveX控件: Visual Basic文檔->參考->控件參考(唯一的中文資料,卻是最糟糕的.不但是For VB,與C++有很大區(qū)別,還翻譯得亂七八糟,幾乎沒法用.如有高手知道哪有英文資料還請(qǐng)告知,不勝感激)
目前市面上的MSDN光盤已經(jīng)有一段歷史了,有些東西可能有些過時(shí).要最新資料的話,可以到微軟的網(wǎng)站(當(dāng)然是全英文的).不過對(duì)于初學(xué)者似乎沒有必要.
搞定VC后,要學(xué)什么都隨你便了,再學(xué)C++Builder,VB,Dephi,java什么的都是一點(diǎn)難度都沒有了,感覺就象是把關(guān)鍵字換了換.或者可以去啃啃COM,據(jù)說那是塊硬骨頭(不過好像也只是入門難,因?yàn)橛辛酥暗慕?jīng)驗(yàn),雖然我沒碰過,但花點(diǎn)時(shí)間應(yīng)該是搞得定的.另外DirectX編程經(jīng)驗(yàn)在此應(yīng)該是有些幫助的).
最后,我建議有時(shí)間的話多研究一下各種算法.數(shù)據(jù)結(jié)構(gòu)是一定要看的.不一定要記住(話說回來,不經(jīng)常用的話也記不住),但至少要知道有那么回事,萬一碰到問題了要知道往那邊靠.其實(shí),常見的鏈表等結(jié)構(gòu)以及排序等算法在C++標(biāo)準(zhǔn)類模板中已經(jīng)實(shí)現(xiàn)了,不用你去費(fèi)勁,但有些了解的總是有好處的.至于離散數(shù)學(xué)、線性代數(shù)什么的,對(duì)于復(fù)雜些的算法是必需的,其中離散數(shù)學(xué)是數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ).不過,我倒覺著只要不是太復(fù)雜的問題只用經(jīng)驗(yàn)也能解決(就象奧賽書中那樣,只是實(shí)現(xiàn)而沒有證明),而且那些東西不用就會(huì)忘.萬一碰見個(gè)難題解決不了,找個(gè)高手幫忙也不錯(cuò),省時(shí)省力^_^.
下面是我想到的一些雜七雜八的問題,沒什么條理,湊或看吧:
英語水平不用很高,但至少要有高中水準(zhǔn),否則有你受的.
看書一遍看不懂沒關(guān)系,事實(shí)上,要一遍就能弄懂你就很有天分了.只要多看幾遍,綜合分析,應(yīng)該是沒有什么問題的.
現(xiàn)在的世道,不是書到用時(shí)方恨少,而是書到用時(shí)方能學(xué).不要試圖滿把抓,而要用到什么學(xué)什么.這樣,學(xué)的又快,記的又牢.
一個(gè)錯(cuò)誤認(rèn)識(shí)-學(xué)編程靠的是記憶:這是很要命的思想,會(huì)讓你累死而無所得.事實(shí)上,你幾乎不用特意記任何東西.對(duì)于各種函數(shù)、語句,只要知道有那么個(gè)東西,用的時(shí)候知道上哪找就行了,用多了自然就記住了.學(xué)編程關(guān)鍵在理解編程思想.
一個(gè)小技巧:活用編譯器可以幫你很多忙.在VC中,當(dāng)你輸入成員符號(hào).或->時(shí),程序會(huì)自動(dòng)列出此類的成員,你只要選一個(gè)就行了.這樣便省了很多記憶負(fù)擔(dān).例如,你想獲得一個(gè)CString類對(duì)象的長度,對(duì)應(yīng)方法肯定是Get什么,但是GetLetterNum還是GetStrLength卻不知道,你可以輸入xxx.Get,這樣,你便可從列表中找到一個(gè)GetTextLength(),不是這個(gè)還能是什么,單擊它的話還可能出現(xiàn)說明.還可避免打錯(cuò)字.如果想調(diào)用本類的成員函數(shù),就輸入this->,就可以查看成員列表了.對(duì)于全局函數(shù),則是輸入::即可.這樣的話看起來還清楚.還有,如果沒有出現(xiàn)那個(gè)列表,八成是你弄錯(cuò)了什么東西,例如變量沒定義,或打錯(cuò)了字,但也可能是VC的BUG,很少就是了.對(duì)于初學(xué)者,這可是很好用的功能.
初學(xué)編程應(yīng)遵循的一條原則:比貓畫虎、不求甚解.關(guān)鍵在于很多東西你就甚解不了,例如MFC中稀奇古怪的宏.而且,甚解了也沒太大的好處,暫時(shí)還是不要管它,會(huì)用就行了,什么時(shí)候有了閑工夫再來慢慢琢磨.多留心別人的程序是如何實(shí)現(xiàn)的,并照著去做.有時(shí),一些小問題也體現(xiàn)著高深的思想.比如,一個(gè)變量要定義在什么地方,如何組織類的結(jié)構(gòu).如果不太明白,就先找著別人的樣子去作,時(shí)間一長就會(huì)自然而然的明白,這就像下棋一樣,老頭怎么下,你也跟著怎么下,畢竟他出錯(cuò)的可能比你小.
還有,我覺著初學(xué)者不應(yīng)把過多的精力放在象Cool的工具條,透明的、氣泡狀的窗口之類的工作上.再搞這些之前,你最好問問自己,自己的程序配得上這些漂亮的界面嗎?尤其是,千萬不要在剛開始動(dòng)手時(shí)就先打扮界面,以免界面也弄好了,熱情也沒了.畢竟,看在眼里的成果給人的刺激比枯燥的算法強(qiáng)得多.如果你想搞的話,也要等程序主體定型后再搞.
初學(xué)時(shí)還應(yīng)多留心關(guān)于程序結(jié)構(gòu)組織的文章,這些東西是很重要的.要從一開始便養(yǎng)成良好的風(fēng)格.否則有一天當(dāng)你決定編一個(gè)大點(diǎn)的程序時(shí),你就會(huì)發(fā)現(xiàn)干到一半就干不下去了.
編程不是技術(shù)活,而是體力活:學(xué)的時(shí)候滿腦子全是技術(shù),可用的時(shí)候就真成了體力活了.真正做起東西來,最重要的是要有毅力堅(jiān)持到完.意志不堅(jiān)強(qiáng)就難免半途而廢.
關(guān)于初學(xué)者是該學(xué)VC還是該學(xué)VB的問題:我覺著,學(xué)VC會(huì)難一些沒錯(cuò),但掌握學(xué)習(xí)方法的話也沒想象的那么難,而且學(xué)VC才能深刻領(lǐng)會(huì)面向?qū)ο缶幊痰木?它使你的思想提升了一個(gè)高度,對(duì)以后的發(fā)展是大有好處的.再說,如果這點(diǎn)困難都克服不了,以后也很難有什么作為.所以,即使你打定主意用VB,也還是花些時(shí)間看看VC,至少知道它的大概結(jié)構(gòu).從長遠(yuǎn)看,這是很有好處的.
關(guān)于學(xué)C++ Builder還是Visual C++的問題:也許VC真的不太好,但總不會(huì)太糟.可關(guān)于VC的資料不知是關(guān)于C++ Builder的多少倍.尤其對(duì)于初學(xué)者,這時(shí)很要命的!何況兩者相差其實(shí)并不太多,學(xué)會(huì)了一種,再學(xué)另一種也不會(huì)太費(fèi)事.
呵,沒想到說了這么多.我已經(jīng)聲明了,其實(shí)我也就是剛?cè)腴T,以上一切都是我自己的感受,難免有錯(cuò)誤,還請(qǐng)高手指正.另外,這是我第一次寫文章,加上我語文很糟糕,其實(shí)就是想到哪寫到哪,各位就湊或一下吧.
轉(zhuǎn)貼,(學(xué)C++,體會(huì))
全部回復(fù)(5)
正序查看
倒序查看