1找筝、 C語言已死嗎筋讨?
本資料描述的是使用C語言的高級技巧凡人,力求將你的C語言能力由“基礎”提升為“高級”西傀。但是學習態(tài)度勝過學習方法饼齿,在正式學習之前掺逼,有一個問題不吐不快慢睡,那就是“C語言還值得學習嗎疲恢?”
正方觀點——C語言已死
正方論據(jù):C語言的三宗罪:
1笨蚁、代碼底層睹晒,缺乏共享。
與Java多如牛毛的庫函數(shù)括细、三方控件和框架相比伪很,C語言的庫函數(shù)簡直就是少的可憐。如果說Java是個富得流油的大財主奋单,那么C語言只是一個家徒四壁的小佃戶锉试。選擇C語言,開發(fā)者必須獨立設計所有的細節(jié)览濒,小到棧與隊列呆盖,大到串口與通信,必須從底層開始設計全部的代碼匾七。
比如字符串分解絮短,在Java中僅僅調用類的一個方法就可以完成,但在C語言中卻無從調用昨忆。又比如說數(shù)據(jù)結構丁频,Java中所有基本數(shù)據(jù)結構都提供了現(xiàn)成的類,但在C語言中,開發(fā)者必須自己設計諸如隊列與樹之類的內容席里。再比如說網絡通信叔磷,Java中重載一個類既可以獲取用戶在網頁中提交的內容,但在C語言中奖磁,這簡直就是不可以想象的事情改基。
有人說,Java只需2萬行完成的代碼咖为,在C語言中需要7萬行秕狰,這無不道理。
2躁染、指針犀利鸣哀,訪問靈活。
C語言特別靈活吞彤,可以訪問絕大多數(shù)的系統(tǒng)資源我衬,尤其是C語言的指針,簡直就是一把鋒利的倚天寶劍饰恕。當程序正確時挠羔,C語言能夠加速運行,減少代碼埋嵌。但是破加,誰能保證程序沒有bug呢?倘若代碼中出現(xiàn)了錯誤莉恼,哪怕是一丁丁的錯誤拌喉,也能如蝴蝶效應般產生不可估量的后果,所謂“一個語句可以造成程序全面崩潰”就是這個道理俐银。
3、應用狹窄端仰,界面簡陋捶惜。
幾個IT人討論技術,十有八九發(fā)現(xiàn)他們使用的都是Java荔烧。幾個學生展示課程設計吱七,Java同學總是展示某某管理系統(tǒng),引起同學們的陣陣驚呼鹤竭;而C語言同學總是展示一個黑洞洞的窗口踊餐,只帶來一些友情似的稀稀落落的掌聲。仿佛C語言在編程隊列中被邊緣化臀稚,似乎C語言項目正在一步一步的走向末路吝岭,好像C語言程序員正逐漸消失。
正方結論:C語言屬于英雄,他注定是英雄的長劍而不是平民的武器窜管,所以散劫,一般的大學生無須選擇和學習C語言。
其實并非如此幕帆,正如流言在真相面前不攻自破一般获搏,打消大家懷疑C語言的念頭,其實很簡單失乾,兩個數(shù)據(jù)就可以使這種懷疑消失的無影無蹤:
其一常熙、《編程語言排行榜》
翻開排行版,無論哪個月份碱茁,前三強必定是Java裸卫、C和C++,C語言的比重絕對超過15%早芭,Java也只是在20%左右彼城,所以學習C語言,絕非無用武之地退个。
其二募壕、招聘網站
進來各大招聘網站,搜索C語言及其相關崗位语盈,絕對可以得到大量的信息舱馅,這也從正面證實了學習C語言,前途是光明的刀荒。
由此看來代嗤,C語言不但未死,相反還活的有滋有味缠借。既然學習C語言前景廣闊干毅,那么為什么很多學生迷茫,很多學生談C色變呢泼返?這是因為硝逢,學習C語言,前途是光明的绅喉,道路——其實并不曲折渠鸽,但卻是掩蓋的,明明路就在前面柴罐,但是同學們就是發(fā)現(xiàn)不了徽缚,只好在黑夜中掙扎,把大部分學習的精力浪費在無休止的掙扎之中革屠,久而久之凿试,增加了C語言的恐怖氣氛排宰,自然而然地缺乏了學習C語言的興趣。
2 红省、這樣學習C語言最有效
學好C語言的秘訣就是1234:“一字真言额各,兩種態(tài)度,三個框架吧恃,四項注意”虾啦。
一、一字真言
各位看官痕寓,學好C語言傲醉,其實只需一個字,那就是“編”呻率。
(一)編硬毕。
學習C語言,乃至學習所有的語言礼仗,都講究一個動手——不是動手打人吐咳,而是動手編程序。你必須通過編寫程序來熟悉知識元践、理解知識韭脊。倘若只學不編,只看別人的程序单旁,自己不動手寫沪羔,是不能從入門到精通的。要知道象浑,在計算機界蔫饰,只說不練的人很欠揍。試想一下愉豺,你在哪里辛辛苦苦的編程序篓吁,他卻站在一邊,如老板一樣喋喋不休蚪拦,對你提出這項意見越除,那項思路,甚至暢談自己編程將會如何如何外盯,好像很牛皮的樣子,但就是不編一行代碼翼雀。估計大家碰上如此之人饱苟,只會一個動作,那就是點擊“踩”狼渊。
一個“編”字就可以學好C語言嗎箱熬?真的如此簡單嗎类垦?不是的,僅僅“編”是不夠的城须,你還需要“我編”蚤认。
(二)我編。
請注意修辭糕伐,“我”編砰琢!這個“我”其實就是只“你”,也就是學習C語言的人良瞧。
大家在學習C語言時陪汽,要多編寫程序,比如學習鏈表時褥蚯,要自己編寫鏈表程序挚冤,甚至自己編寫俄羅斯方塊等游戲程序來練習。不過有個前提條件赞庶,你必須自己編寫這些所有的程序才有效果训挡,如果你從網絡上下載了某某源代碼,或者拷貝了同學的程序歧强,任何大言不慚的說是自己編寫的澜薄,那么我也只能大言不慚的告訴你,這樣做出了養(yǎng)成偷竊的習慣外誊锭,沒有任何效果表悬!
有同學會問,那么“親自”編程序總可以精通C語言了吧丧靡,其實還差一點點蟆沫,僅僅“編”是不夠的,只是“我編”還不足以精通温治,為了達到C語言的最高峰饭庞,你還需要“我編編編”。
(三)我編編編熬荆。
“編”字重復三次舟山,這里的“三”,代表多卤恳,意思是你必須多多的編寫程序累盗。親自編寫10行代碼等于沒有編,親自編寫1000行代碼是遠遠不夠的突琳,親自編寫1萬行代碼還馬馬虎虎若债,親自編寫10萬行代碼,你絕對成為程序員中的戰(zhàn)斗員拆融。
乍一看10萬行代碼蠢琳,估計有同學會先直挺挺的躺下去啊终,然后又眼珠一轉站了起來——他們想起了壞主意“列耄“不就是10萬行嗎蓝牲,容易!現(xiàn)在的編程工具都有代碼生成功能泰讽,隨便在VC中用鼠標拖曳幾下例衍,搞一個MFC窗口程序,系統(tǒng)就自動生成了幾百行的代碼菇绵。在搞幾個三方控件肄渗,幾千行代碼就生成了!”
再次聲明咬最,“編編編”是有前綴的翎嫡,那就是“我”,也就是學習者自己永乌,使用代碼自動生成工具產生的代碼難道是“學習者”編寫的惑申?
要不上有政策,下有對策翅雏,“不用代碼生成器圈驼,那么就抄,照著輸入代碼就行望几!”哎绩脆,人不能無恥到那種地步!這十萬行代碼要“你”親自完成橄抹,親自在腦海中發(fā)芽靴迫、生根,再親自逐行輸入楼誓。這又不是什么政績任務玉锌,也不是什么形象工程,欺騙別人最終只能是自欺欺人疟羹。
二主守、兩種態(tài)度
一般人提起C語言,常常一個字如影隨形涌上心頭榄融,那就是“難”参淫!害怕啊,C語言真是太恐怖了愧杯,傳說中的指針真是太鋒利了黄刚,一不留神就把系統(tǒng)劃破,搞出幾個死機重啟都是太正常不過了民效。
其實沒有必要這么擔心憔维,本朝太祖曾經說過:“在戰(zhàn)略上藐視敵人,在戰(zhàn)術上重視敵人畏邢∫蛋牵”
(一)戰(zhàn)略上藐視C語言
其實,C語言也就是一個普通的語言而已舒萎,別把它想象的太難程储!與Java相比,C語言也只是程序復雜一點臂寝、代碼冗長一點章鲤、庫函數(shù)少上一點、三方控件難學一點咆贬,編譯工具簡陋一點败徊、指針麻煩一點,其他的都差不了多少掏缎,程序設計思想總是一樣皱蹦、程序構建總是相同的、程序語法總是類似的眷蜈、程序邏輯總是差不多的沪哺。
沒有必要對C語言談虎色變,把他當成一門普通的語言就行了酌儒。要知道辜妓,就算C語言再難,總比匯編語言容易掌握忌怎、比機器語言容易記憶籍滴、比英語容易掌握。所以要自信呆躲!一切C語言都是紙老虎异逐。
(二)戰(zhàn)術上重視C語言
雖然我們在C語言面前保持了激昂的斗志,雖然我們無所畏懼插掂。但是真正在學習得過程中灰瞻,還是務必保持謙虛謹慎的態(tài)度,戒驕戒躁辅甥,不要因為搞了一兩個俄羅斯方塊游戲程序就洋洋自得酝润,以為老子天下第一,甚至只遍了10行代碼璃弄,就到博客中到處罵人要销,到處“踩”人的帖子。要知道夏块,“雄關漫道真如鐵疏咐,而今邁步從頭越”纤掸,無論你學了多少,只要還沒有走上工作崗位浑塞,那么萬里長征就只是才邁出了第一步借跪,還有很長的道路等待著你。
三酌壕、三個框架
學習C語言掏愁,“編”不是問題,問題是“編什么”卵牍、“怎么編”果港、“編多深”,下面就來解決這些問題糊昙。
(一)靜心不靜
1辛掠、靜心。
學習的過程溅蛉,是一個漫長而枯燥的過程公浪,學習者必須要有吃苦耐勞的準備,靜下心來船侧,從大家的視覺中消失欠气,經受一個長時間的編程學生過程。吃盡苦中苦镜撩,方成人上人预柒!等你重新回到大家的視野時,你會有一個蛻變袁梗,那時一切的痛苦都將化為甘甜宜鸯。
溫瑞安先生有一部武俠小說,叫做《請借夫人一用》遮怜,我們這里也借用一下淋袖。當然不是借用別人的女朋友,而是了解一下主人翁的學習歷程锯梁。主人翁韋青青青出場時渾然是一個高手即碗,他把一千零一招的功夫柔和在一招之中,但是在其出場之前陌凳,江湖上沒有人知道韋青青青這一號人物剥懒,因為他正在十年如一日的專心練功,正是這種練功時的不為人知合敦,才造就了了日后的溫瑞安小說高手初橘。
不談武俠,來個IT版的例子。在遙遠的大洋彼岸保檐,在微軟的IE橫行之前耕蝉,在互聯(lián)網剛剛起步之時,有一個叫做“網景”的瀏覽器占據(jù)了市場99%的份額展东,網景公司在當時的美國更是比易中天還如日中天赔硫。可是盐肃,大家知道這個“網景”瀏覽器是誰開發(fā)的嗎?是一個學生权悟,他在大學中不顯山不漏水砸王,別的同學每天考慮著泡MM,他卻每天除了上課就是泡機房峦阁,是上也泡谦铃,下也泡,終于泡出了瀏覽器榔昔。
所以說驹闰,靜下心來,無論其他同學在多么興奮的展示他們的某某系統(tǒng)撒会,他們的某某網站嘹朗,既然你選擇了學習C語言,那么以韋青青青為榜樣吧诵肛,總有一天屹培,你會一舉成名天下知的。
2怔檩、不靜
學習C語言褪秀,務必不可以急躁,務必一步一個腳印薛训,此乃靜心媒吗。但是,學習C語言乙埃,也不可以太過沉默闸英,一個人呆在機房里閉門造車妄想著創(chuàng)造出某個絕世程序然后成為中國的比爾蓋茨是不可能的。
學習靠自己膊爪,所以大部分時候我們需要自己思考自阱、閉關修煉。但是一個人的力量終究是有限的米酬,很多時候我們需要借助外力沛豌。比如不懂的地方咨詢老師,不明白的地方可以與同學相互討論等等,都是可以的加派。
有很多同學叫确,學習時碰上困難,遇上了麻煩芍锦,于是自己冥思苦想——這是對的——還是得不到結果竹勉,于是故意回避不聞不問——這是自欺欺人。有同學說娄琉,那是因為無人可問次乓,問老師,貌似大學老師總是神龍見頭不見尾孽水,根本找不到票腰;問網絡大蝦,網絡大蝦們經常不在線女气,就算在線杏慰,面對洋洋灑灑的留言也視而不見,更別提回復了炼鞠;問同學缘滥,別提了太丟面子!大家同學而已谒主,為什么要問他朝扼,問他豈不是說明自己低人一等嗎,不問瘩将!
其實吟税,大學之中同學之間相互討論是最可行的一種做法,畢竟一個王重陽沒有時間指點全真七子姿现,網絡大蝦比投名狀中的兄弟還不可靠肠仪,所以除了自己多思考就是同學之間多討論了。不要擔心問問題會低人一等备典,老祖宗有一句話叫做“不恥下問”异旧,雖然你的水平比我低上一點點,但是提佣,我不覺得向不如自己的問提問是恥辱吮蛹。多好的阿Q精神啊,用這點拌屏!
只有靜心潮针,才可以更好的學到知識;只有不靜心倚喂,才可以更快的學到知識每篷。
(二)深入不深
1、深入
學好C語言,就一定不能浮躁焦读,要深入的學習知識子库。
其實,以上的話就極其浮躁矗晃,極其不深入仑嗅。誰不知道要深入學習啊,但是你的告訴大家张症,到底什么內容屬于深入學習的內容仓技。
其實,浮躁就是學習知識就是浮于表面俗他,沒有深入理解專業(yè)知識浑彰。表現(xiàn)在編程上就是只想編寫一些所謂漂亮的、能夠拿得出手的程序拯辙,而對于一些底層的支持程序置之不理。
有的同學喜歡編寫一些漂亮的程序颜价,比如設計漂亮的網頁涯保,使用某某工具開發(fā)某某‘大型’系統(tǒng)等等,當然這都是人之常情周伦。正如魯迅先生所說夕春,文章寫出來總是希望擁有更多的讀者,除非是寫給戀人的专挪。程序編出來及志,總是希望擁有更多用戶,除非是專門為愛人開發(fā)的寨腔。但問題是速侈,只編寫這類程序是不夠的,是有缺陷的迫卢。
這些所謂的程序倚搬,往往只需要對知識應用,并不需要刨根究底研究知識的本身乾蛤,甚至有很多加入了很多相當專業(yè)的內容每界,并不適合于初學者學習。比如VC中的MFC就是一個典型的誤導初學者的工具家卖。利用MFC可以很方便的編寫出DIAG界面程序或者視圖文檔程序眨层,從表面上看風光無限,但對初學者卻禍害無窮上荡!假如使用VC學習C++趴樱,大部分時間將用于消息的處理,控件的處理,還要閱讀大量的視圖文檔結構類庫說明伊佃,這些操作將耗費了你大量的時間窜司,得不償失。而且VC++的大部分編程是在某些位置插入代碼航揉,至于C++部分系統(tǒng)自動實現(xiàn)了塞祈,留給你的是純C語言操作。同學請注意帅涂,你學習的是C++议薪,不是VC類庫,也不是VC操作媳友!
比如使用數(shù)據(jù)結構斯议,就必須自己編寫有關鏈表、隊列和棧等內容醇锚,你是在學習哼御,又不是工作,當然得用自己編寫的東西呢焊唬。
又比如說C語言的內存分配函數(shù)恋昼,就是那個malloc和free。一般人直接調用就行了赶促,但是計算機專業(yè)的學生不應該止步于此液肌,而應該思考這兩個函數(shù)的系統(tǒng)實現(xiàn)方法,并且編程序模擬內存分配和釋放鸥滨。設計這樣的程序嗦哆,不但可以增強動手能力,還可以加深對計算機知識的理解婿滓,一舉多得老速,何樂而不為。
2空幻、不深
深入學習C語言是極其應該的烁峭,但是大家也必須有所側重,不能胡子眉毛一把抓秕铛,所有的東西統(tǒng)統(tǒng)深入约郁,具體表現(xiàn)在兩個方面:
其一、一些知識范圍不可過于深入但两。
有一些知識鬓梅,屬于偏僻的內容,既不是基礎谨湘,日后工作中也很難碰上绽快,而且還極度困難芥丧,像這樣的東西,了解即可坊罢,完全沒有必要深入续担。比如說某同學心血來潮,要編寫一個漂亮的輸入法軟件活孩,于是苦心學習了有關輸入法的所有知識物遇,還妄圖氣死清華紫光,餓死搜狗拼音憾儒,于是仔細研究輸入法的犄角旮旯询兴。其實這些知識均相當偏僻,了解即可起趾,完全沒有必要打破沙鍋問到底诗舰。
其二、一些界面或者不必要的功能不可過于深入训裆。
大家編寫的程序眶根,往往伴隨大量的交互式界面設計。事實上边琉,編程有個二八原則汛闸,即編寫80%的核心內容將耗費你20%的時間,而另外20%的功能將耗費你80%的時間艺骂。實際上,作為C語言學習隆夯,深入編寫好那80%的核心功能就可以了钳恕,耗費80%的時間去深入完善那些20%的功能,得不償失蹄衷!
所以忧额,練習用的程序,最好是一些基礎的愧口、底層的實現(xiàn)睦番,不要有太多花俏的圖像和交互式操作。當然也可以設計一些簡單的具備圖形界面的小游戲耍属,但此時你應該將精力更多注重于游戲本身的設計托嚣,而不是游戲的畫面風格和動畫效果上。
學習C語言厚骗,有所為有所不為示启。
(三)枯燥不枯
1、枯燥
學海無涯苦作舟领舰,學習當然是一個枯燥的過程夫嗓。用語言設計程序迟螺,表面上程序漂漂亮亮風光無限,其實風光的背后是黑漆漆的屏幕和冗長的代碼舍咖。程序員是把美麗獻給別人矩父,把枯燥留給自己的職業(yè)。
所以排霉,學習C語言窍株,就必須多設計一些枯燥的、無趣的實例郑诺。當flash程序員在展示圖片時夹姥,C語言程序員要去學習空洞的0和1的圖片格式;當Java程序員設計網站時辙诞,C程序員要去理解抽象的HTTP協(xié)議辙售;當.net程序員使用對象托管時,C程序員總是要考慮內存的申請與釋放飞涂;當C++程序員在歡樂的使用STL庫時旦部,C程序員必須自己搭建所有的數(shù)據(jù)結構。
在C語言的學習路上较店,絕對沒有學習其他語言那么多鮮花士八,這是每一個C語言愛好者必須接受的事實。
2梁呈、不枯
其實婚度,人都是需要動力的,憑什么別的程序員可以通過漂亮的程序享受MM的崇敬和同學的贊嘆官卡,而C語言程序員就只能在0和1的世界中與電腦溝通蝗茁。其實,學習C語言的過程完全可以是快樂的寻咒。
大家在基礎內容了解的差不多時哮翘,完全可以循序漸進設計一些簡單的趣味游戲程序,從貪吃蛇到俄羅斯方塊毛秘,從搞怪碰碰球到連連看饭寺,從掃雷到雷電,甚至還可以是植物大戰(zhàn)僵尸和憤怒的小鳥叫挟,編寫一些在界面上簡化的趣味游戲程序來艰匙,同意可以激起自己的興趣并獲取老師、同學尤其是MM的陣陣掌聲抹恳。
枯燥旬薯,是因為學習并非玩耍。不枯适秩,是因為要像玩耍一樣的學習绊序。
四硕舆、四項注意
(一)錯誤觀點:C語言低人一等
由于C語言常常應用于一些服務器程序,沒有漂亮的界面骤公,在一些同學的心目中抚官,C語言程序員就成了IT民工的代名詞。類似于煤礦工人阶捆,整天生活在地底下凌节。而那些Java程序員,.net程序員則成了白領麗人洒试。
(二)錯誤觀點:C語言高人一等
與第一種情況相反倍奢,一部分同學則認為C語言才是語言正統(tǒng)。俗話說:真正的程序員用C垒棋,聰明的程序員用delphi卒煞。那么其他的語言統(tǒng)統(tǒng)是神馬牌浮云,不值一提叼架。其他的程序員畔裕,無論聰明也好,愚蠢也罷乖订,都是盜版水貨扮饶。
(三)錯誤觀點:C語言是忠貞情人。
弱水三千乍构,只取一瓢甜无。有人在愛情上的忠貞,有人去在語言上忠貞哥遮,有人如斯內普般一生只愛一個女人毫蚓,有人欲效仿之,一生只使用一種語言昔善。
正如人生而平等一樣,其實畔乙,語言也沒有高低貴賤之分君仆,只有適合于不適合之分。Java適合做WEB開發(fā)牲距,C語言適合服務器返咱,C++適合做游戲,等等牍鞠。真正的程序員咖摹,不是只使用C語言的人,而是到什么山唱什么歌难述。任何語言萤晴、任何數(shù)據(jù)庫吐句、任何操作系統(tǒng)對他來說都只是工具挤牛,呼之能來毅整、來之能戰(zhàn)、戰(zhàn)之能勝附鸽、揮之能去屯断。當JQuery方便時文虏,我不直接用JavaScript;當速度優(yōu)先時殖演,我不用Java氧秘;當穩(wěn)定優(yōu)先時,我不用Windows趴久⊥柘啵總之,倚天劍也好朋鞍,屠龍刀也罷已添,統(tǒng)統(tǒng)是工具,為我所用滥酥,為我所奴役更舞。
(四)光說不練假把式
學習C語言的真言是“編”,但是也有同學會反駁坎吻,“這么簡單的程序缆蝉,也需要我親自編寫嗎?”瘦真、“這個程序我看一眼就知道怎么做了”刊头、“跳過這個程序,直接編寫后面的程序”诸尽、“不要把天才浪費在這種小程序上”等等之類的言論不絕于耳原杂。
上面其實就是典型的“眼高手低”。
大家在高中學習數(shù)學時常常有這樣的體會:一看就會您机,一做就錯穿肄。計算機編程其實也是一樣,咋一看簡簡單單际看,誰都可以說出個丁三卯四來咸产,但是真正上一實戰(zhàn),手也抖了仲闽,腰也彎了脑溢,腦袋也漿糊了。要么半天寫不出一行代碼赖欣,要么編譯就是報錯屑彻,怎么查也查不出原因之所在验庙。
所以,這里奉勸各位“高手”酱酬,實踐出高手壶谒。是騾子是馬,拉出來溜溜膳沽。請那些所謂的“高手”先試著做一兩個作業(yè)汗菜,真正得心應手一氣呵成才才是真正的高手,否則挑社,老老實實的地毯式編程吧陨界。
3、C語言初學者必讀的十句話
一痛阻、一定要養(yǎng)成一個規(guī)范標準的代碼排版格式菌瘪,好的排版會讓幫助你的人事半功倍。
二阱当、一定要培養(yǎng)自己查找錯誤的能力俏扩,要記住別人只幫你一時。
三弊添、一定要養(yǎng)成寫注釋的習慣录淡,特別是你的代碼要給別人看時。
四油坝、遇到問題嫉戚,一定不要立刻問別人,其實很多問題都是自己不小心所致澈圈,回頭看看書你可能會明白原來這也很簡單彬檀。
五、多看看頭文件中的內容瞬女,它能告訴你標準地調用庫函數(shù)的方法窍帝。
六、書上的程序其實都是比較經典的诽偷,何不在上機運行一下這些程序坤学,看看你對程序的理解力是怎么樣的。
七渤刃、優(yōu)秀的程序員不只對書本上的知識了解很透澈,而且對更深層次的知識有著強烈地吸引力贴膘。
八卖子、一定要跟上世界的腳步,閉門造車會導致你失敗的很重要的原因刑峡。
九洋闽、一定要認定一個方向玄柠,不要什么語言都想學,沒必要诫舅,你也沒有這個精力羽利。
十、一定要培養(yǎng)好自己的閱讀代碼的能力刊懈,必竟現(xiàn)在軟件項目不是一個人能完成的这弧。