C/C++學習之路

 有人說C語言已經過時了,學程序設計應該從面嚮對象語言開始。在這一點上我持保留意見。
1、關於C語言的學習
    在Linux下,大部分的程序還是C語言實現的。Win32 API仍然是用C語言實現的。
    WINDOWS平臺C++應用廣泛是微軟力推的結果,但是現在WINDOWS平臺應用軟件的開發,有向C#偏移的趨勢,這要看VISTA系統推行的效果。到時候,恐怕大家又要跟風似的去學習C#了。作爲初學者,不要盲目地去追時髦,到頭來吃到苦頭的永遠是你自己。就像C#,當你剛剛熟悉2.0版本以後,3.0版本已經問世了,又要勿勿忙忙搭上3.0的列車。。。時代在不斷進步,技術在不斷髮展,我們要明白我們真正要學的基礎是什麼?就像物理學一樣,在沒有學習經典力學之前,就想學習最新的相對論思想,這可能嗎?
不管C++、java、C#怎麼發展,不管WINDOWS平臺青睞於哪種開發語言。C語言仍然是程序設計入門語言的首選。過早的接觸面向對象,會讓你忽於對計算機底層的瞭解。沒錯,編程首先是以人爲主,然後才考慮機器.但是,只考慮人,而完全不考慮機器是大錯特錯的,那會導致你爲所欲爲,以爲自己想到的,計算機就一定可以實現。然而,事實告訴我們,事情並不是我們想的那樣.
    在編譯器層面上,C++的實現最終仍然會被展開爲C形式的,完全沒有封裝的代碼。程序,最終還是要在機器上運行。只有面向對象,而沒有C基礎,在理解計算機底層技術的時候,還是要回過頭來學習C語言的編程思想的。
    美國在使用java等面嚮對象語言作爲入門語言幾年之後,現在已經又重新考慮使用C作爲入門語言了,原因,正如我前述所說。
    此外,Linux倡導的編程藝術是簡單美。在今後相當長的時間內,Linux平臺下的軟件開發還是以C爲主,當然,不排除KDE界面是用的C++,WEB開發使用java。
    至於編程思想的發展趨勢,現在C++積極提倡泛型編程的概念,這與面向對象是完全不同的概念,也是編程思想的一次革新。泛型同面向對象的結合,可以產生良好的效果。java和C#等面嚮對象語言也跟隨其後,提供了對泛型編程的支持。但無疑,C++在泛型編程方面是推進得最好的。
2、C++的學習
    建議學習C++從《C++ Primer》等經典外國名著入手,使C++的學習完全不依賴於平臺。
    畢竟,C++最先是在Unix系統,在貝爾實驗室提出來的。只是在WINDOWS上得到了發揚光大而已。
    一開始就輕視語言本身的學習,過早陷入MFC類庫,會讓你不能理解C++語言的真諦,寫出的C++代碼只能是C式的C++,這也是國內很多C++初學者常走的彎路。
    C++社區的大牛們現在都推薦把C++當作一門全新的語言來學習,完全與C區別開,使程序員不再寫C式的C++代碼。
    C++發展了二十年,已經不是簡單添加了類封裝的C語言了。如果你依然這麼認爲,那麼你對C++的認識還停留在上個世紀80年代。
    然而,我在上面又說學習要先打好基礎,那不是要從最初的C++思想學起嗎?確實,我們應該瞭解C++的歷史,這對於我們理解這門語言非常有用。但並不是要你抱着80年代的C++書籍埋頭苦讀,而是伴隨在moder C++的學習過程當中。C式的C++相對於modern C++有太多的缺點,我們幹嘛不學最好的方法呢。就像物理學一樣,其中的經典理論也經過了由錯到對的過程,那麼,我們還要從錯誤的思想開始學習嗎?學習C語言,我們也要從ANSI C未出現之前學習嗎?當然不是,基礎,並不代表就是陳舊的東西。
    但是,在國內,C++標準庫的使用並不廣泛,很多人對C++的使用依然停留在對C代碼的簡單類庫封裝上。這是很可悲的。還好,從2000年開始,大量現代C++名著被引入國內或者翻譯爲中文版,越來越多的人開始接觸modern C++。
國內的C++社區,也涌現出了侯捷、榮耀、劉未鵬等少壯派高手。
還是那句話,學習C++一定要看國外名著,譚浩強、錢能的C++書還是放到一邊吧,他們在誤人子弟。
    C++大牛們推薦首選使用STL標準庫,因爲它與平臺無關,而且拋棄了C語言中的種種缺陷和陷阱。但是人家沒有推薦MFC之類。
    充其量,MFC,現在我只用來做界面框架,因爲自己用SDK敲界面框架實在太麻煩了。然而MFC並不是唯一選擇,WTL、QT都是不錯的界面庫。而且,實際上MFC的封裝模式早已跟不上C++的步伐,要知道MFC推出時,C++仍未標準化。然而MFC卻沒有跟着C++的發展不斷重構自己的類庫,實際上MFC基礎架構根本沒有什麼大的變化。
    而現代C++類庫,如STL、ATL、WTL、BOOST、ACE、LOKI等等,都充分結合了泛型和麪向對象的優點,是現代C++的完美體現。MFC類庫,我承認,其中仍有許多東西值得我們學習。但是針對C++的設計思想來說,他的架構已經過時了,它仍然停留在對C語言的API簡單封裝的層次上,到處是稀奇古怪的宏代碼。這是不值得我們再學習的。
    至於進程和線程等底層處理,則直接使用API,即可以提高運行效率,又對於你認識操作系統很有幫助。
    在代碼的整體風格上,應該使用modern C++。在算法和數據處理上,儘量使用STL。只有使用到操作系統API的時候,才使用C語言。當然這其中有個C++代碼與C語言API交互的問題,其實很簡單,主要發生在vector和string上。
    最後,學習編程關鍵在於學習思想,不要禁錮於語言的細枝末節上。
    C語言是程序設計的基礎,C++的泛型思想可謂是程序設計思想的尖端、潮流。
    在掌握基礎之後,學習頂尖的設計思想,就如同輕車熟路一樣,非常輕鬆。
個人觀點:
    風格是修養,語法是外功,算法是內功,練好這3種纔是真正高手!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章