[轉]我的C++學習歷程(^_^) 選擇自 pongba 的 Blog

我的C++學習歷程(^_^) 選擇自 pongba 的 Blog

 

以作回顧、以作借鑑、以作鼓勵。。。

    在上大學以前我從未涉及過編程這一領域,倒是對電腦比較感興趣,這裏所說的“電腦”是指粗淺的應用,我會爲了從某一本雜誌上看到了一則修改註冊表的技巧而興奮不已,然後回家趕緊嘗試,卻不名就裏。上了大學,大一第一學期,學習的是“計算機基礎”,就是那種講如何操作Windows如何操作Word Excel的書,逃課一學期,覺得挺沒意思,只是爲大學裏的自由感到暢快,可以不用被強制睡午覺,晚上可以海闊天空的閒侃亂彈。身在數學系,大一第一學期感覺數學分析挺有意思,較認真聽課(現在想來那或許是我所有學科當中聽的最仔細的一門,卻也只聽了一學期,其中還逃課若干(講課的老頭很不錯)),然後那一學期數學分析神奇的拿了九十分(是我所有的學科中最高的),大一上其它課逃課率75%以上,有的課從不上。
    大一下是個轉折點,我們開了C++程序設計課程,我在大一上的寒假前得知此事決定用寒假的時間先看完錢能的那本書再說,其中原因並非我那時對C++感興趣,原因很“委瑣”,是爲了下學期能夠逃課去看我mm,於是寒假結束我看到類那一章,以爲小有所成(其實那時我連上機都還沒上過,只是紙上談兵罷了),然後,果然逃課一學期(直到學期末都不知道C++教師的名字),後來考了72分,心裏不服,竊以爲那老師出的題目太摳門,有些題目沒意義也沒意思(現在還這麼想)。於是,大一下,我幾乎又逃掉了所有的課,一無所成。只是覺得C++挺有趣的(這就是我所謂的“轉折點”----一個人如果對某一樣東西抱有充分的好奇和興趣,假以時日,則必有所成,就像劉慈欣在他的《朝聞道》中所寫的:“一個文明一旦對頭頂的星空抱有了充分的好奇,那麼離他們揭開宇宙的奧祕的時日就不遠了”,“從遠古第一條泥漿蟲爬上岸到進化出古人類用了百萬年時間,然而人類歷史纔多長?就已經創造出了這樣的文明?”)。
    在大一下的暑假前,我幸運的又發現了侯捷的《深入淺出MFC》,這本書的封面以及侯捷其人的簡介還有書內容的介紹都給我致命的吸引力,書的封面是一個登山者在夕陽下的剪影,有一句話:無限延伸你的視野! 我也記得侯捷其人的介紹,他用了陶淵明曾介紹自己的一段話爲“模板”:先生不知何許人也,閒靜少言,不慕名利,。。。好讀書,求甚解,每有會意便擊節高歌,欣然忘食,。。。嗜咖啡,妻嚴不能常得。。。,還有其書的介紹。
    就是這本書,在暑假裏帶我作了一次遊歷,這次遊歷令我終身難忘,本來,我可能像大多數數學系的同學一樣,過了大一下,就投入數值計算,常微分,偏微分的”懷抱“,但是這本書讓我着着實實領略到了C++的現實威力!MFC精緻的內部架構令我迷惘也令我迷醉,但是,讀這本書,我要說,真不容易,特別是,我讀的那時候我還是個初學者,所以我後來又讀了第二遍,其時我已經對C++終於小有了解了(真的只是小有了解)。
    大二上,繼續逃課,並明確自己的目標,將數學放在次要位置,將大量時間放在學習計算機上,那一學期我自學了數據結構(清華的〈數據結構C++描述〉),彙編(〈IBM PC彙編教程〉),32位計算機原理(清華的〈80X86計算機原理〉什麼的,具體名字記不清了,黃封面),操作系統(〈操作系統原理〉機械工業,扉頁有蓋茲的大頭照的:)),當然,C++沒有丟掉,那學期我學Windows API編程,要用C++,所以着重學應用,學Windows編程可是件麻煩事,撇開數以萬計的API不說,單是消息循環就讓人頭痛了,好在我看到了Jeff Richter的〈WINDOWS 核心編程〉,一切彷彿都明朗化了,只是不夠明朗,然後我試着用“該死的MFC”了,可以說,我幾乎沒怎麼用過MFC,因爲我又不去開發大型項目,自己做SDK編程,手工打造還有利於理解操作系統的機制呢。但是我瞭解MFC,有時我也會一頭扎進去跟蹤個清楚,只爲了瞭解一個類的結構,如何運作。。。這是種樂趣。
    我要說,學習操作系統有利於對C++的理解,C++之父的〈C++程序的設計與演化〉裏就講過它以前從事操作系統相關的工作,並在設計C++語言時從中借鑑良多,比如C++類的保護機制就是操作系統保護機制的某種借鑑。
    大二的上學期就這樣過去了,期末,成績都在及格邊緣。學習的操作系統自己覺得不夠深入,恨不能讓蓋瓷給我講WINDOWS的核心代碼和設計理念,而C++,也是沒怎麼進展。
     大二下又是個轉折,非典了,不能去看mm,總要找點事做吧,就去網上查書,看看有什麼C++方面的好書,一下查了一堆,於是:
        Effective C++
        More Effective C++
        C++對象模型深度探索
        Exceptional C++
        STL 源碼剖析
        C++設計新思維
        。。。
     這些書全都出現在我的書架上,我被C++迷住了,上面的每本書都讓我目眩神迷,C++的精妙,C++的廣博,直到斯時才展現在我這個菜鳥的面前,我瘋狂的看,那一個月時間我大概看了4~5本書。其中,STL源碼剖析讓我看到了C++中的另一片浩大的海洋----GP(Generic Programming,也就是泛型),我一下跌落進去,然後那本曾讓侯捷(就是譯者)目瞪口呆的〈C++設計新思維〉(Modern C++ Design)讓我“二階”目瞪口呆了,我看得在宿舍裏大叫:居然可以這樣的啊!!神!!----於是我爲GP的優雅和精緻所徹底折服了),讀這些書的時候,我不斷覺得我瞭解C++了,又不斷被下一個不知是什麼讓人驚奇的技術所打擊,覺得了解C++----難啊!(現在,我不在受“打擊”了,倒不是說我終於洞悉C++了,而是我終於能夠以平和的心態對待這個事實----我永遠也不能完全瞭解C++,她太廣博了,太深奧了。古龍說:“一個男人如果認爲自己瞭解女人,那他吃什麼虧都是應該的”,C++就是那個“女人”,特別是一但將C++應用到設計領域,突然就又產生了無窮多種可能,你似乎永遠也不會想到C++中一個看似不起眼的特性會被用到多麼巧妙的地方)
    然後,從非典以後,我對C++的學習幾乎就是GP了,書看完了,我就上CUJ,找出以前的文章閱讀,那已經是在暑假了,我一邊閱讀CUJ上的文章一邊翻譯〈Effective STL>(雖然有人認爲這本書遠沒有Scott Meyers的前兩本書好,但是至少其中有些章節還是不錯的,其實我覺得這本書缺少的是技術的激情,它只是經驗的結晶,所以未免顯的有點枯糙,但其價值任是大的),終於,在一再被CUJ中的泛型方面的文章所震懾的同時,我也決定自己“研究”點東西(畢竟,不能總是記憶啊),所以,我下載了boost庫,並試圖閱讀其源代碼,侯捷不是有〈STL源碼剖析〉嗎?咱也來個boost源碼剖析如何,於是我又一頭扎進去,有了上學期學GP並讀了侯捷的兩本追蹤源碼的書的基礎,在加上對C++語言機制的部分了解(這來自(C++對象模型深度探索)和(STL源。。。)以及(C++設計新思維)),讀boost代碼比較順利,當然其間我查閱了不少資料以瞭解某些機制,boost的設計者有時爲了減少代碼重複量將宏機制運用到了登峯造極的地步,這也導致源代碼難以閱讀,特別是boost只爲其應用做文檔,卻對技術細節隱而不言,所以,我只能一點一點啃),不過最終當我瞭解了其本質後,那種興奮是無以言表的,幸好,我第一個剖析對象是個比較有意思的類boost::function,泛型的函數指針,可應用於Command模式。其中技術細節比較多,也較有趣。於是當我分析完了以後我又興起了向程序員投稿的念頭,再次幸運的,稿件被錄用了,這是我第一次投稿,所以非常興奮,這篇稿件就在今年的九月號,源碼分析欄目,其中有個打印錯誤,使我很懊惱,畢竟這種技術文章不能含糊的,所以我又去將勘誤發到CSDN的論壇。
    再後來就是現在了,我大三了,從數學系轉到軟院,環境還可以,只是有某種受騙的感覺,其中有些老師的“水平”還是不敢恭維的。我還會繼續學習C++,C++仍然是個海洋,所以我決定開始看C++標準,讓自己對其有個最標準的理解,還看〈C++語言的設計與演化〉讓自己瞭解這個神奇的語言的設計理念。
    現在開JAVA課了,學JAVA的樂趣在於其應用,JAVA的庫非常完善,玩起來就像搭積木一樣,是另一種樂趣,.NET的庫也是一樣,只是語言本身的語意少了某種廣博和自由的意境。這樣的意境,我要說,只有C++能夠營造出來!!C++是自由的世界!!而JAVA連操作符重載都沒有,多重繼承都沒有,JAVA裏面除基本型別的所有對象都要new出來,缺乏真正的棧上的對象,JAVA的GP表現也虛假而薄弱。
    如果哪天C++消亡了,不是有一種新的,更好的語言取而代之了(我想這種“更好”的語言未必會出現哦),就是全世界的程序員都“懶”了。
    我絕對擁護C++,C++是個魔法世界,其中自由和層不窮的無可預知性讓人神迷。。。
==========
love C++,but love my gf - echo- more^_^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章