天天看點

以作回顧、以作借鑒、以作鼓勵

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

    在上大學以前我從未涉及過程式設計這一領域,倒是對電腦比較感興趣,這裡所說的“電腦”是指粗淺的應用,我會為了從某一本雜志上看到了一則修改系統資料庫的技巧而興奮不已,然後回家趕緊嘗試,卻不名就裡。上了大學,大一第一學期,學習的是“計算基礎”,就是那種講如何操作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^_^