怎樣學(xué)好編程C語(yǔ)言
第一:C語(yǔ)言語(yǔ)法結(jié)構(gòu)很簡(jiǎn)潔精妙,寫(xiě)出的程序也很高效,很便于描述算法,大多數(shù)的程序員愿意使用C語(yǔ)言去描述算法本身,所以,如果你想在程序設(shè)計(jì)方面有所建樹(shù),就必須去學(xué)它。
第二:C語(yǔ)言能夠讓你深入系統(tǒng)底層,你知道的操作系統(tǒng),哪一個(gè)不是C語(yǔ)言寫(xiě)的?所有的windows,Unix,Linux,Mac,os/2,沒(méi)有一個(gè)里外的,如果你不懂C語(yǔ)言,怎么可能深入到這些操作系統(tǒng)當(dāng)中去呢?更不要說(shuō)你去寫(xiě)它們的內(nèi)核程序了。 第三:很多新型的語(yǔ)言都是衍生自C語(yǔ)言,C++,Java,C#,J#,perl...哪個(gè)不是呢?掌握了C語(yǔ)言,可以說(shuō)你就掌握了很多門語(yǔ)言,經(jīng)過(guò)簡(jiǎn)單的學(xué)習(xí),你就可以用這些新型的語(yǔ)言去開(kāi)發(fā)了,這個(gè)再一次驗(yàn)證了C語(yǔ)言是程序設(shè)計(jì)的重要基礎(chǔ)。還有啊,多說(shuō)一點(diǎn):即使現(xiàn)在招聘程序員,考試都是考C語(yǔ)言,你想加入it行業(yè),那么就一定要掌握好C語(yǔ)言。 那么究竟怎樣學(xué)習(xí)C語(yǔ)言呢? 1:工欲善其事,必先利其器 這里介紹幾個(gè)學(xué)習(xí)C語(yǔ)言必備的東東: 一個(gè)開(kāi)發(fā)環(huán)境,例如turbo C 2.0,這個(gè)曾經(jīng)占據(jù)了DOS時(shí)代開(kāi)發(fā)程序的大半個(gè)江山。但是現(xiàn)在windows時(shí)代,用turbo C有感覺(jué)不方面,編輯程序起來(lái)很吃力,并且拖放,更沒(méi)有函數(shù)變量自動(dòng)感應(yīng)功能,查詢參考資料也不方便。建議使用Visual C++,這個(gè)東西雖然比較大塊頭,但是一旦安裝好了,用起來(lái)很方便。 一本學(xué)習(xí)教程,現(xiàn)在C語(yǔ)言教材多如牛毛,但推薦大家使用《C語(yǔ)言程序設(shè)計(jì)》譚浩強(qiáng)主編 第二版 清華大學(xué)出版社,此書(shū)編寫(xiě)的很適合初學(xué)者,并且內(nèi)容也很精到。 除此以外,現(xiàn)在有很多輔助學(xué)習(xí)的軟件,畢竟現(xiàn)在是Window時(shí)代了,學(xué)習(xí)軟件多如牛毛,不象我們當(dāng)初學(xué)習(xí),只有讀書(shū)做題這么老套。我向大家推薦一個(gè)“集成學(xué)習(xí)環(huán)境(C語(yǔ)言)”,里邊的知識(shí)點(diǎn)總結(jié)和例程講解都非常好,還有題庫(kù)測(cè)試環(huán)境,據(jù)說(shuō)有好幾千題,甚至還有一個(gè)windows下的trubo C,初學(xué)者甚至不用裝其它的編譯器,就可以練習(xí)編程了,非常適合初學(xué)者。還有一個(gè)“C語(yǔ)言學(xué)習(xí)系統(tǒng)”軟件,不過(guò)感覺(jué)只是一個(gè)題庫(kù)系統(tǒng),如果你覺(jué)得題做的不夠,不妨也可以試試。 2:葵花寶典 學(xué)習(xí)計(jì)算機(jī)語(yǔ)言最好的方法是什么?答曰:讀程序。 沒(méi)錯(cuò),讀程序是學(xué)習(xí)C語(yǔ)言入門最快,也是最好的方法。如同我,現(xiàn)在學(xué)習(xí)新的J#,C#等其他語(yǔ)言,不再是抱著書(shū)本逐行啃,而是學(xué)習(xí)它們的例程。當(dāng)然,對(duì)于沒(méi)有學(xué)過(guò)任何計(jì)算機(jī)語(yǔ)言的初學(xué)者,最好還是先閱讀教程,學(xué)習(xí)完每一章,都要認(rèn)真體會(huì)這一章的所有概念,然后不放過(guò)這一章中提到的所有例程,然后仔細(xì)研讀程序,直到每一行都理解了,然后找?guī)讉€(gè)編程題目,最好是和例程類似的或一樣的,自己試圖寫(xiě)出這段已經(jīng)讀懂的程序,不要以為例程你已經(jīng)讀懂了,你就可以寫(xiě)出和它一樣的程序,絕對(duì)不一定,不相信你就試一試吧,如果寫(xiě)不出來(lái),也不要著急,回過(guò)頭來(lái)再繼續(xù)研究例程,想想自己為什么寫(xiě)不出來(lái),然后再去寫(xiě)這段程序,反反復(fù)復(fù),直到你手到擒來(lái)為止,祝賀你,你快入門了。 3:登峰造極 寫(xiě)程序的最高境界其實(shí)就是掌握各種解決問(wèn)題的手段(數(shù)據(jù)結(jié)構(gòu))和解決問(wèn)題的方法(算法)。 是不是寫(xiě)出底層程序就是程序設(shè)計(jì)高手呢?非也,寫(xiě)底層程序,無(wú)非是掌握了硬件的結(jié)構(gòu),況且硬件和硬件還不一樣,要給一個(gè)芯片寫(xiě)驅(qū)動(dòng)程序,無(wú)非就是掌握這塊芯片的各種寄存器及其組合,然后寫(xiě)值讀值,僅此而已。這不過(guò)是熟悉一些io函數(shù)罷了。那么怎樣才算精通程序設(shè)計(jì)呢?怎樣才能精通程序設(shè)計(jì)呢?舉個(gè)例子:你面前有10個(gè)人,找出一個(gè)叫“張三”的人,你該怎么辦?第一種方法:直接對(duì)這10個(gè)人問(wèn):“誰(shuí)叫張三”。第2種方法:你挨個(gè)去問(wèn)“你是不是張三?”,直到問(wèn)到的這個(gè)人就是張三。第三種方法:你去挨個(gè)問(wèn)一個(gè)人“你認(rèn)不認(rèn)識(shí)張三,指給我看”。不要小看這個(gè)問(wèn)題,你說(shuō)當(dāng)然會(huì)選第一種方法,沒(méi)錯(cuò)恭喜你答對(duì)了,因?yàn)檫@個(gè)方法最快,效率最高,但是在程序設(shè)計(jì)中找到解決問(wèn)題的最優(yōu)方法和你用的手段卻是考驗(yàn)一個(gè)程序員程序設(shè)計(jì)水平的重要標(biāo)志,而且是不容易達(dá)到的。剛才這個(gè)問(wèn)題類似于數(shù)據(jù)結(jié)構(gòu)和算法中的:Map數(shù)據(jù)結(jié)構(gòu),窮舉查找和折半查找。所以掌握好數(shù)據(jù)結(jié)構(gòu)和一些常用算法,是登峰造極的必然之路。最后給大家推薦嚴(yán)尉敏的《數(shù)據(jù)結(jié)構(gòu)》清華大學(xué)出版社,希望每一個(gè)想成為程序設(shè)計(jì)高手的人研讀此書(shū)。[編輯:趙晉軍] 二,語(yǔ)言學(xué)習(xí)方法 談?wù)勁嫉膶W(xué)習(xí)方法,拋磚引玉! 學(xué)習(xí)不論講不講方法,最終都能學(xué)會(huì)。但是別人1個(gè)月學(xué)會(huì)了,而你卻100年才學(xué)會(huì),這不就晚了么?:)所以說(shuō),學(xué)習(xí)還是要講究方法的。學(xué)習(xí)方法正確,事半功倍;學(xué)習(xí)方法不正確,事倍而功半。 什么才是學(xué)習(xí)C語(yǔ)言的捷徑?我的答案是看書(shū)。書(shū)中所寫(xiě),是前人數(shù)十年經(jīng)驗(yàn)所寫(xiě),看十本書(shū),就相當(dāng)于汲取了前人數(shù)十年的功力,那么你的內(nèi)功也會(huì)迅速上升1甲子。:)書(shū)當(dāng)然要看好書(shū),只有好書(shū)才營(yíng)養(yǎng)豐富。假如你花了1天時(shí)間看了一本破書(shū),而該書(shū)介紹的知識(shí)雖然對(duì)于你來(lái)說(shuō)是全新的知識(shí),但是由于書(shū)中組織不當(dāng)、或者深度不夠,使你獲取的營(yíng)養(yǎng)很少,還不如自己研究一天來(lái)的快,這種書(shū)就不值當(dāng)看了。學(xué)習(xí)C語(yǔ)言要看那些好書(shū)?我認(rèn)為首先要把基礎(chǔ)書(shū)給看扎實(shí)了,比如《C語(yǔ)言之四書(shū)五經(jīng)》中介紹的4本。(雖然這些書(shū)很多已經(jīng)絕版了,但我相信電子版也是很有益處。況且,如果你真的想看,我相信你一定有辦法搞的到。)這些書(shū)你會(huì)在很短的時(shí)間內(nèi)看完(比如一兩個(gè)月),這取決于你的基礎(chǔ)和悟性。之后要看那些書(shū)呢?我不妨再列幾本。Bjarne Stroustrup的《C++程序設(shè)計(jì)語(yǔ)言》(The C++ Programming Language)一定要看,這本書(shū)里面對(duì)于C的一些基礎(chǔ)概念的定義,比我見(jiàn)過(guò)的其他任何C語(yǔ)言書(shū)都要全,都要仔細(xì);Bjarne Stroustrup的《C++語(yǔ)言的設(shè)計(jì)與演化》(The Design and Evolution of C++)和David R.Hanson 的《C語(yǔ)言接口與實(shí)現(xiàn) 創(chuàng)建可重用軟件的技術(shù)》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,這兩本書(shū)講述了如何用C來(lái)實(shí)現(xiàn)異常處理、實(shí)現(xiàn)類型的封裝和擴(kuò)展等一些大的項(xiàng)目中經(jīng)常用到的高級(jí)技術(shù)。其他的書(shū),操作系統(tǒng)的要看,編譯原理的要看,算法的要看,模式的也要看。讀書(shū)破萬(wàn)卷,coding如有神。總而言之,就如《傳》中云:“生而知之者,上也;學(xué)而知之者,次也;困而學(xué)之又其次也。”我們不能總是因困而學(xué)之,而要做到兵馬未動(dòng),糧草先行。 看書(shū)是學(xué)習(xí)的導(dǎo)向,書(shū)中能一一介紹清楚概念,但書(shū)卻不能把應(yīng)用的細(xì)節(jié)一一介紹給你,因?yàn)閼?yīng)用總是招數(shù)繁復(fù),變化多端。因此我們要想熟悉招數(shù),懂得書(shū)中所講怎么使用,還要多讀源碼。Linus給別人解答問(wèn)題的時(shí)候,常說(shuō)Read the ***ing source code;候捷也在其文中提到“源碼之前,了無(wú)秘密。”這就是大師的箴言呀。源碼就像是動(dòng)畫(huà)、就像是幻燈片,把書(shū)中的招式一一演練給你看??梢哉f(shuō)高手的經(jīng)驗(yàn)大都是源自代碼。源碼和書(shū)一樣,也是要看好的,不要看差的。在此,我推薦看Linux kernel source code 和 Linux tcp/ip source code。這兩套代碼都是開(kāi)源的,垂手可得。此外,還可以配合著Andrew S.Tanenbaum的《操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux內(nèi)核 源代碼情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux設(shè)備驅(qū)動(dòng)程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP詳解(3部)》 (TCP/IP Illustracted )、W.Richard Stevens《UNIX環(huán)境高級(jí)編程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的內(nèi)容)等書(shū)來(lái)看,方便的很當(dāng)然程序不是看出來(lái)的,是寫(xiě)出來(lái)的。我高中的時(shí)候每天堅(jiān)持寫(xiě)6個(gè)小時(shí)程序,《數(shù)據(jù)結(jié)構(gòu)》和排列組合、圖論方面的習(xí)題反復(fù)做了N遍。到現(xiàn)在雖然已經(jīng)時(shí)隔二年,很多內(nèi)容早已淡忘掉,但卻培養(yǎng)了我很強(qiáng)的編碼能力和調(diào)試能力,直到現(xiàn)在還對(duì)我的工作有很大的幫助。 學(xué)習(xí)忌貪多、忌浮躁、忌急功近利、忌目中無(wú)人。把學(xué)習(xí)計(jì)劃放的長(zhǎng)一些,培養(yǎng)一個(gè)好的學(xué)習(xí)方法,一步一步慢慢走,終能成為高手。 C是編程語(yǔ)言的基礎(chǔ),建議大家從C開(kāi)始!還有就是我聽(tīng)說(shuō)大部分黑客是C語(yǔ)言的鐵桿Fans,當(dāng)時(shí)我聽(tīng)了這個(gè),所以對(duì)C學(xué)了下去!是這個(gè)信念讓我堅(jiān)持學(xué)會(huì),學(xué)通,學(xué)精!希望大家學(xué)編程語(yǔ)言時(shí),心中有一個(gè)信念! |
|
來(lái)自: 阿達(dá)2000 > 《我的圖書(shū)館》