|
有人認(rèn)為,現(xiàn)在是java和.net的時代,有誰還需要C以及匯編呢?孰不知,java和.net是建立在軟件之上的,是為了壟斷市場而建立起來的體系, 猶如挖好一個金壁輝煌的坑,請你往下跳,還自以為站在巨人的肩膀上,事實(shí)上成了坑底之蛙。要成為一個真正的程序員,并期望成為一個程序員高手,必須從機(jī)器 出發(fā),從cpu到操作系統(tǒng),再到軟件體系,高手的境界就是悟道后的明鏡靈臺,軟件設(shè)計(jì)出神入化,我就是程序,程序就是我。
旁觀者李四說:此人大笨也!我用鼠標(biāo)隨便拖幾個控件,就是一個xxx管理系統(tǒng)了,你用C語言怕是一年也寫不出來吧!好吧,我要承認(rèn),講這話的都已經(jīng)是mS 的奴才了,別的我不了解,MFC本身就是一個封閉的架構(gòu),從MFC入手學(xué)習(xí),你只會形成一種封閉的思維模式,因?yàn)镸S希望很多人只學(xué)會表面的東西,不致成 為高手,所以它大力推薦所謂的可視化的程序開發(fā)工具,也真有很多人愿意上他的當(dāng),最后真正迷失方向。說他坐不了程序吧,他也可以作,但是如果程序復(fù)雜一 點(diǎn),出現(xiàn)問題時,問題出再哪里就搞不清楚了,反正是不清楚!
梁肇新,大牛啊,他說:"我就搞不懂了,用鼠標(biāo)怎么寫程序呢?在我的公司里,高手的鍵盤響個不停,鼠標(biāo)偶爾響一下,新手是鼠標(biāo)響個不停,鍵盤偶爾響一下,他們的薪水相差的就不是一倍那么多了!"
C語言是各大操作系統(tǒng)的基礎(chǔ),Unix、Linux、Windows其內(nèi)核都清一色是C語言開發(fā)的,(某些地方是和匯編語言混合開發(fā)的),君不見 WindowsAPI都是C語言函數(shù)的接口?Unix/Linux絕大多數(shù)應(yīng)用都是C語言開發(fā)的;Windows應(yīng)用程序用純API開發(fā)已然不多,大多都 是依靠某種ApplicationFramework,比如所謂的VC++,其實(shí)就是指VCIDE+C++語言+MFC(現(xiàn)在重點(diǎn)已轉(zhuǎn)向ATL、 WTL),但是Windows服務(wù)、網(wǎng)絡(luò)、驅(qū)動程序等底層軟件,還是C語言開發(fā)的。各種語言的編譯器,包括java虛擬機(jī),都是用C語言開發(fā)的。各種嵌入 式設(shè)備,如手機(jī)、PDA也都是C語言開發(fā)的。
第一個要裝進(jìn)行囊和你一起前進(jìn)是"規(guī)范的格式" 。所以說,規(guī)范的格式是入門的基礎(chǔ)。那這個規(guī)范的格式包括什么呢?不少啊,要堅(jiān)持才能做到!長標(biāo)志符命名,代碼縮進(jìn),一對大括號范圍不超過一屏幕,等等。
第二個要裝進(jìn)行囊的是耐心,所謂工欲善其事,必先利其器。要想成功,沒有一個相對平淡的過程是不可能的。這不僅僅指你在學(xué)習(xí)過程中要有耐心,要循序漸進(jìn), 而起也說的是另一個重要的方面:調(diào)式程序。調(diào)試是寫程序過程中一個重要的方面,如果有人能一次寫成程序,牛啊,而且是大牛,不光是大牛,還是老子騎的那頭 青牛,凡人是做不道的!調(diào)試是每個程序必定經(jīng)歷的歷程。
第一招,學(xué)什么呢?打狗棍法!呵呵
有一個偉人說過:"重復(fù)權(quán)威是成熟的必經(jīng)之路",這是站在巨人的肩膀上的做法,習(xí)武之人首先要學(xué)的都是各種套路,比方說辟邪劍法,然后才能融會貫通,開宗流派;我們學(xué)習(xí)寫程序也要這樣來,這是一個捷徑,幫你走得更遠(yuǎn)得捷徑。
看書,看好書!書中所寫,是前人數(shù)十年經(jīng)驗(yàn)所寫,看十本書,就相當(dāng)于汲取了前人數(shù)十年的功力,那么你的內(nèi)功也會迅速上升1甲子。:)書當(dāng)然要看好 書,只有好書才營養(yǎng)豐富。要做到讀書破萬卷,編程如有神;枯燥的看書是很郁悶的,很容易變成化石!現(xiàn)在很多是書都是用源碼說明問題的,源碼就像是動畫、就 像是幻燈片,把書中的招式一一演練給你看。 自己手工輸入這一步不能省略,現(xiàn)在很多書有配套源碼,很多同學(xué)或者成年人學(xué)習(xí)的時候都耍小聰明,直接把源碼復(fù)制過去編譯運(yùn)行,hoho,這是沒有效果的。
TC至少有一個好處,可以鍛煉我們使用組合鍵的習(xí)慣,可以鍛煉我們使用鍵盤編程的習(xí)慣。
一、要讀就讀好書,否則不如不讀
Kernighan和Ritchie的《TheCProgrammingLanguage》(中譯名《C程序設(shè)計(jì)語言》)堪稱經(jīng)典中的經(jīng)典,不過舊版的很 多內(nèi)容都已過時,和現(xiàn)在的標(biāo)準(zhǔn)C語言相去甚遠(yuǎn),大家一定要看最新的版本,否則不如不看。另外,即使是最經(jīng)典最權(quán)威的書,也沒有辦法面面俱到,所以手邊常備 一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《CReferenceManual》,是C語言標(biāo)準(zhǔn)的詳細(xì)描述,包括絕大多數(shù)C標(biāo)準(zhǔn)庫函數(shù) 的細(xì)節(jié),算得上是最好的標(biāo)準(zhǔn)C語言的工具書。順便提一句,最新的《C程序設(shè)計(jì)語言》是根據(jù)C89標(biāo)準(zhǔn)修訂的,而《C語言參考手冊》描述的是C99標(biāo)準(zhǔn),二 者可能會有些出入,建議按照C99標(biāo)準(zhǔn)學(xué)習(xí)。還有一本《C和指針》,寫得也是相當(dāng)?shù)夭诲e,英文名是《PointersonC》,特別地強(qiáng)調(diào)指針的重要性, 算是本書的一個特點(diǎn)吧。不過這本書并不十分適合初學(xué)者,如果你曾經(jīng)學(xué)過C語言,有那么一些C語言的基礎(chǔ)但又不是很扎實(shí),那么你可以嘗試一下這本書。我相 信,只要你理解了指針,C語言便不再神秘。
如果你已經(jīng)啃完了一本C語言教材,想要更進(jìn)一步,那么有兩本書你一定要看。首先是《CTrapsandPitfalls》(中譯名《C陷井與缺 陷》),很薄的一本小冊子,內(nèi)容非常非常地有趣。要注意一點(diǎn),這本書是二十多年前寫成的,里面提到的很多C語言的缺陷都已被改進(jìn),不過能夠了解一些歷史也 不是什么壞事。然后你可以挑戰(zhàn)一下《ExpertCProgramming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細(xì)讀完并能透 徹理解,你便可以放心大膽地在簡歷上寫"精通C語言"了。
切記一個原則,不要讀自己目前還看不懂的書,那是浪費(fèi)生命。如果你看不懂,那你一定是缺失了某些必需基礎(chǔ)知識。此時,你要仔細(xì)分析自己需要補(bǔ)充哪些內(nèi)容, 然后再去書店尋找講述的這些內(nèi)容的書籍。把基礎(chǔ)知識補(bǔ)充完畢再回頭來學(xué)習(xí),才會真正的事半功倍。
二、Unix/Linux還是Windows,這是個很大的問題
不同的編程環(huán)境會造就出不同思維的程序員。Windows的程序員大多依賴集成開發(fā)環(huán)境,比如VisualStudio,而Unix程序員更加鐘愛 Makefile與控制臺。顯而易見,集成開發(fā)環(huán)境更容易上手,在Windows上學(xué)習(xí)C語言,只需要會按幾個基本的VisutalC++工具欄按鈕就可 以開始寫Hello,World!了,而在Unix下,你需要一些控制臺操作的基本知識。有人也許認(rèn)為Unix的環(huán)境更簡潔,但習(xí)慣的力量是很大的 。
所以我建議初學(xué)者應(yīng)該以VisualC++6.0(不是VisualC++.NET)或者DevC++作為主要的學(xué)習(xí)環(huán)境,而且千萬不要在IDE的 使用技巧上過多糾纏,因?yàn)榻窈竽阋欢ㄒD(zhuǎn)向Unix環(huán)境的。VisualC++6.0使用很方便,調(diào)試也很直觀,但其默認(rèn)的編譯器對C標(biāo)準(zhǔn)的支持并不好, 而DevC++使用gcc編譯器,對C99的標(biāo)準(zhǔn)都支持良好。使用順帶提一下,很多大學(xué)的C語言課程還在使用TurboC2.0作為實(shí)驗(yàn)環(huán)境,這是相當(dāng)不 可取的,原因其一是TC2.0對C標(biāo)準(zhǔn)幾乎沒有支持,其二是TC2.0編譯得到的程序是16位的,這對今后理解32位的程序會造成極大的困擾(當(dāng)然,用 djgpp之類的東西可以使TC2.0編譯出32位程序,不過那過于復(fù)雜了)。
等你學(xué)完一本C語言的教材,你一定要轉(zhuǎn)向Unix平臺繼續(xù)學(xué)習(xí),幾乎所有的C語言高級教程都是基于Unix平臺的(比如《C專家編程》)。轉(zhuǎn)變的過程是痛 苦的,你需要面對的是各種紛繁復(fù)雜的命令,完全不同于Windows平臺的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和 習(xí)慣更加符合C語言的思考方式和習(xí)慣。在Unix下,你可以找到無數(shù)優(yōu)秀的源代碼供你盡情閱讀,你可以方便地查看某個庫函數(shù)的聯(lián)機(jī)手冊,還可以看到最優(yōu)秀的代碼風(fēng)格(說到代碼風(fēng)格,我會專門寫一篇文章詳細(xì)敘述)。
歸結(jié)起來就是一句話:初學(xué)C語言,建議使用Windows系統(tǒng)和集成開發(fā)環(huán)境,在準(zhǔn)備向"高手"方向努力時,請先轉(zhuǎn)向Unix平臺。
三、萬事俱備,你就是東風(fēng)
書已選定,環(huán)境配置完成,正所謂萬事俱備,只欠你自己的努力了。請從書的前言開始,仔細(xì)地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是 錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什么基礎(chǔ)才能夠順利閱讀本書,這可以幫助你檢驗(yàn)自己的基礎(chǔ)知識是否已經(jīng)具備?赐昵把, 還要瀏覽一下目錄,了解一下書的整體結(jié)構(gòu),順便給自己安排一下學(xué)習(xí)計(jì)劃。
例子之后就是習(xí)題了,我建議初學(xué)者把所有的習(xí)題都獨(dú)立做一遍。
也許你認(rèn)為這樣學(xué)習(xí)太慢,其實(shí)不然。學(xué)得細(xì)致就不用走回頭路,等你學(xué)到后面才發(fā)現(xiàn)自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你 應(yīng)該完成數(shù)千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今后繼續(xù)學(xué)習(xí)的一筆財(cái)富。以我自己舉例,閱讀《Windows 核心編程》時(我只閱讀了3/4的內(nèi)容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統(tǒng)計(jì)),時隔多日,我早已記 不清Windows的系統(tǒng)編程了,但只要花幾分鐘翻出以前的代碼看看,便會重新了然于胸。所謂好記性不如爛筆頭,就是這個道理。
仔細(xì)讀書、認(rèn)真抄寫源代碼、獨(dú)立完成習(xí)題外加更進(jìn)一步的實(shí)驗(yàn),最后將所有的代碼留下,成為自己的經(jīng)驗(yàn)和財(cái)富,絕對的辛苦,也絕對的事半功倍。當(dāng)然,這種方式只適合學(xué)習(xí)需要精通的技術(shù),如果不是學(xué)習(xí)C語言,你還要具體情況具體分析。
寫到最后,還有非常非常重要的一點(diǎn)沒有提及──代碼風(fēng)格,從最開始學(xué)習(xí)就必須強(qiáng)迫自己模仿最優(yōu)秀的代碼風(fēng)格。因?yàn)榇a風(fēng)格太重要內(nèi)容也太多,我會用專門的一篇文章來詳細(xì)討論,請大家關(guān)注《程序員之路──關(guān)于代碼風(fēng)格》。
在這里停一下,上面說的便是我學(xué)習(xí)的風(fēng)格:總要經(jīng)歷一番波折,瞎折騰幾下,然后才會有偶然間的明悟-開竅了!我甚至沒見過幾個人有我這么笨,現(xiàn)在明白過來 了,我總是一開始把事情想得過于復(fù)雜,造成狗咬刺猬的難堪的局面,然而竟然有意想不到的收獲!但是不建議大家模仿這種風(fēng)格,起碼追女朋友的時候不能這樣, 生活中很多機(jī)會在于接手的那一瞬間,失去就永遠(yuǎn)找不回來了。
現(xiàn)在回來,后來偶然間,我看懂了一行代碼,是print語句,當(dāng)時興奮得要命,又仔細(xì)看了這個看了那個,一下子看懂了很多東西,像是在霎那間被什么給擊中似的,立刻間醍醐灌頂。。。。
可是,還是那句話不破不立,不阻不行。就像我現(xiàn)在有了電腦,整天泡在互聯(lián)網(wǎng)的海洋里,感受著快餐文化,好久都沒靜下心來好好想點(diǎn)東西了。
談及C語言,我想凡是學(xué)過它的朋友都有這樣一種感覺,那就是"讓我歡喜讓我憂。"歡喜的是,C語言功能非常強(qiáng)大、應(yīng)用廣泛,一旦掌握了后,你就可以理直氣 壯地對他人說"我是電腦高手!",而且以后若是再自學(xué)其他語言就顯得輕而易舉了。憂慮的是,C語言猶如"少林武功"一般博大精深,太難學(xué)了。其實(shí)就筆者認(rèn) 為C語言并非是"difficult(困難)"的,只要你能理清思路,掌握它的精髓,那么自學(xué)C語言是一件非常容易且又其樂無窮的事。今天本人就與大家一 起談?wù)勅绾螌W(xué)習(xí)C語言或者說學(xué)習(xí)C語言應(yīng)從哪幾方面著手。
就個人感觸,無論學(xué)習(xí)哪門語言首先應(yīng)該了解一下自己所學(xué)語言的背景,也可以說它的發(fā)展史。C語言屬于高級程序語言的一種,它的前身 是"ALGOL"。其創(chuàng)始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因?yàn)樗荒苡糜赨NIX系統(tǒng)上。然而隨著科學(xué)技術(shù)的 進(jìn)步,計(jì)算機(jī)工業(yè)的發(fā)展,C語言逐漸脫離UNIX。1987年美國標(biāo)準(zhǔn)化協(xié)會制定了C語言的國際標(biāo)準(zhǔn),簡稱"ANSIC",從此以后它便成為一種廣泛使用 的程序語言。C語言的優(yōu)點(diǎn)很多,主要的有如下四點(diǎn):
兼?zhèn)涓呒壵Z言與低級語言的優(yōu)點(diǎn),屬于一種中間語言。
它是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,非常適合結(jié)構(gòu)化程序設(shè)計(jì)。
有較豐富的數(shù)據(jù)類型、運(yùn)算符以及函數(shù)供以選用。
直接與內(nèi)存打交道,使修改、編輯其他程序與文檔變得輕松,簡單。
怎樣才能學(xué)好c語言?想盡快上手就得掌握計(jì)算機(jī)的特點(diǎn),計(jì)算機(jī)的特點(diǎn)包括:
計(jì)算機(jī)在問題的處理方式上要求全,將所有的可能都要告訴它。
計(jì)算機(jī)要求程序的描述精確,無二義性。
計(jì)算機(jī)編程是要求有很強(qiáng)的全局性和邏輯性,不存在起伏的問題。
計(jì)算機(jī)要求它的主人,考慮問題要全面,所有可能的情況及處理都要告訴它,要求學(xué)會沉穩(wěn),心態(tài)要穩(wěn)定,要求交流的語句一定要明了含義單一。
怎樣才能很快的學(xué)會c語言,更快的度過磨合期呢?C語言的語法規(guī)則記憶理解當(dāng)然是不可少的,除此之外還應(yīng)注意以下幾個方面:
平衡心態(tài),雖然不能做到"不以物喜,不以己悲"的水平,但至少不要浮躁,不要急于求成,欲速則不達(dá)。
培養(yǎng)自身的全局意識,既能小無內(nèi),也能大無外,才行。
嚴(yán)格按照程序設(shè)計(jì)過程設(shè)計(jì)程序,不要跳脫,天馬行空,沒有規(guī)矩是不成方圓的。
努力提高自身的綜合素質(zhì)。程序是人思維的表達(dá)形式,是人處理問題思路和語言的結(jié)合體。你對客觀看成到什么程度和你掌握的知識成正比。如果你對處理的問題不理解,不會處理,你怎么也寫不出程序。
學(xué)會交流,多交流,相互補(bǔ)益,同時團(tuán)隊(duì)合作也是很重要的。
|
|