總是被同學們問到,如何學習C和C++才不茫然,才不是亂學,想了一下,這裡給出一個總的回復。
一家之言,歡迎拍磚哈。
1、可以考慮先學習C.
大多數時候,我們學習語言的目的,不是為了成為一個語言專家,而是希望成為一個解決問題的專家。做一個有用的程序員,做一個賺錢的程序員。我們的價值,將體現在客戶價值上,而不是語言寫得好不好看。
C++是C的一個面向對象的解釋,C++為C擴充了大規模工程應用,復雜的系統結構的組織和掌控方法,但是,我認為,C++骨子裡還是C的。
畢竟,解決具體問題,每個函數內部,都是用C的方式寫程序,還是面向過程的。
因此,想要學習好C++,我的建議,先學習C,先學解決問題的能力,再討論解決大問題的能力。就是先學習怎麼走路,再學習怎麼跑步。
2、學習C的過程中,一定要理解結構化編程思維。
為什麼呢,我前面有文章說過,軟件語言的發展過程,就是一個數據私有化的過程,大型工程應用,強調高內聚,低耦合,模塊化設計,保持代碼最大的靈活性和安全性。
這是現代工程化開發的核心和靈魂。
因此,利用C這門語言入門,借此理解結構化開發思維,可以說是個很方便的路子。因為C的函數,本來就是為重用做准備的。同時,全局變量和cpp內部私有變量的差別,其使用原則,這些都能學到很多結構化開發思維。
3、開始學習C++
C++不難學的,很多人覺得C++難學,其實是因為它在C之外,又提供了很多的概念,尤其是對象,很難以理解。
不過我經過這麼多年,把這個問題反而看淡了,我認為面向對象相對面向過程,僅僅是結構化程序設計的一個具體體現,是編譯器提供手段,強迫程序員必須遵循數據私有化的一個實例,C++和C的關系,最核心的莫過於此。
現在我們回到C再看看,如果我們把一個全局變量,寫到一個cpp裡面,並且在對應的h文件中不聲明,它是不是就只有這個模塊可以使用?它是不是就是私有變量,以這個理解,類能明白了嗎?
4、學習C++的深入技巧
C++在類的基礎上,經過這麼多年的發展,其實提供了很多深入的概念,看起來很復雜,其實我看也很簡單。比如模板,我的理解就是“類的類”,大家說是不是?
既然模板理解了,STL,ATL這些,靜態模板庫,動態模板庫,還難理解嗎?就是一大堆類的類,可以借此實現很多應用中需要的類,不需要程序員再自己寫而已。
ok,STL都理解了,泛型開發還難嗎?所謂泛型開發,其實就是我做一個模板,來定義一套算法規則,但是呢,我希望這個算法規則,能進一步抽象,對核心數據類型不要限死,我把各種數據套進去,都可以用,這樣,僅算法這部分,我不需要重寫了。你想想是不是這個道理?
學到這裡,C++和C,其實已經差不多了。再學語言,就是求全責備,過於鑽牛角尖了。
5、學習應用開發
前面說了,學習語言,目的不是讓別人認為自己是專家,是為了寫程序賺錢。因此,語言學完,要學習應用開發。
什麼叫應用開發呢,我會一門語言,但是,客戶不懂,客戶說的很直接,在Windows下給我寫個程序,我要什麼什麼功能。為啥Windows呢?因為我習慣。
OK,很多時候,應用開發要尊重客戶習慣,一般說來,語言這個東東,還是要結合具體平台的開發,才能開發出有意義的應用程序賣錢。那麼,一般說來,客戶端是Windows系統,服務器是Linux,這些都是行業習慣,嵌入式不好說,各種平台都有,Palm,S60,Linux,WinCE,等等。要根據自己的目標客戶來定。
當我們選定目標平台後,有一個問題,選什麼語言,很多時候,學生和商用程序員差別就在這裡,學生一般沒得選,自己會啥就用啥呗,企業裡的程序員不會,要先評估需求,看哪個語言更合適,不會的語言,要去學。
ok,假定我們選了C和C++,那麼,我們需要選擇開發平台,Windows下不用說了,VC,這是最好用的,Linux下呢,gcc,其他的也差不多。
假如我們開發VC,並且使用C++,這個時候,才需要考慮學習MFC了,因為這是微軟的標准類庫,至少Windows平台下,它最權威,你看見沒有,我們從學習開始,走了多少步,才走到MFC?是不是MFC不是學習C++上來就必須學的?