天天看點

C語言學習之道

         有人認為,現在是java和.net的時代,有誰還需要C以及彙編呢?孰不知,java和.net是建立在軟體之上的,是為了壟斷市場而建立起來的體系,猶如挖好一個金壁輝煌的坑,請你往下跳,還自以為站在巨人的肩膀上,事實上成了坑底之蛙。要成為一個真正的程式員,并期望成為一個程式員高手,必須從機器出發,從cpu到作業系統,再到軟體體系,高手的境界就是悟道後的明鏡靈台,軟體設計出神入化,我就是程式,程式就是我。

         旁觀者李四說:此人大笨也!我用滑鼠随便拖幾個控件,就是一個xxx管理系統了,你用C語言怕是一年也寫不出來吧!好吧,我要承認,講這話的都已經是mS的奴才了,别的我不了解,MFC本身就是一個封閉的架構,從MFC入手學習,你隻會形成一種封閉的思維模式,因為MS希望很多人隻學會表面的東西,不緻成為高手,是以它大力推薦所謂的可視化的程式開發工具,也真有很多人願意上他的當,最後真正迷失方向。說他坐不了程式吧,他也可以作,但是如果程式複雜一點,出現問題時,問題出再哪裡就搞不清楚了,反正是不清楚!

梁肇新,大牛啊,他說:“我就搞不懂了,用滑鼠怎麼寫程式呢?在我的公司裡,高手的鍵盤響個不停,滑鼠偶爾響一下,新手是滑鼠響個不停,鍵盤偶爾響一下,他們的薪水相差的就不是一倍那麼多了!”

C語言是各大作業系統的基礎,Unix、Linux、Windows其核心都清一色是C語言開發的,(某些地方是和彙編語言混合開發的),君不見WindowsAPI都是C語言函數的接口?Unix/Linux絕大多數應用都是C語言開發的;Windows應用程式用純API開發已然不多,大多都是依靠某種ApplicationFramework,比如所謂的VC++,其實就是指VCIDE+C++語言+MFC(現在重點已轉向ATL、WTL),但是Windows服務、網絡、驅動程式等底層軟體,還是C語言開發的。各種語言的編譯器,包括java虛拟機,都是用C語言開發的。各種嵌入式裝置,如手機、PDA也都是C語言開發的。

          第一個要裝進行囊和你一起前進是“規範的格式” 。是以說,規範的格式是入門的基礎。那這個規範的格式包括什麼呢?不少啊,要堅持才能做到!長标志符命名,代碼縮進,一對大括号範圍不超過一螢幕,等等。

          第二個要裝進行囊的是耐心,所謂工欲善其事,必先利其器。要想成功,沒有一個相對平淡的過程是不可能的。這不僅僅指你在學習過程中要有耐心,要循序漸進,而起也說的是另一個重要的方面:調式程式。調試是寫程式過程中一個重要的方面,如果有人能一次寫成程式,牛啊,而且是大牛,不光是大牛,還是老子騎的那頭青牛,凡人是做不道的!調試是每個程式必定經曆的曆程。

第一招,學什麼呢?打狗棍法!呵呵

         有一個偉人說過:“重複權威是成熟的必經之路”,這是站在巨人的肩膀上的做法,習武之人首先要學的都是各種套路,比方說辟邪劍法,然後才能融會貫通,開宗流派;我們學習寫程式也要這樣來,這是一個捷徑,幫你走得更遠得捷徑。

看書,看好書!書中所寫,是前人數十年經驗所寫,看十本書,就相當于汲取了前人數十年的功力,那麼你的内功也會迅速上升1甲子。:)書當然要看好書,隻有好書才營養豐富。要做到讀書破萬卷,程式設計如有神;枯燥的看書是很郁悶的,很容易變成化石!現在很多是書都是用源碼說明問題的,源碼就像是動畫、就像是幻燈片,把書中的招式一一演練給你看。 自己手工輸入這一步不能省略,現在很多書有配套源碼,很多同學或者成年人學習的時候都耍小聰明,直接把源碼複制過去編譯運作,hoho,這是沒有效果的。

       TC至少有一個好處,可以鍛煉我們使用組合鍵的習慣,可以鍛煉我們使用鍵盤程式設計的習慣

   一、要讀就讀好書,否則不如不讀

  Kernighan和Ritchie的《TheCProgrammingLanguage》(中譯名《C程式設計語言》)堪稱經典中的經典,不過舊版的很多内容都已過時,和現在的标準C語言相去甚遠,大家一定要看最新的版本,否則不如不看。另外,即使是最經典最權威的書,也沒有辦法面面俱到,是以手邊常備一本《C語言參考手冊》是十分必要的。《C語言參考手冊》就是《CReferenceManual》,是C語言标準的較長的描述,包括絕大多數C标準庫函數的細節,算得上是最好的标準C語言的工具書。順便提一句,最新的《C程式設計語言》是根據C89标準修訂的,而《C語言參考手冊》描述的是C99标準,二者可能會有些出入,建議按照C99标準學習。還有一本《C和指針》,寫得也是相當地不錯,英文名是《PointersonC》,特别地強調指針的重要性,算是本書的一個特點吧。不過這本書并不十分适合初學者,如果你曾經學過C語言,有那麼一些C語言的基礎但又不是很紮實,那麼你可以嘗試一下這本書。我相信,隻要你了解了指針,C語言便不再神秘。

如果你已經啃完了一本C語言教材,想要更進一步,那麼有兩本書你一定要看。首先是《CTrapsandPitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊子,内容非常非常地有趣。要注意一點,這本書是二十多年前寫成的,裡面提到的很多C語言的缺陷都已被改進,不過能夠了解一些曆史也不是什麼壞事。然後你可以挑戰一下《ExpertCProgramming》(中譯名《C專家程式設計》),書如其名,這本書頗具難度,一旦你仔細讀完并能透徹了解,你便可以放心大膽地在履歷上寫“精通C語言”了。

切記一個原則,不要讀自己目前還看不懂的書,那是浪費生命。如果你看不懂,那你一定是缺失了某些必需基礎知識。此時,你要仔細分析自己需要補充哪些内容,然後再去書店尋找講述的這些内容的書籍。把基礎知識補充完畢再回頭來學習,才會真正的事半功倍。

二、Unix/Linux還是Windows,這是個很大的問題

不同的程式設計環境會造就出不同思維的程式員。Windows的程式員大多依賴內建開發環境,比如VisualStudio,而Unix程式員更加鐘愛Makefile與控制台。顯而易見,內建開發環境更容易上手,在Windows上學習C語言,隻需要會按幾個基本的VisutalC++工具欄按鈕就可以開始寫Hello,World!了,而在Unix下,你需要一些控制台操作的基本知識。有人也許認為Unix的環境更簡潔,但習慣的力量是很大的 。

         是以我建議初學者應該以VisualC++6.0(不是VisualC++.NET)或者DevC++作為主要的學習環境,而且千萬不要在IDE的使用技巧上過多糾纏,因為今後你一定要轉向Unix環境的。VisualC++6.0使用很友善,調試也很直覺,但其預設的編譯器對C标準的支援并不好,而DevC++使用gcc編譯器,對C99的标準都支援良好。使用順帶提一下,很多大學的C語言課程還在使用TurboC2.0作為實驗環境,這是相當不可取的,原因其一是TC2.0對C标準幾乎沒有支援,其二是TC2.0編譯得到的程式是16位的,這對今後了解32位的程式會造成極大的困擾(當然,用djgpp之類的東西可以使TC2.0編譯出32位程式,不過那過于複雜了)。

等你學完一本C語言的教材,你一定要轉向Unix平台繼續學習,幾乎所有的C語言進階教程都是基于Unix平台的(比如《C專家程式設計》)。轉變的過程是痛苦的,你需要面對的是各種紛繁複雜的指令,完全不同于Windows平台的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習慣更加符合C語言的思考方式和習慣。在Unix下,你可以找到無數優秀的源代碼供你盡情閱讀,你可以友善地檢視某個庫函數的聯機手冊,還可以看到最優秀的代碼風格(說到代碼風格,我會專門寫一篇文章詳細叙述)。

歸結起來就是一句話:初學C語言,建議使用Windows系統和內建開發環境,在準備向“高手”方向努力時,請先轉向Unix平台。

三、萬事俱備,你就是東風

書已標明,環境配置完成,正所謂萬事俱備,隻欠你自己的努力了。請從書的前言開始,仔細地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯誤的做法。前言是作者對整本書的大體介紹,作者一般會告訴你需要什麼基礎才能夠順利閱讀本書,這可以幫助你檢驗自己的基礎知識是否已經具備。看完前言,還要浏覽一下目錄,了解一下書的整體結構,順便給自己安排一下學習計劃。

例子之後就是習題了,我建議初學者把所有的習題都獨立做一遍

也許你認為這樣學習太慢,其實不然。學得細緻就不用走回頭路,等你學到後面才發現自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應該完成數千行乃至上萬行的代碼,無論是原封不動照抄書上的,還是自己心血來潮寫就的,都是今後繼續學習的一筆财富。以我自己舉例,閱讀《Windows核心程式設計》時(我隻閱讀了3/4的内容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統計),時隔多日,我早已記不清Windows的系統程式設計了,但隻要花幾分鐘翻出以前的代碼看看,便會重新了然于胸。所謂好記性不如爛筆頭,就是這個道理。

仔細讀書、認真抄寫源代碼、獨立完成習題外加更進一步的實驗,最後将所有的代碼留下,成為自己的經驗和财富,絕對的辛苦,也絕對的事半功倍。當然,這種方式隻适合學習需要精通的技術,如果不是學習C語言,你還要具體情況具體分析。

寫到最後,還有非常非常重要的一點沒有提及──代碼風格,從最開始學習就必須強迫自己模仿最優秀的代碼風格。因為代碼風格太重要内容也太多,我會用專門的一篇文章來詳細讨論,請大家關注《程式員之路──關于代碼風格》。

在這裡停一下,上面說的便是我學習的風格:總要經曆一番波折,瞎折騰幾下,然後才會有偶然間的明悟-開竅了!我甚至沒見過幾個人有我這麼笨,現在明白過來了,我總是一開始把事情想得過于複雜,造成狗咬刺猬的難堪的局面,然而竟然有意想不到的收獲!但是不建議大家模仿這種風格,起碼追女朋友的時候不能這樣,生活中很多機會在于接手的那一瞬間,失去就永遠找不回來了。

現在回來,後來偶然間,我看懂了一行代碼,是print語句,當時興奮得要命,又仔細看了這個看了那個,一下子看懂了很多東西,像是在霎那間被什麼給擊中似的,立刻間醍醐灌頂。。。。

         可是,還是那句話不破不立,不阻不行。就像我現在有了電腦,整天泡在網際網路的海洋裡,感受着快餐文化,好久都沒靜下心來好好想點東西了.

     談及C語言,我想凡是學過它的朋友都有這樣一種感覺,那就是“讓我歡喜讓我憂。”歡喜的是,C語言功能非常強大、應用廣泛,一旦掌握了後,你就可以理直氣壯地對他人說“我是電腦高手!”,而且以後若是再自學其他語言就顯得輕而易舉了。憂慮的是,C語言猶如“少林武功”一般博大精深,太難學了。其實就筆者認為C語言并非是“difficult(困難)”的,隻要你能理清思路,掌握它的精髓,那麼自學C語言是一件非常容易且又其樂無窮的事。今天本人就與大家一起談談如何學習C語言或者說學習C語言應從哪幾方面着手。

一.C語言的背景

就個人感觸,無論學習哪門語言首先應該了解一下自己所學語言的背景,也可以說它的發展史。

C語言屬于進階程式語言的一種,它的前身是“ALGOL”。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它隻能用于UNIX系統上。然而随着科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國标準化協會制定了C語言的國際标準,簡稱“ANSIC”,從此以後它便成為一種廣泛使用的程式語言。C語言的優點很多,主要的有如下四點:

1.兼備進階語言與低級語言的優點,屬于一種中間語言。

2.它是一種結構化程式設計語言,非常适合結構化程式設計。

3.有較豐富的資料類型、運算符以及函數供以選用。

4.直接與記憶體打交道,使修改、編輯其他程式與文檔變得輕松,簡單。

怎樣才能學好c語言

想盡快上手就得掌握計算機的特點,計算機的特點包括:

1、計算機在問題的處理方式上要求全,将所有的可能都要告訴它。

2、計算機要求程式的描述精确,無二義性。

3、計算機程式設計是要求有很強的全局性和邏輯性,不存在起伏的問題。

計算機要求它的主人,考慮問題要全面,所有可能的情況及處理都要告訴它,要求學會沉穩,心态要穩定,要求交流的語句一定要明了含義單一。

怎樣才能很快的學會c語言,更快的度過磨合期呢?C語言的文法規則記憶了解當然是不可少的,除此之外還應注意以下幾個方面:

1、平衡心态,雖然不能做到“不以物喜,不以己悲”的水準,但至少不要浮躁,不要急于求成,欲速則不達。

3、培養自身的全局意識,既能小無内,也能大無外,才行。

4、嚴格按照程式設計過程設計程式,不要跳脫,天馬行空,沒有規矩是不成方圓的。

5、努力提高自身的綜合素質。程式是人思維的表達形式,是人處理問題思路和語言的結合體。你對客觀看成到什麼程度和你掌握的知識成正比。如果你對處理的問題不了解,不會處理,你怎麼也寫不出程式。

6、學會交流,多交流,互相補益,同時團隊合作也是很重要的。

總之,實踐出真知,多學、多練、多思、多交流,勤奮好學才能學成。

有什麼不合适的地方還請多多指教!

轉載于:https://www.cnblogs.com/Xinmu/archive/2011/05/08/C1.html